Как я могу определить, что поток пуст? - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть служба WCF, которая возвращает файлы PDF в виде потока через конечную точку NetTcp. Это все работает нормально. Однако, если файл не найден или я не могу найти соответствующую строку в базе данных для получения пути к файлу, тогда я возвращаю Stream.Null из службы.

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

Я пробовал следующее:

If myStream IsNot Stream.Null
    'Code to execute if stream isn't empty
End If

и

If Not streamPDF.Equals(Stream.Null)
    'Code to execute if stream isn't empty
End If

Но ни одна из них не работает, поскольку код просто переходит в блок If.

Есть мысли?

Ответы [ 3 ]

0 голосов
/ 26 сентября 2011

Поле Stream.Null , которое redirect - поток, который не будет потреблять никаких работающих системных ресурсов.

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

0 голосов
/ 26 сентября 2011

Если ваш код работает на другом компьютере, это нормально. Нулевой поток («Поток без резервного хранилища» из документации) не распределяется по проводам по-разному. На стороне клиента это просто поток, который всегда возвращает EOF.

Если вам нужно нести некоторую дополнительную информацию, вам нужно найти другой путь (другие параметры / значения, исключения), но не использовать сам Stream или использовать соглашение о данных, понятное обеим сторонам. Например, «если файл имеет длину всего 1 байт и содержит символ 255, то это« нулевой поток »».

0 голосов
/ 26 сентября 2011

Stream.Null - это только ваша область обслуживания. Для клиента вы, скорее всего, получите пустой поток => это будет тот же тип потока, как если бы вы действительно отправляли данные.

Это странный выбор дизайна. Если файл не существует, это «ожидаемое» исключение, и оно должно быть обработано с FaultContract и напечатано FaultException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...