Vb.net 如何确定流是否为空?
我有一个WCF服务,它通过NetTcp端点以流的形式返回PDF文件。这一切都很好。但是,如果找不到文件,或者如果我在数据库中找不到相关行来检索文件路径,那么我将从服务返回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块 有什么想法吗?
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