2012-06-04 82 views
2

我經常需要從使用SQL Server的asp.net站點向第三方會計系統發送數據和從第三方會計系統發送數據。數據導入通常需要一段時間,並且我試圖找到處理長時間運行任務的最佳方法,並且能夠在用戶想要查看其執行情況時更新用戶。我的問題是以下哪些方法的優點和缺點,以及您有什麼建議,爲什麼?ASP.NET長時間運行的任務想法

  • 舊風格的ASP的Response.Write:實際上我用這個頗有幾分此刻是我的方法去,因爲它的快速。我並沒有真正遇到過很多問題。我認爲應用程序池回收會成爲一個問題,但我不認爲它會在請求中回收。

  • 使用像這裏提出http://encosia.com/easy-incremental-status-updates-for-long-requests/一個IFrame:,除了這上面的方法類似的是asynchronous.I'm不知道這是否會允許一個asp.net重啓

  • 一個單獨的Windows應用程序,從該網站調用Web服務:我已經使用了此方法,但設置時間稍長,並且在應用程序池回收時將停止運行。我可能不會使用這種方法

  • Windows工作流:沒有用它,但似乎像(特別是小數據更新)將是矯枉過正

  • Windows服務:同上。似乎它會太困難

  • Ajax,單獨的線程和計時器輪詢緩存的結果:我已經使用這個很好,但如果應用程序池回收,因爲它在一個單獨的線程,ASP .net不知道。

+3

對於WAWS,您可以使用Azure WebJobs。看到我的教程http://www.asp.net/aspnet/overview/developing-apps-with-windows-azure/getting-started-with-windows-azure-webjobs。在Azure上,您始終可以選擇工作角色,Azure WebJobs提供了一個沒有輔助角色的WAWS替代方案。 – RickAndMSFT

+0

Windows Azure網站門戶中的新WebJobs頁面可以輕鬆創建和管理按需,計劃或持續運行的任務。更多信息請參見[http://www.windowsazure.com/en-us/documentation/articles/web-sites-create-web-jobs/](http://www.windowsazure.com/en-us/documentation/文章/ web站點創建的Web-工作/)。 – timamm

回答

0

這真的是一個問題,你想要執行的背景任務的重要性以及觸發它的原因。 如果在每個知名間隔我發現,創建應用程序的線程(Global.asax中)上的計時器是最好的,如下面的例子中發生一個經常性的事件:

實施定期後臺任務在ASP.NET - http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx

爲了覆蓋客戶端,iframe可以做到這一點,但Ajax請求會更加優雅。

只要您在HostingEnvironment.RegisterObject上籤署任務,池回收就不會侵入您的工作。

+0

Phils博客(上面引用的)是ASP.NET中任務的權威性文章,但至少在WAWS中,這不再是事實,您可以擁有安全/支持的長時間運行的進程。請參閱http://www.asp.net/aspnet/overview/developing-apps-with-windows-azure/getting-started-with-windows-azure-webjobs – RickAndMSFT

1

如果工作花費的時間超過幾分鐘,我會建議將作業添加到數據庫中,作業的狀態可以由進行工作的進程更新。您可以實施一個小型命令行應用程序或Windows服務(它們確實不難做,請參閱Writing a Useful Windows Service in .NET in Five Minutes),該服務監視數據庫是否有新作業。當它找到一個時,它會將其拾取並更新其狀態。最終用戶可以重定向到列出每項工作及其進度的頁面。作業完成後,數據庫行會更新,應用程序將等待新作業前來。

相關問題