C# 应用程序与 C++ 和 VB.Net 中的其他应用程序之间的 IPC

IPC between a C# application and other applications in C++ and VB.Net

本文关键字:应用程序 其他 IPC 之间 VB C++ Net      更新时间:2023-10-16

我有一个 C# 服务器应用程序,它需要与另外 3 个客户端应用程序通信并控制:一个在 C# 中,一个在C++中,一个在 VB.Net 中。所有这些都是Windows表单应用程序。他们基本上需要交换一些字符串和数字,而不是重载。在 C# 和这些不同语言之间进行 IPC 的最佳方法是什么?请注意,客户端不相互通信,它们只与服务器通信。

C#需要与C++对话,所以我想WCF不好,因为WCF只在两个.Net应用程序之间工作?

是否可以在以下所有语言中方便地使用命名管道:C#、C++ 和 VB.Net?

我还想知道将来是否必须添加VB6,VBScript和PowerShell脚本作为客户端,适用于所有这6种语言的最佳IPC选项是什么?我是否仍然可以使用命名管道?

实际上,配置为通过 HTTP 公开服务的 WCF 可能是要支持的语言列表的最佳选择。

如果您不喜欢 WCF,请考虑公开 HTTP REST 接口,即通过在 MVC 中编写服务器 ASP.Net。

命名管道支持 - C#/VB.Net,C++ - 好,VB6 - 我不知道,VBScript - 绝对不是开箱即用的,PowerShell - 是的,因为它可以使用.Net库。

您列出的语言的最快解决方案是命名管道,更好的是内存映射文件。两者都在 .NET 4.0 和非托管C++中实现。

我建议查看内存映射文件。创建用作单生产者、多使用者、单向通道的文件和关联视图相对简单。例如,您可以使用该区域的前 4 个字节来存储写入的最后一个字节的更新值(取模视图大小 - 4 个字节)和一个 EventWaitHandle 来同步生产者/使用者访问。两个通道访问单独的内存映射文件将为您提供一个双工通道。

.NET(C# 和 VB.NET)的链接和非托管C++。

然后,您可能希望将协议缓冲区视为序列化二进制数据的非常有效的方法。

0MQ是Linux领域的优秀产品,但Windows版本有所简化,并且不支持IPC。

您可以尝试不同的库,例如OpenDDS,ZeroMQ等。虽然Windows上的ZeroMQ还不支持IPC(但支持TCP)。

相关文章: