首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从WCF服务中止流,而不读取它结束?

如何从WCF服务中止流,而不读取它结束?
EN

Stack Overflow用户
提问于 2012-07-29 22:39:00
回答 2查看 1.8K关注 0票数 17

这是我上周一直在调查的一个问题,但找不到任何解决方案。发现了问同样问题的帖子,但从来没有得到答案,希望这也能帮助其他人。

我有一个WCF服务,它返回一个内部包含stream的对象。我使用带有流传输的basicHttpBinding和Mtom将其发送到客户端。

客户端调用WCF服务,并在收到响应对象后立即关闭代理。

接下来,客户端读取它从WCF服务获得的流,并将其写入本地磁盘上的文件。所有这些都运行得很好。

我的问题是当客户端想要中止操作并停止从WCF服务下载数据时。如果我在流上调用.close(),例如:serverReply.DataStream.Close();,那么它会阻塞并读取整个流,直到它结束,然后再继续。流可能非常大,并且网络并不总是很快。

这对于两种网络资源的使用都是非常不可取的,这基本上浪费在不再使用的数据上。由于basicHttpBinding只允许两个并发的TCP连接(默认情况下)连接到WCF服务服务器,因此它会阻止其他连接尝试,直到流被读取到它的末尾。

我可以增加并发连接的数量,但这将是一个糟糕的解决方案,因为它会造成麻烦。

例如,仍在下载数据并将其丢弃的20次中止下载。我需要让传输完全停止。

在客户机上,流对象只是一个常规的Stream类,因此它只有close方法,没有其他方法。

在代理对象上调用.close().abort()没有任何帮助,使用.dispose()或任何其他方法销毁它也没有帮助。在服务器端,我处理OperationContext.OperationCompleted事件,但直到读取来自stream的数据时才触发该事件。

所以问题是,我如何在不完全读取的情况下关闭/中止流?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11710081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档