2010-04-20 89 views
1

我想對我目前計劃的設計進行輸入。觀察多個窗口服務

基本上,我有一些外部儀器,其中每個應始終運行,收集特定的數據。我的想法是爲每個服務創建一個服務,一直運行和輪詢儀器,執行日誌記錄等。可能有一個儀器,或者可能有40個。但是,我需要一個應用程序來消耗所有這些數據,運行一些數學計算,並做圖表,顯示,電子郵件等。踢球者是,即使這個應用程序沒有運行,服務應該不斷消耗數據。此外,這些服務應該幾乎總是應該與客戶端應用程序本身運行在同一臺機器上,但將它們聯網的能力(如.NET Remoting曾經這樣做)可能是一個有趣的功能。

我的問題是...這是最好的設計?如果是這樣,我該如何去做服務和應用程序之間的通信?我研究過WCF,但它似乎適用於請求響應Web服務,而不是將數據連續地傳輸到任何可能聽到它的東西。或者,我是否應該使用WCF與其他Web服務聯繫,然後編譯這些數據以用於經常查詢Web服務的瘦客戶機查看器中?

任何鏈接和資源將不勝感激。 .NET名稱空間供我研究,也感謝。如果我不清楚讓我知道的事情。

回答

3

只是一個想法....但你有沒有考慮過可能添加一個後端數據庫?所有服務都可以整理數據並保存它,然後,需要處理信息的應用程序可以查詢數據庫,而不是在服務之間設置大量的IPC。

+0

我曾考慮過這個問題,但問題比這更復雜......每臺儀器的生成速度都是1MB /秒。當客戶端應用程序正在運行時,它會合成到約1KB /秒,實際上需要存儲,這更易於管理。但是,當這個客戶端沒有運行時,很容易看到數據庫將如何增長到難以想象的比例(對於臺式計算機)。基本上,我需要將它設置到無法觀察的地方,數據將被忽略(但以簡寫形式記錄)。 – drharris 2010-04-20 19:50:53

+0

@drharris,那麼你可以在數據庫中有一個字段(類似於網站所做的),表明客戶端應用程序正在運行。只有在客戶端正在運行時才保留數據,否則,只需將其記錄到文件即可。 – James 2010-04-20 20:45:54

+0

我的第一個想法是,如果應用程序崩潰會發生什麼。但是我可以用DateTime對它進行標記,並且只有在過去X分鐘內或類似的情況下才會持續。男人,我討厭進入DBA工作,但我認爲這可能是我唯一的選擇。 MSMQ在體系結構方面太複雜了,雖然我喜歡WCF的網頁內容,但看起來好像過度。我認爲DB是要走的路。 – drharris 2010-04-20 20:54:17

1

WCF可以處理流式傳輸。它也可以使用MSMQ作爲傳輸方式,即使您的儀器開始大量生成數據,也可確保不會丟失任何消息。

+0

我認爲這將是最穩健的設計,但不幸的是,我在這方面遇到了一些時間問題,而沒有大量優秀資源/教程的WCF/MSMQ學習似乎不適合這個特定項目。當我停下來了解這些事情時,我會保存這個想法。 – drharris 2010-04-20 20:56:52

+0

請參閱http://msdn.microsoft.com/en-us/netframework/dd939784.aspx。這並不難。一旦你配置了隊列,配置WCF使用它幾乎是微不足道的。 – 2010-04-21 00:49:40