クライアントからジョブを受け取り、それを処理して結果を返すカスタムThreadPoolを作成しました。現在、これはMVCアプリケーションで実行されています。ユーザーがフォームを使用して実行するジョブをアップロードする場合、サーバーはそれを処理してレポートを返します。この処理には、SOAP要求を複数の外部サービスに送信し、応答を蓄積することが含まれます。
最近、アップロードタスクを自動化し、ジョブの現在のステータスのコールバックを処理できるWindowsベースのアプリケーションを作成しました。したがって、netTCPBindingとコールバックコントラクトを使用してWCFサービスを実装し、コンソールアプリケーションでホストしました。すべてが正常に機能しており、Windowsアプリケーションはコールバックなどを受信しています。しかし、大きな問題はパフォーマンスです。WCFリクエストを介して同じジョブを処理するには、MVCアプリケーションを介した手動アップロードの4倍の時間がかかります。
当初、私はそれがコミュニケーションの遅れであるとは思っていなかったので、各ステップの期間を見つけるためにストップウォッチを実装しました。驚いたことに、遅延は通信の遅れによるものではなく、外部サービスにSOAP要求を行う最後のルーチンで発生しています。私の意見では、これはクライアントからサーバーへのジョブの転送モードとは無関係であり、カスタムThreadPoolの個別のスレッドでも実行されます。
MVCアプリケーションとWCFサービスで同じAPIを使用しています。ロジック、ルーチンすべてが同じです。私の2番目の疑問は、WCFが実行中のスレッドを停止/一時停止して新しい要求を処理するかどうかでした。
誰かが理由が何であるかについて洞察を得ることができますか?必要なものに基づいて、さらに情報を提供できます。
ヘルプを事前にありがとう