WCF替代跨进程/机器通信

And*_*erk 9 c# wcf

我正在开发一个包含多个Windows服务的C#应用​​程序,这些服务需要相互通信才能传递数据.这些服务可能在同一台机器上,但它们可能是远程的.我考虑使用WCF用于此目的,但看起来WCF太重了,并且有很多额外的配置,对我来说,似乎没必要(这里需要.NET 3.5,我知道.NET 4简化了这个)

所以我的问题是,除了提供此功能的弃用的.NET Remoting之外,什么是WCF的最佳替代品?

csh*_*net 16

我已经使用PInvoke访问Windows RPC运行时近8年了.就运输而言,这是快速且非常可靠的.当与诸如protobuf-csharp-port之类的快速序列化器结合使用时,所产生的通信非常坚固且非常快速.

因此,要从头开始构建它,这需要三个部分:

  1. 用于序列化的Google协议缓冲区(protobuf-csharp-port).
  2. 我自己的CSharpTest.Net.RpcLibrary用于传输.
  3. protobuf-csharp-rpc将它们组合在一起的一些胶水代码.

这些都可以在以下包中的NuGet上获得:Google.ProtocolBuffers,CSharpTest.Net.RpcLibraryGoogle.ProtocolBuffers.Rpc.

以下是入门快速简化:

  1. 使用Google协议缓冲区语言定义一组消息和服务.

  2. 一旦定义了,您将运行ProtoGen.exe以在C#中生成服务存根和消息.请务必添加"-service_generator_type = IRPCDISPATCH"以生成正确的服务代码.

  3. 现在您已将生成的源文件添加到项目中,并从上面列出的包中引用这三个程序集.

  4. 最后,请查看protobuf-csharp-rpc项目页面上的示例客户端/服务器代码.将"SearchService"替换为您的服务名称,您应该已准备好运行.

  5. (可选)更改RPC客户端/服务器的配置.该示例显示了仅使用本地主机的LRPC; 但DemoRpcLibrary.cs源文件也显示TCP/IP和命名管道.

您可以随时给我发电子邮件(roger @我的用户名)以获取更多信息或示例.

更新

我写了一个快速启动指南:WCF替代跨进程/机器通信.