【问题标题】:WCF - Socket connection not closed by using WS-Compression with net.tcp bindingWCF - 使用带有 net.tcp 绑定的 WS-Compression 未关闭套接字连接
【发布时间】: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


    【解决方案1】:

    貌似微软现在有一篇关于压缩编码器的官方文章: http://msdn.microsoft.com/en-us/library/ms751458(v=VS.90).aspx

    我测试了一遍,看起来问题已经消失了。这么多天后让我的单元测试运行起来并不容易:)

    【讨论】:

      猜你喜欢
      • 2010-12-13
      • 1970-01-01
      • 2012-09-04
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      相关资源
      最近更新 更多