9

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

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

4

3 回答 3

16

近 8 年来,我一直在使用 PInvoke 访问 Windows RPC 运行时。就运输而言,它非常快速且非常可靠。当与 protobuf-csharp-port 之类的快速串行器结合使用时,生成的通信非常可靠且非常快

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

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

这些都在 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 和命名管道。

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

更新

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

于 2012-05-15T21:02:34.857 回答
2

您可能想研究一下 ZeroMQ,它非常轻量级且有效,并带有良好的 C# 绑定。(在我的手机上输入这个,所以你现在必须自己谷歌搜索,抱歉)。

于 2012-05-15T20:53:06.570 回答
0

看看NFX 胶水

对于耦合系统,它比 WCF 快得多。

Glue 博客的进程间通信

基准

代码:https ://github.com/aumcode/nfx

于 2015-05-05T17:16:32.643 回答