1

完了までに 1 秒以上かかる WCF メソッド内で、約 25 ~ 30 秒かかるバックグラウンド ロジックを実行する必要があります。そのロジックを WaitCallback にラップして、Web メソッドを終了する直前に ThreadPool.QueueUserWorkItem に渡すことにしました。最初は問題なく動作しましたが、Web メソッドが定期的に 1 秒以内に応答しないため、QueueUserWorkItem メソッドがタイムリーに返されないことがあると思われるため、今は考え直しています。WCF メソッド内で QueueUserWorkItem を使用する際に問題はありますか?

4

1 に答える 1

1

いいえ、そうではありませんが、あなたの質問はより一般的な問題に触れています。長時間実行されるサービス呼び出しをどうするか? 次のいずれかを実行できます。

  1. クライアントとサーバーが長いサービス呼び出しを許容するように構成を変更します。つまり、タイムアウトを増やします。
  2. または、開始/現在の進行状況の取得/最終結果の取得 API を使用してサービス呼び出しを設計すると、これらすべてがすばやく返されます。

    int jobID = serviceProxy.StartJob();
    float progress = serviceProxy.GetJobProgress(int jobID);
    Result finalResult = serviceProxy.GetJobResult(int jobID);
    

これはより多くの作業ですが、より優れた設計であり、実行中のジョブのリスト (使用できる非同期処理などQueueUserWorkItem) を維持する必要がありますが、すべてのサービス呼び出しはすぐに返されます。

于 2012-04-24T18:24:49.340 に答える