6

我有两个 Windows 服务,第一个用 C# 编写,第二个用非托管 C++ 编写,我想知道如何进行双向进程间通信。

4

8 回答 8

7

如果进程间通信总是要在同一台机器上完成,那么命名管道是可行的方法,因为它们比其他选项更快。

但是,如果这种通信有可能在某个时刻跨越机器边界发生,那么请使用套接字方法。对于 C++,您需要 winsock2.h 头文件。在 C# 中,使用System.Net.Sockets命名空间。

自从我完成非托管 C++ 以来已经有一段时间了,但我记得如果你在 C++ 端创建服务器然后TcpClient在 C# 端使用类,你将不得不编写更少的 C++ 代码。

于 2009-02-12T15:37:04.263 回答
2

套接字可能是你最好的选择。

使用套接字,您不必绑定到同一台机器上的两个程序。

此外,它可能是最便携的选项(见鬼,Windows 甚至有 select() 用于套接字)。

于 2009-02-12T03:44:24.227 回答
1

套接字和命名管道是托管和非托管环境中很好支持的两个选项。

于 2009-02-12T03:40:27.810 回答
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

于 2009-02-12T03:45:12.837 回答
1

我会说套接字消息传递系统。检查我们的Google Protocol Buffers

于 2009-02-12T03:46:30.480 回答
0

使用 DCOM/RPC 或命名管道 - 其他任何东西要么不安全,要么不安全,要么两者兼而有之。

于 2009-02-12T03:39:53.380 回答
0

创建一个单例 COM 对象。维护此 COM 对象中的数据,C++ 和 C# 应用程序都可以读取这些数据。

于 2009-02-12T16:04:26.163 回答
0

我会说 redis 将是任何类型的进程间通信的最佳解决方案

于 2015-05-06T16:19:54.337 回答