2012-04-19 15 views
0

我是一個相對較新的開發人員,但我正在研究聚合多個XML文件的應用程序。對於一個特定的控制器,大約需要25次對基於REST的遠程服務的調用,並且大約需要5-7秒才能完成所有調用,解析數據並返回視圖。我將控制器的結果緩存30分鐘。如何在基於應用程序定時器的服務器上執行方法?

我想避免是具有當緩存過期等,有7秒的用戶。所以,我的想法是每半小時執行一次方法,將XML文件聚合到一個本地文件中,然後可以查詢這些文件。因此,控制器將不再直接調用服務,而只是調用存儲的文件。

我必須在IIS的遠程訪問,所以我不能以這種方式設定的任務。它必須是一個應用層解決方案。建議?

回答

3

您可以使用Quartz.NET,一個調度服務。它可以以嵌入模式運行(在IIS應用程序池的進程下運行,應用程序易於部署)或作爲獨立服務運行。 如果這很重要,後者更可靠,因爲應用程序池經常回收(默認情況下每隔29小時,或者在某個空閒時間之後,或者服務器重新啓動或任意數量的事件之後)......並且您需要手動訪問該網站以使應用程序池旋轉起來(除非您自動啓動)。

然而,這聽起來像你的任務是不是關鍵的......所以我強烈考慮去嵌入Quartz.net這裏有幾個例子:

你也可以考慮使用Windows任務計劃程序。

0

這是不好的設計,但你可以通過Windows服務和你的asp.net MVC應用程序訪問創建XML文件到本地文件夾窗口服務寫的XML文件。

1

理論上,你可以啓動一對情侶在您的Global.asax線程,這將能夠異步獲取數據,然後把那些到ASP.NET緩存。只要確保您創建的線程不會從ASP.NET的線程池中彈出。您應該可以通過將任務狀態設置爲LongRunning來完成TPL。

0

我會考慮創建一個Windows服務(而不是web服務),你的服務器上運行,併爲你處理的更新。它可以將後處理數據存儲在控制器可能調用的數據庫中。這將使Web應用程序與解析數據的工作分離開來,並允許您在服務上使用計時器並保持Web應用程序更清潔。

相關問題