2009-09-25 63 views
3

最近我一直在研究WCF應用程序,並且需要一些功能來壓縮soap消息正文,以便來自服務的響應的大小應該是降低。WCF - 通過使用WS-Compression與net.tcp綁定關閉套接字

經過一番研究,我發現了一個可以從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傳輸的自定義綁定)嘗試它,該應用程序仍然運行良好。但是,當我通過一些跟蹤工具檢查它時,發現有些奇怪。

我在ChannelFactory創建客戶端的方法上調用了10次單元測試,並明確添加了所有綁定元素,包括壓縮綁定元素。當我首先檢查了TcpTrace中的響應時,我驚訝地發現所有這10條消息都合併在一個請求中。

所以我試着用SvcTraceViewer檢查請求,發現套接字連接一直保持打開狀態,直到服務關閉。我查看了處理進度,並相信所有消息,每個請求都關閉了通道,但連接沒有關閉。

這個問題只發生在使用壓縮綁定元素的net tcp綁定中,如果該元素沒有被添加到綁定或在http綁定中,一切看起來都很好。

有沒有人嘗試過這種解決方案,並看到過相同的問題?我還能做些什麼來強制連接關閉嗎?我可以錯過任何東西嗎?

非常感謝, 託尼

回答