我打算通过WCF Streaming传递MemoryStream,但似乎没有用,但是当我稍微更改代码以传递FileStream时,它正在工作。实际上,我的目的是传递大量业务对象(可序列化)。我正在使用basicHttpBinding。非常感谢您的建议!
编辑: 问题的症状是传入的流是空的。没有错误也没有例外。
答案 0 :(得分:53)
你没有提供很多细节,但是,我几乎可以肯定我知道这个问题是什么,因为我已经看到了很多细节。
如果您为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;
}