如何通过WCF流​​传输MemoryStream

Kya*_*ein 16 c# wcf wcf-binding

我打算通过WCF Streaming传递MemoryStream,但似乎没有用,但是当我稍微更改代码以传递FileStream时,它正在工作.实际上,我的目的是传递大量业务对象(可序列化).我正在使用basicHttpBinding.非常感谢您的建议!

编辑:问题的症状是传入的流是空的.没有错误也没有例外.

mth*_*rba 53

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

如果MemoryStream为了在WCF服务操作的结果返回该内容而向a写入内容,则需要在返回之前手动将流重置为其开头.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;
    }
Run Code Online (Sandbox Code Playgroud)