2012-06-17 127 views
4

即使不知道如何提出這個問題,但我會給它一個鏡頭。獲取從一個程序到另一個程序的變量

我在c#中有一個程序,它從製造線上的傳感器中讀取指示線條健康狀況的值。這些值每500毫秒更新一次。我有四條線,這是完成的。我想寫一個「概述」程序,通過網絡可以訪問這些值,以便對工廠的工作情況做一個很好的總結。我的問題是,我如何從c#程序實時上線到c#overview程序?

如果我的問題沒有多大意義,讓我知道,我會嘗試重新翻譯它。

謝謝!

+3

也許你可以將值寫入數據庫?這可能是最直接的方法。然後,其他應用程序或任何報告機制或其他商業智能需求將只從該數據庫中讀取。 – David

+0

感謝David我喜歡數據庫的聲音來完成這項工作,而且快速簡單。 – user1003131

回答

2

這取決於很多事情,我會說。首先,它是每一行對「概覽」應用程序感興趣的最後一個值,還是需要多個值來確定行健康狀況,或者您是否想要有歷史記錄值?

如果您只對最後一個值感興趣,我會直接將此值傳遞給概述應用程序。正如其他人所建議的,您在這裏有許多可能性:

  • 原始TCP使用TcpClient(可能有點太低級別)。
  • 在概覽應用程序(可能是一個Web應用程序)上公開一個http端點並將新值發佈到此端點。
  • 使用WCF以露出概述應用一些endpointnamedpipesnet.tcphttp等),並調用每個客戶端應用此端點。
  • 使用MSMQ讓每個客戶端入隊消息,然後由總覽應用程序拾取(也直接由WCF支持)。

如果您需要一些值的歷史記錄,或者您需要多個值來確定行健康狀況,我會使用數據庫解決方案。然後,您必須再次選擇:每個客戶端是否寫入數據庫,或者每個客戶端是否發佈到概述應用程序(使用上述任何通信方式),以及概覽應用程序是否寫入數據庫。

不知道任何更多的限制爲您的情況,這是很難決定之間。

+0

感謝您對每個人的精彩概述!在這個網站上發帖總能節省我幾天的研究和試驗和錯誤。我喜歡數據庫的想法,因爲任何程序都可以訪問數據庫,因此如果有更多的程序需要訪問數據,就可以進行擴展。該系統已經由sql server支持,以處理爲每個新產品生成項目編號並標記與該產品相關的信息(即物理尺寸,生產日期和時間,傳感器陣列的檢測報告等)。通過另一個數據庫,我可以每隔一秒左右用實時行數據更新它 – user1003131

3

您有幾種選擇:

  • MSMQ

寫消息的MSMQ(Microsoft Message Queuing)。這是一個(可選)持久且快速的存儲器,用於在機器之間傳輸消息。 既然你說你需要接近實時的其他應用程序中的消息,那麼使用MSMQ是有意義的,因爲你不想在該應用程序中編寫邏輯來處理大量的傳入消息。 把MSMQ放在中間,拿出你需要的東西,最重要的是當你可以的時候。

  • WCF

的其他應用程序可能使一個WCF服務,可以通過您的實時應用程序每次調用存在的數據可用。端點可能會超過net.tcp,這意味着低開銷,特別是如果您發送小消息。

其他選項包括之前所說的:數據庫,文件等。因此,您可以在各種選項之間進行選擇。

+1

我很喜歡MSMQ。 – Joe

+0

每個人都應該:)。實現起來非常簡單,並且幾乎沒有開銷,特別是在用作WCF協議時。 –

+0

hhmmm從來沒有聽說過MSMQ之前...我認爲不適合使用數據庫,因爲系統的其他部分infastrucutre已經存在,但是由於聽起來確實非常酷,所以我只是簡單地對它進行研究。 – user1003131

2

您可以使用命名管道(請參閱http://msdn.microsoft.com/en-us/library/bb546085.aspx)在兩個進程之間進行通信。

+2

是的,但應該指出的是,當這些進程位於不同的機器上時它不起作用。 –

+0

感謝Sascha的回覆,但我確實需要在單獨的計算機上運行這些進程。謝謝你指出這個marclen。 – user1003131

2

數據庫。把你的值放入一個數據庫,然後另一個應用程序將它們從同一個數據庫中取出。這是這個問題的一個非常常見的解決方案,並打開了新場景的世界。

看到:Relation database

相關問題