2012-05-01 18 views
2

が配置されているにもかかわらず、接続開いたままになります。私はこれを知っています。なぜなら、パフォーマンステストでは、10回目の呼び出しでコールがタイムアウトしてしまいます。コマンドラインでnetstat -aを実行すると、ローカルマシンとポート80上のソケットが一杯に見えます。.NET WebChannelFactoryサービスプロキシはそれが私は、次のコードを持っている

プロキシをソケットに近づけるにはどうすればいいですか?

答えて

2

問題はサーバー側でした。使用可能なソケットを使い果たしたサービスインスタンスごとにシグナルRクライアントのリークがありました。

これが発生したとき、クライアントはもはや接続できなくなりました。

他の誰かが同様のものをデバッグするヒント:サーバーを見て、何らかの種類のWCFクライアントを構築していないかどうかを確認し、それらをクリーンアップしないでください。それを払拭した症状は、クライアントプロセスが終了した後もnetstat -aで見たソケットがESTABLISHED状態のままであったことです。

0

残念ながら、MicrosoftがWCFでサービスプロキシ(IClientChannelおよびその継承者)を実装した方法では、Close/Disposeメソッドで例外が発生することがあります。このような場合は、Abortメソッドを呼び出してアンマネージリソース(ケースのTCPソケット)を解放する必要があります。この問題についてはbrief blog postをご覧になり、usingステートメントの代わりにそのdisposeパターンを実装してください。

+0

ありがとうございました。私は何の例外も見ていないのですが、何とか沈黙することができますか? – Joon

+0

'using'ステートメントの「最後に」フェーズ中に発生した場合、これらはサイレントになる可能性があります。 WinDbgに精通している場合は、TCPソケットリークが発生したときにメモリダンプを取って、それらがどのようにメモリに保持されているかを確認してください。これは、インスタンス参照の問題と.NETガベージコレクタ処理の手がかりを与えるかもしれません。 –

+0

私は問題を発見した、それはプロキシとは関係がないことに終わった。私たちはSignalRクライアントをサーバー側のサービスコールでリークしていました。 WCFソケットの制限に達すると、クライアントは接続できませんでした – Joon

関連する問題