フォームからWCFサービスを呼び出しています。サービスはIISでホストされています。次の属性を持つサービス:InstanceContextMode.PerSession、ConcurrencyMode = ConcurrencyMode.Multiple
すべての同時呼び出し、インスタンス、およびセッションについて、スロットル動作を最大2000に設定しました。
ただし、200を超えるASynchリクエストを取得できないようです。その後、サービスは応答せず、セッションは最終的にタイムアウトになります。
Asynch呼び出しを使用して、サービスのメソッドを呼び出しています。コードをコピーする
IASyncResult res = Proxy.BeginMethod(endCall、null);
次に、応答をキャッチするために、IASyncResultを受け取り、EndMethod()を介して結果を処理するendCall関数があります。
負荷シミュレーション@1秒のメソッド呼び出しでは、約200回の呼び出しまですべて正常に機能し、その後待機します...(この時点で、これらの200回の呼び出しから199または198の応答があります)。-理論的にはそこにあります。 2つ程度の200の同時セッションであってはなりません。
おそらく、私が行っていないガベージコレクションまたはクロージングがありますか?助言がありますか?
- - アップデート - -
おそらく、プロキシのクローズがスレッドセーフな方法で処理されないという答えが多いと思います。Radikが上記で指摘しているように、プロキシを閉じることは重要ですが、多くのIASyncStateの結果が同時に表示されるため、適切なタイミングで適切な結果を閉じるようにする必要があります。
スレッドからクローズプロキシを起動して、個別に処理できるようにしました。
ThreadPool.QueueUserWorkItem(CloseProxy、ar.AsyncState);
しかし、それはうまくいかないようです。これに関する提案はありますか?