Vb.net 如何确定流是否为空?

Vb.net 如何确定流是否为空?,vb.net,wcf,.net-4.0,stream,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块 有什么想法吗?

我有一个WCF服务,它通过NetTcp端点以流的形式返回PDF文件。这一切都很好。但是,如果找不到文件,或者如果我在数据库中找不到相关行来检索文件路径,那么我将从服务返回
Stream.Null

然而,我似乎找不到一种方法来比较返回的流以检查它是否为空

我尝试了以下方法:

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

但这两种方法都不起作用,因为代码只会进入
If


有什么想法吗?

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

这是一个奇怪的设计选择。如果文件不存在,则为“预期”异常,应使用
FaultContract
处理该异常,并键入
FaultException
字段,该字段将
重定向将不会消耗任何资源的流


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

如果您的代码在不同的计算机上运行,这是正常的。空流(文档中的“没有备份存储的流”)不会通过线路进行不同的封送处理。在客户端,它只是一个始终返回EOF的流


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

您尝试过if(streamPDF.Equals(stream.null)True)吗?是的,尝试过。同样的结果。基本上,这与第二个条件相同,只是格式不同。是的,我正在看下一个。我试图避免使用异常,但我认为你是对的。现在我来试一试。定义一个
FaultContract
并抛出一个
FaultException
可以很好地解决这个问题。谢谢
If Not streamPDF.Equals(Stream.Null)
    'Code to execute if stream isn't empty
End If