2011-07-28 67 views
1

我有運行IIS 7.5的Windows 2008 R2服務器。目前,我使用WCF向外部公開接口,然後代碼從我的DLL調用例程。創建和使用C#Windows服務

我想離開這個直接訪問並在C#中創建一些可以在後臺運行的守護進程。我將使用守護進程來監視線程,接受請求並平衡性能。我打算允許守護進程完全訪問我的主應用程序的DLL,然後在接收到WCF服務時將WCF服務傳遞給守護進程。

我看了一下互聯網,發現了一些關於創建Windows服務,構建安裝程序和註冊服務的例子;但是,我似乎無法找到任何有關如何通過不同的應用程序與運行服務進行交互的文檔。

這裏有或多或少的什麼,我希望做一個例子:

比方說,我已經建立並安裝所描繪的示例服務在這裏:http://blogs.msdn.com/b/bclteam/archive/2005/03/15/396428.aspx

現在,一個客戶告訴我,我需要擴展它以允許作業按需運行。我已經建立了允許我這樣做的必要功能,但是現在我面臨着如何與當前正在運行的服務通話以告訴它開始處理的問題。我該怎麼做呢?您是否有描述此IPC的示例鏈接?

謝謝!

+0

你是說你要運行WCF服務的託管Windows服務這樣的自我? http://stackoverflow.com/questions/3206132/windows-service-self-hosted-wcf-compression – Kane

+0

不,我只是說WCF只是提供一個接口到服務。 WCF將成爲訪問該服務的衆多方式之一。 –

+0

請參閱下面的答案。在以前的公司中,我們使用.NET Remoting和MessageQueue與Windows服務進行通信,從調用應用程序的隊列中消息和Windows服務正在偵聽該隊列並處理傳入的消息。要在現在正在設計的新應用程序中執行相同的操作,我們將使用TIBCO EMS隊列。 –

回答

1

您可以發送自定義命令的Windows服務,但這些都只是整數值:

protected override void OnCustomCommand(int command) 

更好的解決方案是在「命名管道」與Windows服務進行通信。實現這個最好的方法是恕我直言,用NetNamedPipe綁定創建一個WCF服務,並將它託管在Windows服務本身中。

+0

我喜歡這裏的命名管道建議...看起來像最好的方式。 –

1

您可以使用WCF與您的Windows服務進行通信。

其實讓我們說你有一些API類庫,你想使可用作爲網絡上的一個daemom,這臺機器上,無需用戶登錄...

你可以有一個WCF最終它將API暴露給調用者,並在IIS或Windows服務中託管此服務,唯一的區別是您託管WCF的方式(IIS使用.svc文件爲您提供服務,Windows服務需要一點時間的代碼來啓動WCF主機對象);在此之後,幾乎所有東西都保持不變。

0

沒有什麼神奇的一種服務,它只是在由系統代替用戶運行啓動啓動程序。你需要爲你的服務編寫某種形式的IPC(不管是配置文件還是更高級的東西,比如從一個目錄加載所有dll並將一個已知函數調用爲入口點(這將是插件模型))。

你需要寫你原有的服務以某種形式聽取您提供所需的funcationality

0

IPC可以用不同的方法來實現:

0

因此,您需要一個Windows服務來執行一些預定的操作,並且還可以通過WCF偵聽請求以執行按需操作,我是否明白這一點?

這裏是一個MSDN文檔解釋瞭如何創建一個實現了WCF服務窗口服務: http://msdn.microsoft.com/en-us/library/ms733069.aspx