2009-07-18 49 views
2

重複
這是一個密切重複的Dealing with a longer running process in WCF。請考慮發佈您的答案,而不是這個。ASP.NET + WCF下的長時間運行線程程序

原始的問題
我執行必須在預定的時間運行一些後臺進程的應用程序的業務層。業務層由幾個WCF服務組成,它們都運行在同一個Web應用程序下。

這個想法是定義一組必須在不同時間運行(如每5分鐘,每天23:00等)的一組'任務'。這並不難作爲一個Windows服務來實現,但問題是,這些任務需要訪問服務中的數據緩存,所以這個「調度程序」必須在IIS上下文中運行才能訪問這些數據。

我目前正在做的是在其中一個WCF服務中使用自定義的ServiceHostFactory,它產生一個子線程並返回。子線程每隔X分鐘休眠並喚醒一次,以查看是否有計劃任務並執行它們。 但是我擔心IIS會在回收應用程序池或一段非活動時間後(例如,在任何監聽來自表示層的請求的WCF服務上沒有活動)而隨機殺死我的線程。無論服務的活動如何,線程都必須不間斷地運行。這真的有可能嗎?

我發現an article by someone doing the same thing,但他的解決方案似乎是定期從子線程本身ping服務器。希望有更好的解決方案。

+0

這是一個非常接近的副本http://stackoverflow.com/questions/1142698/dealing-with-a-longer-running-process-in-wcf。請看看它,看看你是否同意我的看法。 – 2009-07-18 03:48:33

回答

1

我在某個時候實現了一個Windows服務,可以定期加載網頁。其目的在於該網站承載了Workflow Foundation運行時,並且我們希望確保在IIS回收應用程序池之後Web應用程序已恢復運行。也許在這種情況下可以使用相同的方法;有一項服務(或Windows中的Scheduled Task;甚至更簡單),每x分鐘運行一次並加載一個頁面來檢查任務。

1

是否有可能運行Windows服務或將應用程序放置在Windows調度程序中以在特定時間執行WCF中的方法?也許在WCF中使用BackgroundWorker。另一種選擇是WCF產生其他應用程序來執行業務邏輯,傳遞適當的數據或指向內存中數據的指針(不安全)。