同期使用後に Web サービス プロキシ インスタンスを破棄/クリーンアップするためのベスト プラクティスは何ですか?
SoapHttpClientProtocol
プロキシ クラスがvsから派生した場合、答えはどのように異なりますClientBase<T>
か?
バックグラウンド
私の WCF Web サービスの 1 つが、サービス呼び出しに応答しなくなった状態になることがある理由を理解しようとしています。基本的にハングしているように見えますが、今のところ、これが発生したときに何が起こっているのかを把握するための確かなデータはありません.
私が問題と考えていることの 1 つは、この WCF サービス自体が他のいくつかのサービスに対して Web サービス呼び出しを行っているという事実です。これらの他のサービスは、(wsdl.exe を使用して作成された) から派生したプロキシを使用して (同期的に) 呼び出さSoapHttpClientProtocol
れ、現時点では、これらのプロキシ インスタンスはファイナライザーによってクリーンアップされるために残されます。
...
var testProxy = new TestServiceProxy();
var repsonse = testProxy.CallTest("foo");
// process the reponse
...
では、これらをusing(...) { ... }
ブロックにまとめる必要がありますか?
...
using(var testProxy = new TestServiceProxy())
{
var repsonse = testProxy.CallTest("foo");
// process the reponse
}
...
ClientBase<T>
を使用して再作成することにより、これらのプロキシ クラスをベースに変更するとどうなりsvcutil.exe
ますか? これまでの私の調査に基づいて、Dipose()
から派生したクラスのメソッドがクラスのメソッドClientBase<T>
を内部的に呼び出し、Close()
このメソッドが例外をスローする可能性があるようです。ClientBase<T>
したがって、 aに基づいてプロキシをラップすることUsing()
は、必ずしも安全ではありません。
質問を繰り返します:
- プロキシが に基づいている場合、使用後に Web サービス プロキシをクリーンアップするにはどうすればよい
SoapHttpClientProtocol
ですか? - プロキシが に基づいている場合、使用後に Web サービス プロキシをクリーンアップするにはどうすればよい
ClientBase<T>
ですか?