2009-09-01 171 views
2

假設我有兩個Windows服務正在運行。一項服務是「輪詢」 - 它輪詢數據庫的打印作業。一旦找到新的打印作業,另一項服務 - 「打印」 - 必須將作業發送到打印機。windows服務如何互相交互?

(爲什麼我不能做到這一點是一個單獨的問題,讓我們只是說有一個原因)。

我擁有的簡單解決方案是爲'輪詢'服務創建並將打印作業保存到某個文件的某個文件,以及「打印」服務監視該位置,讀取該文件並執行打印作業。

有沒有更好的方式來做到這一點 - 是否有可能以某種方式直接從「輪詢」服務調用「打印」功能?

開發工具是.NET 3.5/C#,如果重要的話。

回答

3

是的,您可以使用WCF來允許服務彼此交談。 NetNamedPipes綁定對於本地同機通信來說是一個不錯的選擇。

+0

我同意,NetNamedPipeBinding是方便進行簡單的進程間通信,當你有WCF在您的處置。 – bobbymcr 2009-09-01 02:04:49

+0

接受,因爲它看起來很簡單,足以理解,我已經有一個小工作樣本運行。 – Evgeny 2009-09-01 03:57:59

4

這是一個標準的IPC問題,有作爲有辦法皮膚貓儘可能多的解決方案:插座,管道,文件映射內存等

對於這聽起來像一個message queue可能是您的具體實例好的解決方案第一個服務可以將作業寫入隊列,第二個服務可以在方便時讀取。這將應付像打印機繁忙,離線等事情

+0

是的,絕對正確 - 有很多方法可以做到這一點。他描述的FileSystemWatcher類(http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx)的使用就像一個隊列。另一種選擇,因爲這些服務在同一個盒子上,所以是用於IPC的OS互斥體。雖然數據傳輸不是很大,但是性能不錯。再加上一個文件刪除它可能只是一件事。選擇哪個選項是一個技能問題,你想建立的技能,系統的未來演變等等。 Perf不會是一個問題。 – Cheeso 2009-09-01 02:47:38