Null Checking Stream.Null

本文关键字:Null Stream Checking | 更新日期: 2023-09-27 18:08:50

我已经落在相同的情况下根据这个问题,然而,这是不同之处在于,现有的问题有访问服务器代码抛出FaultException,如果流是空的,而我正在消费一个供应商的web服务,其中它返回Stream.Null是web服务为空。

我们确实尝试要求供应商更改方法以抛出故障,但供应商给出的理由是存在其他系统使用此方法,并且从返回Stream.Null更改可能会破坏其他系统。

我想知道是否有人能教我如何在流上执行空检查。空吗?

我试过== null,它似乎不起作用。Web服务是通过Web引用绑定到WCF的。

更新
我已经找到了返回的流。通过WCF设置为Null将导致CanSeek = false(正如下面一条评论中提到的那样)(好吧,至少这是从我的供应商web服务返回的。)这是否意味着从WCF返回的每个流都是CanSeek = false并且无法找到长度?

Null Checking Stream.Null

由于您使用的是WCF,不从流中读取就检查Length是不可能的,因此您可以从流中读取一个字节来查看它是否为空。

var isEmpty = streamFromWcf.ReadByte() == -1;

它不会告诉你它是否是一个流。空流——只是它是空的。根据你的需求,你可能会想要发送一个布尔值来表示它是否实际上是一个空流。

您可能需要检查流的Length。如果为0,则流为空

我知道这个问题很老了,但是这个代码对我有用

if (stream == Stream.Null)
{
    // Do something
}
https://learn.microsoft.com/en-us/dotnet/api/system.io.stream.null