我正在开发一个包含多个 Windows 服务的 C# 应用程序,这些服务需要相互通信以传递数据。这些服务可能在同一台机器上,但它们可能是远程的。我考虑过为此目的使用 WCF,但似乎 WCF 太重并且有很多额外的配置,对我来说,这似乎是不必要的(.NET 3.5 是这里的要求,我知道 .NET 4 简化了这一点)
所以我的问题是,除了提供此功能的已弃用的.NET Remoting 之外,WCF 的最佳替代品是什么?
近 8 年来,我一直在使用 PInvoke 访问 Windows RPC 运行时。就运输而言,它非常快速且非常可靠。当与 protobuf-csharp-port 之类的快速串行器结合使用时,生成的通信非常可靠且非常快。
因此,要从头开始构建它,这需要三个部分:
这些都在 NuGet 上的以下包中可用:Google.ProtocolBuffers、CSharpTest.Net.RpcLibrary和Google.ProtocolBuffers.Rpc。
以下是入门的简要说明:
使用Google Protocol Buffer Language定义一组消息和一个服务。
定义好之后,您将运行 ProtoGen.exe 以在 C# 中生成服务存根和消息。请务必添加“-service_generator_type=IRPCDISPATCH”以生成正确的服务代码。
现在您已经生成了源文件,将它们添加到项目并引用上面列出的包中的三个程序集。
最后看一下protobuf-csharp-rpc项目页面上的示例客户端/服务器代码。将“SearchService”替换为您的服务名称,您应该可以运行了。
可选择更改 RPC 客户端/服务器的配置。该示例显示了仅本地主机的 LRPC 的使用;但是DemoRpcLibrary.cs源文件也显示 TCP/IP 和命名管道。
您可以随时给我发电子邮件(roger @我的用户名)以获取更多信息或示例。
更新
我写了一个快速启动指南:WCF 替换跨进程/机器通信。
您可能想研究一下 ZeroMQ,它非常轻量级且有效,并带有良好的 C# 绑定。(在我的手机上输入这个,所以你现在必须自己谷歌搜索,抱歉)。