Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于跨进程/机器通信的WCF替换_C#_Wcf - Fatal编程技术网

C# 用于跨进程/机器通信的WCF替换

C# 用于跨进程/机器通信的WCF替换,c#,wcf,C#,Wcf,我正在开发一个C#应用程序,其中包含多个windows服务,这些服务需要相互通信以传递数据。这些服务可能在同一台计算机上,但可能是远程的。为此,我考虑过使用WCF,但似乎WCF太重,并且有很多额外的配置,对我来说,这些配置似乎是不必要的(.NET3.5是这里的一个要求,我知道.NET4简化了这一点) 因此,我的问题是,除了提供此功能的已弃用的.NET远程处理之外,WCF的最佳替代品是什么?您可能需要研究ZeroMQ,它非常轻量级且有效,并且具有良好的C#绑定。(抱歉,在我的手机上键入此内容,您现

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


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

您可能需要研究ZeroMQ,它非常轻量级且有效,并且具有良好的C#绑定。(抱歉,在我的手机上键入此内容,您现在必须自己用谷歌搜索。)

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

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

  • Google的协议缓冲区()用于序列化
  • 我自己的交通工具
  • 一点胶水代码把他们放在一起
  • 这些都可以在NuGet上通过以下软件包获得:、和

    以下是快速入门的概述:

  • 使用定义一组消息和一个服务

  • 定义好后,将运行ProtoGen.exe以生成C#中的服务存根和消息。确保添加“-service\u generator\u type=IRPCDISPATCH”以生成正确的服务代码

  • 现在已经生成了源文件,请将它们添加到项目中,并引用上面列出的包中的三个程序集

  • 最后,查看项目页面上的示例客户机/服务器代码。将“SearchService”替换为您的服务名称,您就可以开始运行了

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

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

    更新

    我写了一个快速启动指南:。

    看看

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


    代码:

    抱怨配置似乎有点小气。至于性能,NetTCP绑定在3.5中可用,因此也不确定您关心的是什么。我更好奇的是,是否有替代方案,如果有,它们可能是什么。搜索谷歌总是让我回到WCF。这是来自于一个通常编写Java程序的人,所以我习惯了RMI、EJB等。我得出了或多或少相同的结论。我发现WCF的配置很复杂,文档也不完整,在一次打击下,我还发现它速度非常慢,而且有点不愿意释放内存。可能是我设置错误,但它的性能不如我所希望的,而且修复在无数配置选项中也不明显。我最终编写了自己的轻量级远程处理框架,我希望有一天能够获得开源的批准。实现它绝非易事。除非你碰到这些问题,否则我会坚持使用WCF,直到它被证明是有问题的。这看起来像是我正在寻找的替代方案,谢谢你的信息@安德鲁·兰茨维克,也请看:哈!你的帖子证实了我对WCF的所有怀疑,但从未抽出时间来测量。你的解决方案很有趣。。。绝对是一个值得超过+1的答案。非常感谢。非常有用。您的log4netxsd也非常有用。所以也谢谢你。@csharptest.net谢谢你分享图书馆,很棒的工作。我正试图找出如何处理长期运行的操作。Execute()调用是同步的,理论上我可以重构库来拆分调用/返回序列。是否有“事件”或服务器->客户端调用的内置方法?我查阅了Shirley和Rosenberry的“Microsoft RPC编程指南”,找不到确切的ZeroMQ轻量级。ZeroMQ非常好,只要您不关心响应,也不担心消息被扔到地板上。与所有队列一样,只能存储这么多积压工作。ZeroMQ在保证交付和请求/响应配置方面的性能特别差。文档在哪里?