完了までに 1 秒以上かかる WCF メソッド内で、約 25 ~ 30 秒かかるバックグラウンド ロジックを実行する必要があります。そのロジックを WaitCallback にラップして、Web メソッドを終了する直前に ThreadPool.QueueUserWorkItem に渡すことにしました。最初は問題なく動作しましたが、Web メソッドが定期的に 1 秒以内に応答しないため、QueueUserWorkItem メソッドがタイムリーに返されないことがあると思われるため、今は考え直しています。WCF メソッド内で QueueUserWorkItem を使用する際に問題はありますか?
1 に答える
1
いいえ、そうではありませんが、あなたの質問はより一般的な問題に触れています。長時間実行されるサービス呼び出しをどうするか? 次のいずれかを実行できます。
- クライアントとサーバーが長いサービス呼び出しを許容するように構成を変更します。つまり、タイムアウトを増やします。
または、開始/現在の進行状況の取得/最終結果の取得 API を使用してサービス呼び出しを設計すると、これらすべてがすばやく返されます。
int jobID = serviceProxy.StartJob(); float progress = serviceProxy.GetJobProgress(int jobID); Result finalResult = serviceProxy.GetJobResult(int jobID);
これはより多くの作業ですが、より優れた設計であり、実行中のジョブのリスト (使用できる非同期処理などQueueUserWorkItem
) を維持する必要がありますが、すべてのサービス呼び出しはすぐに返されます。
于 2012-04-24T18:24:49.340 に答える