2010-02-12 52 views
1

在asp.net中運行一個漫長過程(如2小時)的最成功方法是什麼,並在進度上向客戶端返回信息。從ASP.NET運行一個漫長過程的方法頁面

我聽說創建一個Windows服務,httphandler和遠程處理可以成功。

+0

請問這樣一個漫長過程的目的是什麼?有一個更好的方法來做到這一點比從一個asp.net頁面。 – Aaron 2010-02-12 17:04:11

回答

1

只是一個建議...

如果你有,你是tyring在asp.net已經利用邏輯...你可以做一個外部應用程序(Windows服務,控制檯應用程序等)調用您的asp.net頁面上的Web服務。

例如,我有一個類似的問題,我需要的代碼是asp.net,我需要使用此代碼更新大約3000個客戶端。它開始超時,所以我通過Web服務暴露了代碼。然後,我不是一次嘗試通過asp.net運行整個3000個客戶端,而是使用一個控制檯應用程序,該應用程序由每個客戶端運行一次Web服務的夜間SQL Server作業運行。通過這種方式,所有耗時的處理都由控制檯應用程序處理,但沒有超時問題,但我們已經在asp.net中編寫的代碼無需重新創建。最後略微修改我現有架構的設計使我能夠輕鬆解決這個問題。

這真的取決於你必須處理的環境和約束......希望這有助於。

0

這不是直接適用的,但我編寫了代碼,可以讓您在不需要使用Windows服務或任何類型的cron作業的情況下運行類似於ASP.NET中「計劃任務」的進程。

Scheduled Tasks in ASP.NET!

+2

這是否考慮到了asp.net的回收? – user204588 2010-02-12 18:23:07

1

有跡象表明,我已經處理了這個方法有兩種。首先,您可以簡單地運行流程並讓客戶端超時。這有兩個缺點:用戶界面不同步,你正在綁定一個用於非HTML目的的IIS線程(我爲一個過程足夠快地返回,但超出了超時限制)。

處理此問題的更好方法是編寫一個「Service」應用程序,用於處理通過數據庫表傳遞的請求(將請求的詳細信息放在那裏)。然後,您可以創建一個窗口,爲用戶提供正在進行的任務的「窗口」(例如處理了多少記錄或發送了電子郵件)。此狀態窗口可以有一個鏈接,允許用戶刷新,或者您可以使用計時器上的Ajax回調自動執行刷新。

0

我非常喜歡WCF服務的計劃任務。您可能(不在我的頭頂)將一個addr傳遞給WCF服務,作爲一種「回調」,服務可以在進程報告中調用它。

我會迴避計劃的任務...過於粗糙。