如何在運行時更改Windows Service的設置?與運行的Windows服務交互?
假設我將文件從一個目錄處理到另一個目錄。我希望能夠聲明下一個文件的輸出和操作(當服務正在運行時)。如果我可以通過網站遠程編輯它(SQL表或XML/TXT文件),那將是完美的。
是否有可能不重新啓動服務?我可以簡單地在服務「」中寫入每個文件讀取操作和從設置文件輸出「嗎?
我寧願避免現在的Windows Communication Foundation。
如何在運行時更改Windows Service的設置?與運行的Windows服務交互?
假設我將文件從一個目錄處理到另一個目錄。我希望能夠聲明下一個文件的輸出和操作(當服務正在運行時)。如果我可以通過網站遠程編輯它(SQL表或XML/TXT文件),那將是完美的。
是否有可能不重新啓動服務?我可以簡單地在服務「」中寫入每個文件讀取操作和從設置文件輸出「嗎?
我寧願避免現在的Windows Communication Foundation。
假設你還寫了Windows服務,您可以發送自定義命令到服務。從控制器端,您使用ServiceController.ExecuteCommand()
發送命令。在服務類上,您覆蓋ServiceBase.OnCustomCommand()
以處理這些命令。
但是,這隻會幫助您觸發某個操作。您仍然必須使用外部方法(例如共享配置文件)來傳達操作的詳細信息。
+爲簡單起見。 – Phil 2011-05-06 13:49:31
yosh - 您提出的兩個選項可以工作,該服務可以在處理文件夾之前重複讀取文件settings.xml。您可以在不重新啓動服務的情況下遠程修改。
輪詢文件系統? – Phil 2011-05-06 13:39:23
很多選項。有許多可以使用的進程間通信機制 - COM,套接字,命名管道,共享內存 - 爲管理界面提供「重新讀取設置」命令。
或者,您可以讓服務監視配置文件的更改;在Win32 API中,相關功能是FindFirstChangeNotification()
;不確定是否有管理的等價物,最壞的情況 - 使用P/Invoke。
你可以使用一個數據庫,保存和檢索信息,但除非你已經在使用一個數據庫,這可能是矯枉過正,以建立一個新的表,連接到它,等
我個人會建議使用* .config並使用OpenExeConfiguration。同時,公開一些可以訪問/修改這些設置的方法,然後在需要時使用它們。
最後,您可以擁有自己的具有這些值的XML文件並存儲/檢索值(甚至可以利用XmlSerializer),可以在處理時查詢這些值。
您可以設置FileSystemWatcher來監視配置文件,以便配置更改在更新後立即重新加載。
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
這是一個恥辱,你想避免WCF。這將使與服務的豐富通信幾乎微不足道。 – 2011-05-06 16:11:17