【发布时间】:2009-09-25 09:02:01
【问题描述】:
最近我一直在开发 WCF 应用程序,需要一些功能来压缩soap消息正文,以便减少服务响应的大小。
经过一番研究,我从 http://weblogs.asp.net/cibrax/archive/2006/03/29/WS_2D00_Compression-for-WCF.aspx'>http://weblogs.asp.net/cibrax/archive/2006/03/29/WS_2D00_Compression-for-WCF.aspx 在线找到了一个实现,作者是它创建了一个新的绑定元素“CompressionBindingElement”,与其通道相关的类相关联。
此压缩解决方案在我的 WCF 应用程序中完美运行,响应大小减少了近 90%,太棒了!我首先通过 http 绑定(意味着使用 http 传输的自定义绑定)对其进行了测试,一切似乎都很好。
一旦我通过 net.tcp 绑定(使用 tcp 传输的自定义绑定)尝试了它,该应用程序仍然运行良好。但是,当我通过一些跟踪工具检查时,我发现了一些奇怪的东西。
我做了一个单元测试,对一个方法调用了 10 次,这个方法通过 ChannelFactory 创建了客户端,并显式添加了所有绑定元素,包括压缩绑定元素。当我第一次在 TcpTrace 中检查响应时,我惊讶地发现所有这 10 条消息都合并在一个请求中。
于是我尝试使用 SvcTraceViewer 检查请求,发现套接字连接一直保持打开状态,直到服务关闭。我查看了处理进度,并认为每个请求的所有消息、通道都已关闭,但连接并未关闭。
该问题仅发生在带有压缩绑定元素的 net tcp 绑定中,如果该元素未添加到绑定或 http 绑定中,一切似乎都很好。
以前有没有人尝试过该解决方案并遇到过同样的问题?我还能做些什么来强制关闭连接吗?我会错过什么吗?
非常感谢, 托尼
【问题讨论】:
标签: wcf nettcpbinding tcptrace-pocketsoap