WCF - ソケット接続バインディングnet.tcpとWS-圧縮を使用することによって閉じられていません
-
16-09-2019 - |
質問
最近、私は、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 に、その著者は、そのチャンネルに関連するクラスに関連付けられた新しいbinding要素「CompressionBindingElement」を作成します。
この圧縮ソリューションは、私のWCFのアプリで完璧に動作、および応答の大きさは素晴らしい、約90%に減少しました!私が最初に結合HTTP経由でそれをテストし、すべてが良いようです(カスタムHTTPトランスポートを使用して結合を意味する)。
私は(TCPトランスポートを使用してカスタムバインディング)バインディングnet.tcpを経由して、それを試してみましたら、アプリはまだよく働きました。私はいくつかのトレースツールでそれを確認したときにしかし、私は奇妙な何かを見つけます。
私はのChannelFactoryによってクライアントを作成し、明示的要素を結合圧縮を含むすべての結合要素を追加する方法、の10倍を呼び出すことにより、ユニットテストをしました。私が最初にTcpTraceに応答をチェックすると、私はこれらすべての10件のメッセージが単一の要求に組み合わされていることを見て驚きました。
だから私は、要求を確認するためにSvcTraceViewerを試みたが、サービスがシャットダウンされるまでのソケット接続が開いたままにすることを発見しました。私は、処理の進捗状況の内側を見て、すべてのメッセージを信じ、チャネルはそれぞれの要求のため閉鎖されているが、接続だけで閉じられません。
要素が結合または結合すべてがうまくようです。HTTPに追加されなかった場合、問題はのみ、圧縮結合要素との結合ネットTCPで起こった。
は、誰もがその解決策を試してみましたが、以前と同じ問題を見ていますか?私は閉じるために、接続を強制的に行うことができます何かはありますか?私が何かを見逃してもらえますか?
多くのおかげで、 トニー
解決
に見えます: http://msdn.microsoft.com/en-私たち/ライブラリ/ ms751458(V = VS.90).aspxのの
私はそれを上にテストし、問題がなくなっているように見えます。それはその何日後に私のユニットテスト実行を行うためにそれは容易ではありません。)