.net 4.5,asp.net mvc:什麼是從ASP.NET應用程序運行持久過程(1-2分鐘)的最好方法,因爲它應該在單線程環境中運行,我的意思是這個過程是隻對一個用戶發起一次,所有其他用戶的執行必須等到當前執行完成?該方案如下:用戶單擊運行某種持久計算的按鈕,http響應立即返回給用戶,然後用戶必須手動請求單獨請求的計算狀態。 Asp.net http會話流產不應該導致流程終止,它應該繼續下去。該進程可能運行在同一個服務器或單獨的服務器上。如何在asp.net下異步運行持久進程?
回答
我建議使用諸如NServiceBus之類的產品來卸載處理並以單線程模式運行。這樣做的好處是,所有請求都將按順序處理,並且可以從Web服務器卸載處理,因爲您並不真正想要在Web服務器上發生長時間運行的進程。
我們其實正在考慮這個選項。有像你提到的優點,但也有不利因素,如必要的基礎設施設置:MSMQ,消息隊列創建,單獨配置 – YMC
NServiceBus將爲您處理大量問題(安裝和配置MSMQ和DTC),它旨在解決你提到的問題。 –
我喜歡NSBus,這可能對我們來說是最好的解決方案,但我的意思是這樣的解決方案會帶來一些額外的管理成本,如下所示:1)MSMQ,RavenDb以及其他需要安裝的東西,我記得我們必須單獨下載和設置它們,它們不是NSBus包的一部分,2)有人需要定期檢查失敗的消息隊列,除了我們的常規日誌文件(兩個應用程序跟蹤點而不是一個)3)單獨的過程意味着它假設有自己的配置(兩個配置文件來管理,而不是一個) – YMC
我想看看由Phil Haack撰寫的這篇文章,它解釋了您可能在Web應用程序中運行後臺任務的問題。 http://haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx
這是一個很棒的文章,但它現在已經過時了(至少對於WAWS來說)。看到我的Azure WebJobs回答 – RickAndMSFT
.net 4.5.2增加了QueueBackgroundWorkItem,您可以使用它來安排任務。如果您不控制服務器(當它重新啓動時),appPool關閉的90秒默認延遲將不起作用(除非您可以檢測到任務未完成並在另一臺服務器上運行)。欲瞭解更多詳情,請參見「QueueBackgroundWorkItem to reliably schedule and run background processes in ASP.NET」
我會告訴你如何與http://hangfire.io執行此任務 - 執行ASP.NET應用程序內發射後不管,延遲,重複任務非常容易的方式。不需要Windows服務。
首先,通過NuGet安裝包。如果您有任何問題,請參閱官方文檔中的Quick Start指南。
PM> Install-Package Hangfire
打開OWIN啓動類,並添加以下行:
public void Configure(IAppBuilder app)
{
GlobalConfiguration.Configuration.UseSqlServerStorage("connection_string");
app.UseHangfireDashboard();
app.UseHangfireServer();
}
然後寫,將做長期運行的工作方法(我加屬性在同一時間只能執行一個方法) :
[DisableConcurrentExecution]
public void LongRunning()
{
// Some processing stuff
}
然後調用一個方法背景發射後不管到立即響應用戶:
public ActionResult Perform()
{
BackgroundJob.Enqueue(() => LongRunning());
return View();
}
如果要通知用戶關於作業完成的信息,請考慮使用SignalR並相應地追加LongRunning
方法。
偉大的解決方案。感謝您的框架。 – scottheckel
- 1. 通過ssh運行持久化進程
- 2. 如何僅在特定條件下異步運行ASP.NET頁面?
- 3. asp.net的MVC運行的異步線程
- 4. 如何在NSOperation中運行異步進程
- 5. 運行PHP的exec()異步/多進程
- 6. 從DLL運行後臺異步進程
- 7. 阻止異步進程永遠運行?
- 8. 通過WCF(C#)與ASP.NET反饋運行的進程異步
- 9. 如何執行異步進程?
- 10. 進行異步在ASP.Net MVC調用3
- 11. 如何在vb.net的異步BackgroundWorker進程中運行cmd行實用程序?
- 12. 春進口運行Hibernate持久兩次
- 13. 如何異步運行
- 14. 如何配置asp.net進程在域帳戶下運行?
- 15. python多進程異步運行進程一個接一個
- 16. Django +執行異步進程?
- 17. 如何持久地運行Python腳本?
- 18. 如何在asp.net mvc 2中運行異步代碼?
- 19. 如何保持進程運行?
- 20. JMS持久異步事件通知
- 21. 異步等待持久警告
- 22. C#異步持久性WebClient示例
- 23. Spring JavaMailSender:使它異步和持久
- 24. 在異步過程中加載Doctrine持久實體
- 25. 如何在pygtk中異步運行gtk.main()?
- 26. 從ASP.Net進行異步WebService調用MVC
- 27. 如何在java中使用線程異步運行命令行
- 28. 進程欄在運行進程時不會在UI中異步更新
- 29. 如何保持持久的emacs-server實例正在運行?
- 30. 如何在asp.net中創建持久cookie?
您可以在計算機上添加服務嗎? – Patrick
我可以,但我想知道如何爲每個Web應用程序線程提供連續執行? – YMC