2012-12-03 60 views
0

我有一個在.net(VB .Net)中調用Excel和Word的程序。完成所有任務需要花費大量的時間(它讀取許多日誌,將數據導出爲ex​​cel,創建圖形,然後將圖形導入單詞模板)。.net程序從ASP執行頁面

我的第一個解決方案是將該程序作爲一個.dll包含在ASP網站中,但現在我已被解僱。該程序的CPU使用率很高,可能需要幾小時才能完成所有任務。網頁必須運行CPU使用率低和/或快速處理的進程。

現在我有2種選擇:

A)從ASP執行該程序:

set WshShell = server.CreateObject("WScript.Shell") 
wshShell.Run program 

B)在一個窗口服務轉換程序,並執行該程序(即讀出日誌,將數據導出爲ex​​cel,創建圖形...)通過MSMQ發送消息。

從來就兩個問題:

- 第一:這些 「好」 的解決方案?有沒有其他「好」的解決方案?

- Second:我不想在程序中使用圖形界面。如果word和excel在後臺也更好。任何想法來完成這個? 我想唯一的解決方案是選項B),該程序作爲一個Windows服務。 Excel,Word ...將在另一個「會話」中,並且它不會顯示任何內容(我已閱讀關於此問題的antoher stackoverflow和獲得excel和word work的問題和解決方案)

+1

選項C:.NET程序是否執行其任務,以低優先級運行而不刻錄CPU,並將其進度寫入數據庫或共享文本文件?這樣,傳統的ASP可以從數據庫或共享文件讀取並顯示進度。 –

+0

是的,事實上,我曾經想過.NET程序作爲Windows服務運行,並且每秒鐘讀取一個SQL服務器中的作業表。當一個任務在網頁(asp)中被提交時,被髮送到作業表。下次windows服務讀取這張表時,它會將作業狀態改爲「正在處理」,並且它將完成所有任務。完成後,它將刪除作業。關於進度,這是一個好主意,儘管你必須在代碼的某些地方知道「完成%」。但我想我可以估計它。 – Alberto

回答

0

B是更好的選項,但我對MSMQ沒有任何經驗。您可能想要使用WCF + MSMQ,因爲如果事實證明MSMQ是錯誤的選項,則可以使用少量重寫來嘗試其他協議。

至於選項A,ASP classic和ASP.NET都不適用於處理長時間運行的進程。另外,如果你有一個ASP頁面,這意味着你有其他人,包括你的網站上長時間運行的任務,這意味着你冒着用戶的風險無法訪問其他不相關的頁面,而所有Web服務器線程都處理了長時間運行的進程。

+0

我也認爲B是最好的選擇。關於MSMQ,我只使用MCF和Visual C++中的消息。我想這不會很難。至於A,我儘管當你從asp運行一個程序,它會在後臺執行,而IIS忘記了這個過程。我不想等待完成該計劃。只有那個ASP運行程序。 – Alberto