2012-04-24 36 views
1

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

+0

ThreadPool.QueueUserWorkItemはビットが時代遅れです。 [TPL](http://stackoverflow.com/questions/9200573/threadpool-queueuserworkitem-vs-task-factory-startnew)の使用を検討する必要があります。クリスの返答+1。 –

答えて

1

それほど問題はありませんが、より一般的な問題、長時間実行されるサービスコールの場合の対処方法についてお聞かせください。次のいずれかを実行できます

  1. 変更のconfigs、クライアントとサーバが長いサービスコールを許容するように、すなわち増加は
  2. またはタイムアウト、あなたのサービスを設計開始と呼び出す/最終結果のAPIを取得/現在の進行状況を取得し、すべての

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

これは、より多くの仕事、より良いデザインで、あなたは今も、B(QueueUserWorkItemまたは何を使用することができ、あなたの非同期proceessing)ジョブを実行しているのリストを維持する必要があります。そのうちすぐに戻りますすべてのサービスコールはすぐに返されます。

関連する問題