2011-10-07 20 views
0

高負荷環境でのタイムアウトで外部Webサービスの結果を呼び出す:WCFサービスは、私は、次のscnearioを持っている

私たちの.NETクライアントは、私たちのWCFサービスを呼び出します - 順番にいくつかのデータを取得するために、外部のサードパーティのサービスを呼び出します。データが取得されると、WCFサービスはいくつかの値を設定し、コントロールをクライアントに返します。外部サービスを呼び出すプロセスは同期している必要があります。

私の問題は、このすべてが低負荷環境で動作しますが、負荷が高くなると複数の要求がキューに入れられるため、WCFサービスがタイムアウトになります。バインディングの "sendTimeout"プロパティを5秒に設定した後、タイムアウトします。

私は外部サービスをモックアウトされたローカルバージョンに置き換えようとしましたが、それは負荷を処理しますが、同じ手でそれ自身の外部サービスへの呼び出しは非常に迅速です - 約0.5秒。あまりにも多くのリクエストがキューに入れられ、WCFサービスが割り当てられた5秒以内に応答できなかったため、タイムアウトが発生していると推定できます。

私は次のことを試してみました

maxConcurrentCallsの値を設定し
  • 、maxConcurrentSessions & maxConcurrentInstancesを非常に高い数字
  • がsystem.netの値を設定する - connectionManagement - 非常に高い数
  • にMAXCONNECTIONを

私たちはこのscnearioで何ができるのかについてのアイデアはありますか?

+0

外部サービスに重い負荷がかかる可能性がありますか?外部サービスを同じ負荷レベルで直接呼び出してみましたか? –

+0

私はそれを試してみようとしていました。私が月曜日に就任すると、次はそれをします。 – Ambuj

答えて

0

これらの高負荷時にCPUピークが発生しますか?もしそうでなければ、あなたはスレッドを使い果たすかもしれません。最初の呼び出しを非同期に受け取るwcfサービスを作成し、外部サービスを非同期に呼び出します。

コールチェーン全体でasnycパターンを使用してスレッドをブロックするものがないことを確認する必要があります。

http://msdn.microsoft.com/en-us/library/ms731177.aspx

+0

CPU使用率は実際には高負荷時に多くピークに達します。私はこれを複製するためにVisual Studio Load Testingツールを使用しています。私はまた、ContextModeとConcurrencyModeのプロパティを試してみましたが、どちらも役に立ちませんでした。 – Ambuj

+0

cpuがピークに達している場合は、ハードウェアのしきい値に達しました。ビジュアルスタジオプロファイラ(または他のもの)を使用して、コードのどの部分が最も時間がかかっているかを確認できます –

関連する問題