2010-12-03 7 views
2

夜間のジョブプロセスドキュメントによって呼び出されるWebサービスがあり、各ドキュメントはキューに入れられ、自身のバックグラウンドプロセッサ上で実行されます。このプロセスは、負荷に応じて数時間または数分間かかることがあります。それが何もしていないなら、私はそれを生きていたいと思っていません。しかし、スレッドが発生してすぐにアイドル・クロックが戻ると、スレッドが機能しているにもかかわらず、アイドル・クロックが開始されます。スレッドをIsBackgroundに設定せず、アイドル状態のまま終了します。私のテストでは、アイドル時間を1分に設定しました。ここで生成されたスレッドがまだ動作している場合にウェブサービスを維持する

「ALIVE」としてサービスを維持する方法は、Webサービスのコードがあります:

public class LetterInitiateWS : System.Web.Services.WebService 
    { 

     private static Processor processor = new Processor(); 
     [WebMethod] 
     public void ExecuteBulkRun() 
     { 
      var thrd = new Thread(() => ThreadExecuteBulkRun()); 
      thrd.IsBackground = false; 
      thrd.Start(); 

     } 

     private void ThreadExecuteBulkRun() 
     { 
      processor.ExecutBulkRun(); 
     } 

    } 

答えて

0

これを処理するために私はThreadExecuteBulkRunで作業しているときに静的クラスを作成しました。静的クラスには、IISのアイドルタイマーをリセットするWebサービスページが5分ごとにタイマーされます。プロセスが完了すると、静的クラスはWebページにヒットしなくなります。

+0

コンピュータがクラッシュしたり、他の理由でアプリケーションプールがリサイクルされたらどうなりますか? –

0

は、私はあなたの最善の策は、2つの別々のプロセスにこれを分割することだと思います。 IIS/ASP.NETベースのプロセスに問題があり、それを生かし続けるつもりです。長時間実行スレッドを開始しなければならない合図するためにDB /ファイル/キューにレコードを書く

  1. :私があなただったら

    私のような何かを見てね。

  2. Windowsサービスで信号のDB /ファイル/キューを監視し、処理を開始させます。

あなたはここの回答に似た提案を見つけることができます:

Handling Web Service Timeouts While Performing Long-Running Database Tasks

Long running webservice architecture

任意のコードによらない解決策については

Recommendations for designing a long-running, resource-intensive web service

0

、あなただけのことができますデフォルトのアイドルタイムアウト値20分を0に変更して、IISの非アクティブモニタを無効にします。アプリケーションの[詳細設定]これは「プロセスモデル」セクションの2番目の設定です。

関連する問題