2012-07-06 82 views
4

我有兩個名爲SENDER和RECEIVER的應用程序。發送/接收消息至/從兩個正在運行的應用程序

接收器將被SENDER推出與System.Diagnostics.Process對象

接收機將在隱藏模式下啓動,因此不會有MainWindowHandle

然後我們不能使用Win32.WM_COPYDATA爲了發送消息給RECEIVER,因爲它需要MainWindowHandle

我需要的是能夠定期通過任何方法發送和接收消息。

我選了以下鏈接手動MainWindowHandle,但它並沒有幫助:

Send message to a Windows process (not its main window)

一種解決方案可能是System.Diagnostics.Process這有助於我們要發送消息給處理有用的對象。

+0

請建議一個不需要安裝的解決方案。如MSMQ可能未安裝在最終用戶窗口中。 – Hamid 2012-07-06 09:36:15

+0

對不起,我假設你在服務器上有進程。你能提供更多關於情景的信息嗎?在哪裏將安裝SENDER和RECEIVER,消息的大小,你有哪些限制... – 2012-07-06 09:42:01

+0

消息是一個簡單的字符串(可能是JSON格式)。我想發送一個簡單的字符串到RECEIVER,然後RECEIVER從互聯網上收集信息,然後RECEIVER發送填充信息到SENDER作爲一個簡單的字符串。 – Hamid 2012-07-06 09:59:27

回答

11

在兩個進程之間共享信息有多種方式。

首先,你必須考慮如果兩個進程總是在同一臺機器上,或者你的應用程序不需要擴展。

不同的機器

  • 使用TCP/UDP套接字連接(可以是最快的解決辦法)
  • 使用MSMQ
  • 使用Web服務,WCF或RESTful Web服務。
  • 從db中的常見條目讀取。 (不推薦)
  • 命名管道(檢查this)(命名管道可以在同一機器或飛越的網絡)

始終在同一臺機器。

首選:MSMQ

如果我是你,我將保留在不同機器上進行流程的能力,所以我將按照Maarten的建議使用兩個使用MSMQ進行通信的Windows服務。爲什麼?

  1. MSMQ允許你不要失去消息(如果接收器被關閉)
  2. MSMQ可以讓你在同一臺機器或不同的機器
  3. Windows服務給你啓動的能力/停止進程輕鬆處理
  4. Windows服務可以監視我的SNMP,並且通常它們可以輕鬆地與Windows管理工具集成。

其次首選:RESTful Web服務

如果你不想使用MSMQ我會用在IIS主辦了兩屆RESTful Web服務通訊這兩個進程。如果你有一個場景,RECEIVER如果遲到,對SENDER的消息不感興趣,這可能會很有用。

+1

命名管道也可以通過網絡使用。另外請注意,WCF可以由進程自行託管,不需要IIS。 WCF還允許同步通信。 – ken2k 2012-07-06 09:25:04

+0

+1您的評論。你是對的。從未在C#中使用過命名管道。 WCF可以是自託管的或IIS託管的......我習慣在IIS中託管它。 如果以這種方式編碼,WCF默認允許同步通信並且是異步的。不確定哈米德需要什麼。我問他更多的信息。謝謝:) – 2012-07-06 09:47:02

+0

我曾與WCF工作過,但你說WCF可能工作緩慢,對吧?速度是我應用程序中的主要課題。 – Hamid 2012-07-06 10:02:27

相關問題