如何确定流是否为空?

时间:2011-09-26 09:41:27

标签: vb.net wcf .net-4.0 stream

我有一个WCF服务,它通过NetTcp端点将PDF文件作为流返回。这一切都很好。但是,如果找不到该文件,或者我找不到数据库中的相关行来检索文件路径,那么我将从服务返回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 :(得分:0)

Stream.Null只是您的服务范围构造。对于客户端,您很可能会获得空流=>它将是相同的流类型,就像您真正发送数据一样。

这是奇怪的设计选择。如果文件不存在,则为“预期”异常,应使用FaultContract处理并输入FaultException

答案 1 :(得分:0)

redirect字段{{1}}不会消耗任何Stream.Null operating资源的流。

您可以使用system属性检查流是否为空。

答案 2 :(得分:0)

如果您的代码在不同的计算机上运行,​​这是正常的。空流(文档中的“没有后备存储的流”)未通过网络进行不同的编组。在客户端,它只是一个始终返回EOF的流。

如果您需要携带一些额外的信息,您需要找到另一种方式(其他参数/​​值信息,例外),但不要使用Stream本身,或使用双方都理解的数据约定。例如“如果文件只有1个字节长并且包含字符255,那么,它就是'空流'”。