我写了一个公开WCF REST Web服务的Windows服务应用程序。呼叫签名如下:AdapterStream从不在WCF服务中正确刷新?
[OperationContract]
[WebInvoke(
Method = "POST",
UriTemplate = "/render",
BodyStyle = WebMessageBodyStyle.Bare)]
Stream Render(Stream input);
它的实现,像这样:
public Stream Render(Stream input)
{
return new AdapterStream(output => DoActualWork(input, output));
}
但马上,当渲染()返回时,底层流调用客户端被切断,从而得到一个HTTP 200 OK和0字节的正文数据。紧接着,DoActualWork()内部的断点被击中 - 所以服务器实际上完成了它的工作,并在接下来的几秒内将数据转储到AdapterStream中,但是到那时,调用者已经断开并且很久没有离开。
任何想法,为什么会发生这种情况?由于DoActualWork()实际上被调用,所以框架似乎确实试图从AdapterStream中获取数据,但是......太迟了,或者什么都没有。
如果没有别的,你是否有任何其他的建议来实现相同的事情(即绕过结果流是返回值而不是方法参数),而不必将(巨大)结果转储到MemoryStream中首先并返回?顺便说一句,除了吃大量的记忆之外,它就像一种魅力。