2011-05-13 156 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。

相关问题