C#(.NET2.0)中Windows的进程间通信
我以前从未在Windows上做过IPC。目前,我正在开发一对程序、一个标准GUI/CLI应用程序和一个windows服务。应用程序必须告诉服务该做什么。那么,假设通信仅限于本地,那么对于这两个过程,什么是最好的通信方法 其中,best被定义为更健壮、更不容易出错,而不是性能最好或最容易编码的 代码示例非常受欢迎,但不是必需的:-) 注意,我问的是使用什么,一个标准的TCP套接字,命名管道,或者其他一些通信方式C#(.NET2.0)中Windows的进程间通信,c#,.net,ipc,C#,.net,Ipc,我以前从未在Windows上做过IPC。目前,我正在开发一对程序、一个标准GUI/CLI应用程序和一个windows服务。应用程序必须告诉服务该做什么。那么,假设通信仅限于本地,那么对于这两个过程,什么是最好的通信方法 其中,best被定义为更健壮、更不容易出错,而不是性能最好或最容易编码的 代码示例非常受欢迎,但不是必需的:-) 注意,我问的是使用什么,一个标准的TCP套接字,命名管道,或者其他一些通信方式 谢谢 仅在本地,我们成功地使用了命名管道。避免了TCP的开销,并且非常高效(至少对于.
谢谢 仅在本地,我们成功地使用了命名管道。避免了TCP的开销,并且非常高效(至少对于.NET而言),同时还可以使用一个像样的API。IPC在.NET中可以通过以下方式实现: 周转基金 使用命名管道需要.Net 3.0及更高版本 代码示例
- WCF类NetNamedPipeBinding可用于同一台计算机上的进程间通信。此类的MSDN文档包括一个涵盖此场景的代码示例
远程处理 最初的IPC框架与.NET1.0一起发布。我相信远程处理已经不再被积极开发,我们鼓励您使用WCF 代码示例 -使用tcp通道 资源
- GenuineChannel,销售包含共享内存通道的远程处理工具包李>
- ,撰写了权威的.Net远程处理书籍
使用csharptest net RpcLibrary的Win32 RPC 我最近遇到一个项目,它包装了Win32 RPC库并创建了一个可用于本地和远程RPC的.net类库 项目主页: MSDN参考资料:
- rpc的工作原理:
- RPC功能:
WM_COPYDATA 为了完整性,还可以在消息中使用WIN32方法。我以前在.Net 1.1中使用过此方法,创建一个从windows资源管理器打开多个文件的单实例应用程序 资源
使用自定义协议(更难),因为您仅限于.Net 2.0 WCF,这可能不是一个选项。您可以使用带有共享内存的.Net远程处理作为同一台计算机上应用程序域之间的底层通信机制。使用这种方法,您可以轻松地将进程放在不同的机器上,并用网络协议替换共享内存协议。您最好的选择是使用WCF。您将能够在windows服务中创建服务主机,并公开GUI应用程序可以使用的定义良好的界面。如果您愿意,WCF将允许您通过命名管道进行通信,或者您可以选择任何其他通信协议,如TCP、HTTP等。使用WCF,您可以获得强大的工具支持和大量可用信息。与windows服务通信的标准方法是使用服务控制代码。Windows服务可以接收0到255之间的代码。0-127为系统预留。128到255可用于自定义命令 如果需要向服务发送复杂对象,则应使用数据库、xml、文件、tcp、http等,而不是发送控制命令,如重新加载配置、处理项目等。应使用此控制代码 还有其他可用功能,例如查询服务。请参阅Windows服务文档和api
我想补充一下这个讨论。如果这是一条出路,请批评我——但一个信号量(或多个信号量)不能用于基本的通信吗?WCF:就像我被鼓励使用.NET 3.5:)遗憾的是,远程处理似乎不是一个选项。信号量是线程/进程共享内存时使用的一种技术。System.IO.Pipes在.Net 2.0中不可用