WCF替代跨进程/机器通信

时间:2012-05-15 20:24:52

标签: c# wcf

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

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

3 个答案:

答案 0 :(得分:16)

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

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

  1. Google的协议缓冲区(protobuf-csharp-port)用于序列化。
  2. 我自己的CSharpTest.Net.RpcLibrary用于运输。
  3. 一些胶水代码,可以将它们放在protobuf-csharp-rpc
  4. NuGet在以下软件包中提供了这些内容:Google.ProtocolBuffersCSharpTest.Net.RpcLibraryGoogle.ProtocolBuffers.Rpc

    以下是关于入门的快速说明:

    1. 使用Google Protocol Buffer Language定义一组消息和服务。

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

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

    4. 最后,请查看protobuf-csharp-rpc项目页面上的示例客户端/服务器代码。将“SearchService”替换为您的服务名称,您就可以运行了。

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

    6. 您可以随时给我发电子邮件(roger @ my user name)以获取更多信息或示例。

      <强>更新

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

答案 1 :(得分:2)

您可能希望了解ZeroMQ,它非常轻巧有效,并且具有良好的C#绑定。 (在我的手机上输入这个,所以你现在必须自己谷歌,对不起)。

答案 2 :(得分:0)