我是ASP新手,所以這可能是一個基本問題。ASP.net中的多線程最佳方法
我需要寫一個網站thatdo流程如下:
用戶提交請求
的網站說:謝謝你,你會被通知到電子郵件時我會完。
用戶結束會話
網站做的所有長proccess它必須
網站發送電子郵件
是否有可能繼續用戶結束後proccess主要會議?
我讀了一下,我發現異步頁面不會這樣,所以要使用簡單的線程?
實施流程的最佳方式是什麼?
感謝, 薩拉
我是ASP新手,所以這可能是一個基本問題。ASP.net中的多線程最佳方法
我需要寫一個網站thatdo流程如下:
用戶提交請求
的網站說:謝謝你,你會被通知到電子郵件時我會完。
用戶結束會話
網站做的所有長proccess它必須
網站發送電子郵件
是否有可能繼續用戶結束後proccess主要會議?
我讀了一下,我發現異步頁面不會這樣,所以要使用簡單的線程?
實施流程的最佳方式是什麼?
感謝, 薩拉
你可以使用簡單的線程:
protected void BtnProcess_Click(object sender, EventArgs e)
{
StatusLabel.Text = "Thank you, you will be notified to e-mail when I'll finish";
new Thread(() =>
{
// some processing ...
}).Start();
}
這種方法的問題是,IIS可能會在某些情況下,回收你的ASP.NET應用程序。例如,在一段時間不活動(沒有用戶請求)後,或者如果內存閾值被命中,......這將導致中止長時間運行操作的執行。
由於這個原因,最好在單獨的服務中實現這樣的長時間運行操作,比如Windows服務。所以你可以例如host a WCF Service inside a Windows Service。該服務將完成所有長時間處理和發送電子郵件。然後從ASP.NET應用程序中,您可以簡單地調用此WCF服務的相應方法。
我不會去嘗試在網站代碼中運行此路線,而是建立一個單獨的窗口服務,在該框上運行並處理這些請求。當用戶提出他/她的請求時,在某個地方(數據庫?)保存一個標誌,然後從服務中提取並在那裏處理。該服務可以在完成任務時向該人員發送電子郵件。如果您真的想在網站上完成大部分工作,您可以創建一個Web服務並從您的Windows服務中調用該服務。
我建議您調用延遲處理的後端服務。您可以創建一個WCF服務,您可以在MsmqBinding上調用該服務。這種服務是一項排隊服務,可以讓您按照您的要求進行操作。它將MSMQ的複雜性抽象出來,並使得實現該服務變得非常簡單。爲了託管您的服務,如果您可以使用AppFabric,那很棒;否則,如果可以的話,在IIS Windows激活服務中託管您的服務。如果這些都不可用,您可以創建自己的Windows服務來託管您編寫的WCF服務 - 這對於以自我託管方式而言稍微複雜一點。
由於IIS線程模型,這是不可能的。
您需要創建另一個程序,在後臺處理這些請求。儘管有各種各樣的框架可以做這種事情。也許看看Quartz.NET?
答案真的取決於你正在嘗試做的......在持續的數據坐在...等
我不會在IIS中使用多線程,其他也有建議。風險太大,尤其是風險。在漫長的過程中。你會以「火和忘記」結束。確切的機制?有很多的選擇:
實際的聯繫機制(發送郵件)將由後臺「進程」處理,而不是服務。
如果可能的話,我會創建一個Windows服務與實際處理。 – jgauffin
描述「漫長的過程」? – IrishChieftain