2011-05-13 110 views
1

我有一個C#服務器應用程序,它需要談話並控制另外3個客戶端應用程序:一個在C#中,一個在C++中,一個在VB.Net中。所有這些都是Windows窗體應用程序。他們基本上需要交換一些字符串和數字,而不是重載。在C#和這些不同語言之間進行IPC的最佳方式是什麼?請注意,客戶不會相互交談,他們只會與服務器通話。IPC與C++應用程序和其他應用程序之間的C + +和VB.Net

C#需要與C++交談,所以我猜WCF不好,因爲WCF只能在兩個.Net應用程序之間工作?

我可以在所有這些語言中方便地使用命名管道:C#,C++和VB.Net嗎?

我也想知道,如果將來我必須添加VB6,VBScript和PowerShell腳本作爲客戶端,那麼最適合所有這6種語言的最佳IPC選項是什麼?我仍然可以使用命名管道嗎?

+0

檢查此答案http://stackoverflow.com/questions/2012210/ipc-between-net-and-c-applications – 2011-05-13 04:32:16

回答

1

事實上,配置爲通過HTTP公開服務的WCF可能是您希望支持的語言列表的最佳選項。

如果您不喜歡WCF考慮公開HTTP REST接口,即通過在ASP.Net MVC中編寫服務器。

命名管道支持 - C#/ VB.Net,C++ - good,VB6 - 我不知道,VBScript - 絕對不是開箱即用的,PowerShell - 是的,因爲它可以使用.Net庫。

0

您可以嘗試不同的庫,例如OpenDDS,ZeroMQ等。儘管Windows上的ZeroMQ不支持IPC(但支持TCP)。

1

您列出的語言的最快解決方案是命名管道,更好的是內存映射文件。兩者都有.NET 4.0和非託管C++的實現。

我建議尋找內存映射文件。創建一個文件和一個關聯視圖相對比較直接,它可以作爲單生產者,多消費者,單向渠道。您可以使用該區域的前4個字節來存儲所寫入的最後一個字節的更新值(取模視圖大小 - 4個字節)和一個EventWaitHandle來同步生產者/消費者訪問。訪問單獨內存映射文件的兩個通道將爲您提供一個雙工通道。

.NET (C# and VB.NET)unmanaged C++的相關鏈接。

然後,您可能希望查看協議緩衝區作爲串行化二進制數據的非常有效的方法。

0MQ是Linux領域的優秀產品,但Windows版本有所縮減,除此之外不支持IPC。

相關問題