如何通过WCF流​​传输MemoryStream?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (18)

我打算通过WCF Streaming传递MemoryStream,但它似乎无法正常工作,但是当我稍微更改代码以传递FileStream时,它正在工作。实际上,我的目的是通过大量的业务对象集合(可序列化)。我正在使用basicHttpBinding。

问题的症状是传入流是空的。既没有错误也没有例外。

提问于
用户回答回答于

你没有提供很多细节,但是,我几乎可以肯定我知道这个问题是什么,因为我已经看到发生了很多事情。

如果MemoryStream为某个WCF服务操作的结果返回该对象,则需要在返回之前手动重置该流到其开始位置。WCF只会从当前位置读取流,因此如果该位置未被重置,则会返回空流。

这至少可以解释你描述的问题。希望这可以帮助。

这里有一些示例代码:

    [OperationContract]
    public Stream GetSomeData()
    {
        var stream = new MemoryStream();
        using(var file = File.OpenRead("path"))
        {
            // write something to the stream:
            file.CopyTo(stream);         
            // here, the MemoryStream is positioned at its end
        }
        // This is the crucial part:
        stream.Position = 0L;
        return stream;
    }

扫码关注云+社区