我正在使用一个包含多个Windows服务的C#应用​​程序,这些服务需要彼此通信才能传递数据。这些服务可能在同一台计算机上,但可以是远程的。我考虑过为此目的使用WCF,但似乎WCF太重了,并且有很多额外的配置对我来说似乎是不必要的(.NET 3.5是这里的要求,我知道.NET 4对此做了简化)

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

最佳答案

我使用PInvoke来访问Windows RPC运行时已将近8年了。就运输而言,它的速度很快且非常可靠。当与诸如protobuf-csharp-port之类的快速串行器结合使用时,所产生的通信是坚如磐石和very fast

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

  • 用于序列化的Google Protocol Buffer (protobuf-csharp-port)。
  • 我自己的CSharpTest.Net.RpcLibrary用于运输。
  • 一点胶水代码,可以将它们与protobuf-csharp-rpc放在一起。

  • 这些在以下软件包的NuGet中都可用:Google.ProtocolBuffersCSharpTest.Net.RpcLibraryGoogle.ProtocolBuffers.Rpc

    以下是快速入门指南:
  • 使用Google Protocol Buffer Language定义一组消息和服务。
  • 定义好之后,您将运行ProtoGen.exe生成C#中的服务 stub 和消息。确保添加“-service_generator_type = IRPCDISPATCH”以生成正确的服务代码。
  • 现在您已经生成了源文件,将它们添加到项目中,并引用上面列出的包中的三个程序集。
  • 最后,查看protobuf-csharp-rpc项目页面上的示例客户端/服务器代码。用您的服务名称替换“SearchService”,您应该可以运行了。
  • (可选)更改RPC客户端/服务器的配置。该示例说明了LRPC的使用,该LRPC仅是本地主机。但是DemoRpcLibrary.cs源文件也显示TCP/IP和命名管道。

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

    更新

    我写了一个快速入门指南:WCF replacement for cross process/machine communication

    10-06 12:18