2015-02-08 75 views
3

我試圖開發一種調用存儲過程的Web服務。這個存儲過程非常長(大約1小時30分),並且它在數據庫中執行了大量的「計數」和「插入」操作。 要啓動此過程,我使用了C#類任務;這裏是例子:啓動一個存儲過程與Task.Factory.StartNew

[HttpPost] 
[Route("updateData/{date:datetime?}")] 
public JsonResult UpdateData(DateTime? date) { 
    try { 
     Task.Factory.StartNew(() => Data.UpdateData(date), TaskCreationOptions.LongRunning); 
     return Json("UpdateData successfully started !"); 
    } 
    catch (Exception e) { 
     return Json("Error UpdateData: " + e); 
    } 
} 

當我在本地環境中測試它的工作;但是當我在Azure上工作時,大概30分鐘後就會停止。

爲了運行Web服務我使用微軟Azure調度。

似乎問題並沒有被存儲過程,但它似乎是在使用任務(因爲沒有它的工作任務)。

有什麼特別的呢?

+0

你是如何運行這裏面蔚藍調度?在ASP.NET應用程序中? – 2015-02-08 20:38:18

+0

我使用Microsoft Azure管理控制檯(圖形);有了它,可以啓動準時或定期任務;由此我啓動了我的Web服務。 – Fabaud 2015-02-08 20:48:40

+0

什麼樣的應用程序是Web服務?類庫? – 2015-02-08 20:50:21

回答

3

你正在經歷的是一個IIS超時。一旦IIS檢測活動,it will terminate the app pool

否則,當你20分鐘時間,沒有任何交通那麼應用程序池將終止,以便它可以在下次訪問再次啓動。

發生這種情況是因爲Task.Factory.StartNew未註冊IIS的工作,因此它不知道您目前正在進行活動工作。

爲了避免這種情況,如果你使用.NET 4.5.2,您可以使用HostingEnvironment.QueueBackgroundWorkItem對一個ASP.NET線程池線程註冊和隊列工作。

如果你在以前的版本中,您可以通過斯蒂芬·克利用BackgroundTaskManager

欲瞭解更多,請閱讀由.NET Web開發團隊this post