Поток. Длина бросает NotSupportedException

Я получаю ошибку при попытке потока. Длина на Потоковом объекте, отправленном в мой метод WCF.

Unhandled Exception!
 Error ID: 0
 Error Code: Unknown
 Is Warning: False
 Type: System.NotSupportedException
 Stack:    at System.ServiceModel.Dispatcher.StreamFormatter.MessageBodyStream.get_Length()

Как Вы получаете длину потока? какие-либо примеры?

29
задан Nevin Mathai 30 July 2010 в 16:41
поделиться

4 ответа

Stream.Length работает только в реализациях Stream, где доступен поиск. Обычно вы можете проверить, истинно ли Stream.CanSeek . Многие потоки, поскольку они потоковые , имеют характер, при котором невозможно узнать длину заранее.

Если вам необходимо знать длину, вам может потребоваться фактически буферизовать весь поток, предварительно загрузив его в память.

31
ответ дан 28 November 2019 в 01:17
поделиться

Вы не всегда можете получить длину потока. В случае сетевого потока единственный способ узнать длину - это, например, считывать данные из него, пока он не закроется.

Что вы пытаетесь сделать? Можете ли вы читать из потока, пока он не будет исчерпан, копируя данные в MemoryStream по ходу дела?

6
ответ дан 28 November 2019 в 01:17
поделиться

Не всегда возможно получить длину потока, если он не поддерживает поиск. См. Таблицу исключений в классе Stream .

Например, поток, подключенный к другому процессу (сетевой поток, стандартный вывод и т. Д.), Может производить любой объем вывода, в зависимости от того, как написан другой процесс, и у инфраструктуры нет способа выяснить, сколько данные есть.

В общем случае вам просто нужно прочитать все данные до конца потока, а затем выяснить, сколько вы прочитали.

6
ответ дан 28 November 2019 в 01:17
поделиться

TcpClient.EndRead() должен возвращать количество байт, находящихся в потоке.

--Edit, конечно, вам нужно использовать TCP поток

0
ответ дан 28 November 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: