2009-04-27 19 views
18

WCFサービスのクライアントプロキシのインスタンスをAppクラスのプロパティに配置して、アプリケーションのどこからでも取得できます。いつWCFクライアントを閉じるのですか?

私はクライアントを閉じていない、私はアプリの期間中開いたままにしています。これの主な理由は、// WCFサービスのmexページ(//ブラウザにWCFサービスURLを指定した場合に得られるコメント)の//コメントに従うということです。//常にクライアントを閉じます。 client.Close();

私はclient.SomeAsync()メソッドを呼び出した直後にclient.Close()を呼び出した場合を除いて、結果は戻ってくる前に閉じています。私はCompleted()メソッドにcloseを置くべきですか?それとも、閉じてしまえば、クライアントプロキシの新しいインスタンスを作成する必要があります(それがApp.propertyに格納されていない可能性があります)。

ありがとう、 スティーブン

答えて

12

助言としてあなたはそれを閉じる必要があります。そして、あなたは非同期メソッドを使用している場合はyesの場合、あなたは、コールが完了した後にのみ、それを閉じる必要があります。

(開口部)を作成し、クライアントを閉じるWCFのための規範であります新しいクライアントを継続して作成して閉じるには、パフォーマンス上の大きなペナルティはありません。

+0

closeを使用すると、例外が発生する可能性があるため、try catchも同様に追加することを忘れないでください。 http://msdn.microsoft.com/en-us/library/ms405496.aspx私はこのように試してみてください。 { client.Close(); } catch { client.Abort(); } –

+0

ClientBase でDisposeを呼び出すと、Closeが呼び出されることにも注意してください。 –

1

E Completedメソッドのfinally {}で明示的に閉じます。何らかの理由でクライアントが接続されたままになっていると、他のクライアント呼び出しをブロックすることになります。 HTTPのRFCごととして:1999(RFC 2616)で定義され

「持続的接続を使用し クライアントが 彼らは 特定のサーバーに維持同時 接続数を制限する必要があります。単一ユーザのクライアント は、サーバまたはプロキシとの接続を2つ以上 にしてはならない(SHOULD NOT)。 プロキシは別のサーバへの接続を2 * N まで、または プロキシに接続するべきです(Nは 同時アクティブユーザの数)。これらの ガイドラインは HTTPの応答時間を改善し、 輻輳を回避することを意図している。」開発者は のhttp制限がますます 議論されているWebページ アップデートにAJAXやAJAXのような要求を使用しているので。

負荷をかけて接続を閉じていない場合は、ブロックが開始される可能性が非常に高いです。私はもちろん、これがHttpBindingであると仮定しています。

関連する問題