WCF 替代跨进程/计算机通信

本文关键字:计算机 通信 进程 WCF | 更新日期: 2023-09-27 18:34:20

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

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

WCF 替代跨进程/计算机通信

我已经使用 PInvoke 访问 Windows RPC 运行时近 8 年了。 就运输而言,它的速度非常快且非常可靠。 当与像protobuf-csharp-port这样的快速串行器结合使用时,产生的通信是坚如磐石且非常快的。

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

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

这些都可以在NuGet上以以下软件包获得:Google.ProtocolBuffers,CSharpTest.Net.RpcLibrary和Google.ProtocolBuffers.Rpc。

以下是入门的简要介绍:

  1. 使用 Google 协议缓冲区语言定义一组消息和服务。

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

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

  4. 最后,看看protobuf-csharp-rpc项目页面上的示例客户端/服务器代码。 将"搜索服务"替换为您的服务名称,您应该准备好运行。

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

您可以随时给我发电子邮件(roger @我的用户名(以获取任何进一步的信息或示例。

更新

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

你可能想看看 ZeroMQ,它非常轻量级和有效,并且带有良好的 C# 绑定。(在我的手机上输入这个,所以你现在必须自己谷歌一下,对不起(。

看看NFX胶水。

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

与 Glue 博客的进程间通信

基准

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