我有两个Windows服务,第一个用C#编写,第二个写在 非托管C ++,我想知道如何进行双向进程间通信。
答案 0 :(得分:7)
如果进程间通信总是在同一台机器上完成,那么命名管道就是可行的方法,因为它们比其他选项更快。
但是,如果在某些时候跨机器边界发生此通信的可能性甚至最小,请使用套接字方法。对于C ++,您需要winsock2.h头文件。在C#中,使用System.Net.Sockets
命名空间。
自从我完成了非托管C ++以来已经有一段时间了,但我的回忆是,如果在C ++端创建服务器,然后在{+}}类上使用TcpClient
类,则必须编写更少的C ++代码。 C#侧。
答案 1 :(得分:2)
套接字可能是你最好的选择。
使用套接字时,您不必将两个程序都绑定在同一台计算机上。
此外,它可能是最便携的选项(哎呀,Windows甚至有套接字的select())。
答案 2 :(得分:1)
套接字和命名管道是托管和非托管环境中都支持的两个选项。
答案 3 :(得分:1)
有很多方法可以做到这一点,但我认为最好的方法是使用WCF和COM +。如果您在COM +中托管服务,则可以通过.NET服务中的WCF以及非托管代码中的COM接口访问它。
您可能需要查看MSDN文档的以下部分才能开始使用:
将WCF服务与COM +集成: http://msdn.microsoft.com/en-us/library/bb735856.aspx
与COM +应用程序集成概述: http://msdn.microsoft.com/en-us/library/ms734723.aspx
答案 4 :(得分:1)
我会说套接字和是一个消息传递系统。查看我们的Google Protocol Buffers。
答案 5 :(得分:0)
使用DCOM / RPC或命名管道 - 其他任何东西都是不安全的,hacky或两者兼而有之。
答案 6 :(得分:0)
创建Singleton COM对象。维护此COM对象中的数据,C ++和C#应用程序都可以读取这些数据。
答案 7 :(得分:0)
我会说redis将是任何类型的进程间通信的最佳解决方案