2013-01-10 21 views
2

我知道IPC並已在多個項目中使用它。我的新要求包括兩個簡單的C#應用​​程序,它們需要交換諸如「完成」等短消息。這應該是雙向的。C#應用程序之間的雙向IPC

這將在舊系統(Win Xp .Net 3.5)上運行,但無法配置它們。最終用戶將只運行該應用程序。

  • WCF是這個任務
  • 套接字通過TCP需要的防火牆配置和可能從防病毒
  • 微軟消息隊列完全符合阻塞太複雜,但需要MSMQ要對所有客戶端
  • 命名管道安裝可以使用,但我想要更高級別的東西(我覺得喜歡用它們組裝)

是否有一種簡單的方法來交換C#應用程序之間的數據?

+0

爲什麼WCF太複雜?這是完全爲這種事情。 –

+0

我同意邁克。 WCF使命名管道更高級別。另外,調用wcf太複雜而不調用msmq太複雜,對我來說感覺有點不對勁。 –

+0

您的應用程序是否需要交換斷開連接的數據(即其中一個沒有運行)? –

回答

1

你有幾個選擇:

  • WCF,你說你已經考慮和拒絕;我可以詢問是什麼讓你拒絕嗎?

  • 命名管道,如你所說;將兩個命名管道包裝成雙向消息傳遞系統實際上是相當簡單的(專業提示:使其一次性並清理管道,以免鎖定它們)

  • 排隊系統,但通常您會看到這些系統,使用Windows消息:一對多或一對一許多渠道

  • 連載消息隊列(簡單的隊列結構),並把它存儲在存儲器映射文件,然後從任一側

  • 深奧的讀/寫即發送發送/發送消息

+0

我選擇這個答案,因爲我最終使用WCF.I有點謹慎。雖然容易,但真的很容易! – Odys

0

雖然你說的TCP出...

我一直很熱衷於使用ZeroMQ,但沒有機會。它是一個包含c#封裝的多平臺,專爲這類應用程序消息傳遞而設計。請登錄http://www.zeromq.org/查看ZeroMQ。

從他們的網站之一一些示例代碼:

// Set up a publisher. 

var publisher = new ZmqPublishSocket { 
    Identity = Guid.NewGuid().ToByteArray(), 
    RecoverySeconds = 10 
}; 

publisher.Bind(address: "tcp://127.0.0.1:9292"); 

// Set up a subscriber. 

var subscriber = new ZmqSubscribeSocket(); 

subscriber.Connect(address: "tcp://127.0.0.1:9292"); 

subscriber.Subscribe(prefix: ""); // subscribe to all messages 

// Add a handler to the subscriber's OnReceive event 

subscriber.OnReceive +=() => { 

    String message; 
    subscriber.Receive(out message, nonblocking: true); 

    Console.WriteLine(message); 
}; 

// Publish a message to all subscribers. 

publisher.Send("Hello world!"); 
相關問題