我正在开发一个包含多个Windows服务的C#应用程序,这些服务需要相互通信才能传递数据。这些服务可能在同一台机器上,但它们可能是远程的。我考虑使用WCF用于此目的,但看起来WCF太重了,并且有很多额外的配置,对我来说,似乎没必要(这里需要.NET 3.5,我知道.NET 4简化了这个)
所以我的问题是,除了提供此功能的弃用的.NET Remoting之外,什么是WCF的最佳替代品?
答案 0 :(得分:16)
我已经使用PInvoke访问Windows RPC运行时近8年了。就运输而言,这是快速且非常可靠的。当与诸如protobuf-csharp-port之类的快速序列化器结合使用时,所得到的通信非常可靠且very fast。
因此,要从头开始构建它,这需要三个部分:
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 @ my user name)以获取更多信息或示例。
<强>更新强>
我写了一篇快速入门指南:WCF replacement for cross process/machine communication。
答案 1 :(得分:2)
您可能希望了解ZeroMQ,它非常轻巧有效,并且具有良好的C#绑定。 (在我的手机上输入这个,所以你现在必须自己谷歌,对不起)。
答案 2 :(得分:0)