私はこの奇妙な問題を抱えています。サーバー上に 3 つの WCF サービスがあります。マネージャー サービスは、外部からの要求の主要なエントリ ポイントです。もう 1 つのサービスは、アプリケーションのロジックです。3 番目のサービスは DB 接続サービスで、両方のサービスが行き、ほとんどの作業を行っています (DB が行います)。
マネージャーへのリクエストで負荷テストを実行し、パフォーマンス テストを実行したところ、90 の異なるスレッドが同時に実行され、2 番目のサービスには約 50 があり、DB 接続には約 12 しかありませんでした。
これは、アプリケーションの主なパフォーマンスの問題だと思います。両方のサービスをプロファイリングすると、DB サービスからの応答をかなり待っていることがわかります。
DB サービスに対して直接テストを実行してみました。私は 80 のスレッドを実行し、チャネルを開いた直後とリクエストを送信する前に、ManualEventHandler でそれらを停止しました。次に、すべての準備が整ったらハンドラーを設定し、DB 接続サービスで約 25 のスレッドを実行しました。
そのため、12 を超えるスレッドを処理できます。
何が起こっているのですか?
リクエストがキューに入れられるのはなぜですか?
いくつかの追加情報:
バインディングはbasichttpbindingですが、net pipe ipcを試しても同じ結果でした。コンテキストモードと同時実行性を呼び出しごとまたはセッションごとの複数に設定すると、同じ結果が得られます。
また、サービスは自己ホスト型です。このようなアーキテクチャである理由は、他の複数のサービスまたはアプリケーションがそれらのサービスに直接リクエストを送信できるようにするためです。この特定のイベントでは、説明どおりにテストしますが、他のイベントではフローが異なる場合があります。