2011-06-04 64 views
0

我想在這裏找到解決方案來控制我通過webforms啓動的進程。使用webforms控制進程

我知道使用System.Diagnostics.Process類來啓動和停止它非常容易。

我想實現的是將數據發送到進程(terraria服務器)。基本上,服務器本身當它被正確地啓動,你可以在它裏面寫這樣踢/禁止某些命令/保存/退出等

我想寫,但遠程通過web表單應用程序來控制這些命令。

我鑫卡特最近的解決方案就是通過後臺調用服務器我會寫,將工作作爲web表單命令和服務器應用程序之間的網關。這是做事的正確方法嗎?還是有更簡單的方法來做到這一點?

回答

0

您是否正在尋找在.Net 3.5中引入的BackgroundWorker類的? 要在後臺執行耗時的操作,請創建一個BackgroundWorker,然後監聽報告操作進度的事件,並在操作完成時發出信號。它在一個單獨的線程上執行。

MSDN site有一些例子,可以幫助你計算出,如果這是給你的。

或者您可以只使用網絡服務或WCF,不是嗎?您可以將Web服務託管在Web服務器上或作爲Windows服務。

+0

這個想法並不壞,但問題是它不能永遠聽(因爲它畢竟是一個網站) – Erick 2011-06-04 20:41:57

+0

如果你不需要監聽過程結束,然後調用一個web服務將起作用。你只是沒有回調。你打電話給服務來完成任務,而你不會等待迴應。您確實需要一些方法來確定進程何時失敗,例如日誌記錄。該服務可以是對不返回任何內容的Windows服務的WCF調用。看看WCF。我認爲它可以做你需要的。 – DOK 2011-06-04 23:24:50

0

您可以在應用程序啓動時啓動進程,並在靜態變量中保存對其的引用。您還需要附加到OutputDataReceived事件,以便您可以記錄進程發送到其StandardOutput流的所有數據。

的想法是,該過程將在服務器上運行,且該Web應用程序會默默地記錄它發送的任何信息。當請求到達時,緩衝區將被髮送給用戶並被清除。

用戶也可以發送該web應用程序將通過其StandardInput流轉發到處理命令。

我還沒有嘗試過,但它可能工作。您還需要考慮如果應用程序池回收會發生什麼情況。爲了獲得最佳效果,我認爲你應該禁用自動循環。

0

是的,這是最好的方式,使窗口服務,將控制和監控過程,併到該窗口服務API構建的ASP.NET(web表單)應用程序。

ASP.NET應用程序可以自動刷新頁面(通過JavaScript或元刷新標籤),並從控制您的進程的Windows服務獲得新的狀態,事件更好地構建JavaScript應用程序並獲取新的狀態數據併發送命令ajax,所以不需要整個頁面刷新。