2010-12-03 60 views
2

我有一個web服務,它將被夜間工作進程文檔調用,每個文檔都將排隊並在其自己的後臺處理器上執行。根據負載的不同,這個過程可能需要幾個小時或者幾個小時。如果它沒有做任何事情,我不想讓它活着。但是,當產生一個線程並立即返回空閒時鐘即使有線程工作。我沒有將線程設置爲IsBackground,並且它仍然處於空閒狀態。對於我的測試,我將空閒時間設置爲1分鐘。有沒有辦法讓服務爲「ALIVE」如果產生的線程仍在工作,保持webservice活着

這裏是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中工作時,靜態類有一個定時器,每隔5分鐘記錄重置IIS中的空閒計時器的web服務頁面。當過程完成時,靜態類停止擊中網頁。

+0

如果計算機崩潰或應用程序池因其他原因而回收,會發生什麼情況? – 2011-12-05 16:43:22

0

我認爲最好的辦法是拆分此成兩個獨立的過程。您將無法使用基於IIS/ASP.NET的進程並嘗試保持活動狀態。

如果我是你,我想看看做這樣的事情:

  1. 將記錄寫入一個DB /文件/隊列信號的長時間運行的線程必須啓動。
  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的不活動監視器。轉至應用程序中的高級設置這是「過程模型」部分中的第二個設置。