我以前从未在 Windows 上执行过 IPC。我正在开发一对程序、一个标准的 GUI/CLI 应用程序和一个 Windows 服务。该应用程序必须告诉服务该做什么。那么,假设通信仅在本地进行,这两个进程的最佳通信方法是什么?
我所说的最好是指更健壮和更不容易出错,而不是最好的性能,也不是最容易编码的。
请注意,我问的是使用什么,标准 TCP 套接字、命名管道或其他一些通信方式。
最佳答案
.Net 中的 IPC 可以通过以下方式实现:
WCF
使用命名管道需要 .Net 3.0 及更高版本。
代码示例
- WCF 类 NetNamedPipeBinding 可用于同一台机器上的进程间通信。此类的 MSDN 文档包括涵盖此场景的代码示例 http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx
远程处理
与 .Net 1.0 一起发布的原始 IPC 框架。我相信不再积极开发远程处理,并且鼓励您改用 WCF
代码示例
Inter-process communication via Remoting - 使用 tcp channel
资源
- GenuineChannels,销售包含共享内存 channel 的远程处理工具包。 http://www.genuinechannels.com/Index.aspx
- Ingo Rammer ,写了权威的 .Net 远程处理书籍,Advanced .NET Remoting, Second Edition
使用 csharptest-net RpcLibrary 的 Win32 RPC
我最近遇到一个项目,它包装了 Win32 RPC 库并创建了一个可用于本地和远程 RPC 的 .net 类库
项目主页:http://csharptest.net/projects/rpclibrary/
MSDN 引用资料:
- rpc 的工作原理:http://technet.microsoft.com/en-us/library/cc738291(v=ws.10).aspx
- RPC 函数:http://msdn.microsoft.com/en-us/library/aa378623(v=VS.85).aspx
还有一个在库之上运行的 google protocol buffers rpc 客户端:https://code.google.com/p/protobuf-csharp-rpc/
WM_COPYDATA
为了完整起见,也可以将 WIN32 方法与 WM_COPYDATA 一起使用信息。我以前在 .Net 1.1 中使用过这种方法来创建一个从 Windows 资源管理器打开多个文件的实例应用程序。
资源
套接字
使用自定义协议(protocol)(更难)
关于c# - C# (.NET 2.0) 中 Windows 的进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50153/