Windows在C#(.NET 2.0)中的进程间通信

Windows在C#(.NET 2.0)中的进程间通信

Interprocess communication for Windows in C# (.NET 2.0)

我以前从未在Windows上进行过IPC。 目前,我正在开发一对程序,一个标准的GUI / CLI应用程序和一个Windows服务。 该应用必须告知服务该怎么做。 因此,假设仅在本地进行通信,这两个过程的最佳通信方法是什么?

最好的地方定义为更健壮,更不易出错,而不是性能最高或最容易编写的地方。

代码示例将非常受欢迎,但不是必需的:-)

请注意,我在询问使用什么,标准TCP套接字,命名管道或仅其他一些通信方式。

谢谢!


.Net中的IPC可以使用以下方法实现:

世界足球联合会

使用命名管道需要.Net 3.0及更高版本。

代码示例

  • WCF类NetNamedPipeBinding可以用于同一台机器上的进程间通信。此类的MSDN文档包括涵盖此方案的代码示例http://msdn.microsoft.com/zh-cn/library/system.servicemodel.netnamedpipebinding.aspx

远程处理

.Net 1.0发布的原始IPC框架。我相信远程处理将不再得到积极发展,建议您改用WCF。

代码示例

通过远程处理进行进程间通信-使用TCP通道

资源资源

  • GenuineChannels,出售包含共享内存通道的远程处理工具包。 http://www.genuinechannels.com/Index.aspx
  • Ingo Rammer写了权威的.Net远程处理书《 Advanced .NET Remoting》第二版

使用csharptest-net RpcLibrary的Win32 RPC

我最近遇到一个项目,该项目包装了Win32 RPC库,并创建了一个.net类库,该库可用于本地和远程RPC。

项目主页:http://csharptest.net/projects/rpclibrary/

MSDN参考:

  • rpc的工作方式:http://technet.microsoft.com/zh-cn/library/cc738291(v=ws.10).aspx
  • RPC功能:http://msdn.microsoft.com/zh-cn/library/aa378623(v=VS.85).aspx

还有一个在库顶部运行的google协议缓冲区rpc客户端:https://code.google.com/p/protobuf-csharp-rpc/

WM_COPYDATA

为了完整起见,还可以将WIN32方法与WM_COPYDATA消息一起使用。在.Net 1.1中,我之前曾使用过此方法来创建一个单实例应用程序,该应用程序从Windows资源管理器中打开多个文件。

资源资源

  • MSDN-WM_COPYDATA
  • 代码示例
  • PInvoke.net声明

插座

使用自定义协议(较难)


仅对于本地用户,我们已成功使用命名管道。避免了TCP的开销,并且(至少对于.NET)效率很高,同时还具有不错的API。


与Windows服务通信的标准方法是使用服务控制代码。 Windows服务可以接收从0到255的代码。0-127保留给系统。 128到255可用于自定义命令。

如果您需要使用数据库,xml,文件,tcp,http等将复杂的对象发送到服务,则除了用于发送控制命令(如重载配置,过程项等)外,还应使用此控制代码。

还有其他功能可用,例如查询服务。请参阅Windows服务文档和api。

Windows Services in C#: Sending Commands to your Windows Service (part 7)


由于您限于.Net 2.0,因此WCF可能不是一个选择。您可以将具有共享内存的.Net远程处理用作同一计算机上应用程序域之间的基础通信机制。使用这种方法,您可以轻松地将进程放在不同的计算机上,并用网络协议替换共享内存协议。


我想补充一下讨论。如果这是外面的方法,请责骂我-但是信号量(或多个信号量)不能用于基本的交流吗?


最好的选择是使用WCF。您将能够在Windows服务中创建服务主机,并公开GUI应用程序可以使用的定义明确的界面。如果愿意,WCF将允许您通过命名管道进行通信,或者可以选择任何其他通信协议,例如TCP,HTTP等。使用WCF,您将获得强大的工具支持和大量可用信息。


推荐阅读

    linux服务器下载命令?

    linux服务器下载命令?,服务,密码,系统,档案,工具,网络,公共,百度,地址,认证,l

    linux服务端退出命令?

    linux服务端退出命令?,档案,命令,环境,异常,标准,网络,模式,终端,编辑,文件,l

    linux中启动服务命令?

    linux中启动服务命令?,服务,系统,命令,信息,工作,设备,网络,标准,名称,密码,l

    linux服务器常用命令?

    linux服务器常用命令?,工作,系统,地址,信息,命令,目录,管理,标准,设备,功能,

    linux筛选服务命令?

    linux筛选服务命令?,服务,系统,状态,软件,环境,主体,技术,号码,发行,名称,查

    linux服务器保存命令?

    linux服务器保存命令?,时间,状态,档案,电脑,命令,信息,位置,编辑,文件,模式,L

    linux服务器扫盘命令?

    linux服务器扫盘命令?,地址,工作,命令,目录,数据,单位,名称,系统,管理,信息,L

    linux命令切换服务器?

    linux命令切换服务器?,地址,名称,系统,环境,实时,命令,服务器,脚本,路径,版

    程序执行linux命令?

    程序执行linux命令?,系统,工作,地址,环境,信息,管理,命令,文件,目录,程序,lin

    linux退出程序命令?

    linux退出程序命令?,档案,管理,系统,命令,编辑,进程,模式,文件,程序,指令,lin

    linux和程序命令大全?

    linux和程序命令大全?,系统,工作,地址,管理,标准,信息,命令,时间,周期性,目

    linux程序命令不可用?

    linux程序命令不可用?,系统,网络,地址,命令,情况,名称,信息,服务,密码,程序,l

    linux服务器搭建命令?

    linux服务器搭建命令?,系统,服务,软件,地址,平台,在线,密码,工具,环境,百度,l

    服务器重启命令linux?

    服务器重启命令linux?,工作,标准,设备,服务,系统,名称,命令,百度,网络,密码,

    linux程序命令规则?

    linux程序命令规则?,地址,工作,系统,命令,情况,工具,信息,环境,设备,发行,Lin

    linux服务端常用命令?

    linux服务端常用命令?,工作,地址,系统,网络,基础,命令,标准,工具,信息,管理,l

    linux中停止程序命令?

    linux中停止程序命令?,系统,管理,软件,档案,进程,命令,通用,名称,信息,名字,L

    linux命令行关闭程序?

    linux命令行关闭程序?,电脑,系统,进程,名称,程序,命令,结束,后台,步骤,快捷

    linux禁用服务命令行?

    linux禁用服务命令行?,服务,系统,软件,管理,工具,信息,状态,平台,连续,技术,l

    linux停服务常用命令?

    linux停服务常用命令?,地址,工作,系统,命令,服务,信息,标准,管理,代码,进程,l