这是我上周正在调查的问题,找不到任何解决方法。找到相同的帖子,但从来没有得到答案,希望这也会帮助其他人。如何从WCF服务中止流而不读取结束?
我有一个WCF
服务返回含有stream
内它的对象。我使用basicHttpBinding
与流传输和Mtom发送到客户端。
客户端调用WCF
服务和接收响应对象后立即关闭代理。
接下来,客户端读取它从WCF服务得到了流,并将其写入到本地磁盘上的文件。所有这些工作正常。
我的问题是当客户端想中止操作并停止从WCF服务下载数据。 如果我在流上调用.close()
,例如:serverReply.DataStream.Close();
,则它会阻止并从WCF服务读取整个流直到其结束,然后继续。流可能非常大,网络并不总是很快。
这对于网络资源的使用都是非常不希望的,基本上浪费在没有用处的数据上。而且由于basicHttpBinding
只允许两个并发的TCP连接(默认情况下)到WCF服务服务器,所以它会阻止其他连接尝试,直到流被读取直到其结束。
我可以增加并发连接数,但是这将是一个坏的解决方案,因为它会造成麻烦的开口。
例如,20次中止下载,仍在下载数据将其丢弃。我需要完全停止转移。
在客户端,流对象只是一个普通的Stream
类,所以它只有close方法,没有别的。
在代理对象上调用.close()
或.abort()
没有帮助,也不会使用.dispose()
或任何其他方法销毁它。 在服务器端,我处理OperationContext.OperationCompleted
事件,但直到从stream
的数据被读取到结束时才会触发它。
所以问题是,如何关闭/中止流没有完全读取它?
这是什么运气? – Schultz9999 2013-02-05 18:59:56
发送真正大文件时遇到同样的问题...似乎必须错过一些非常明显的东西。我可能将不得不实施分块作为解决方法。 – 2013-02-14 14:23:12