WCF - 最快的进程间通信

Bar*_*ast 8 c# wcf named-pipes

A具有Web可访问(通过basicHttpBinding)WCF服务,我也希望从同一台机器上的其他.NET服务访问,并尽可能提高性能.我知道netNamedPipeBinding是理想的,但是想知道什么是最好的配置,我甚至只会与其他.NET进程通信.

例如,我不一定使用像SOAP这样的编码,因为它可能太笨重,而且我不需要与.NET客户端以外的任何其他客户端兼容.我也认为我不需要任何安全保障.

什么是最好的绑定配置为此目的(或任何其他配置)

Mit*_*eat 9

如您所知,NetNamedPipeBinding绑定针对同一台机器通信进行了优化:

提供安全可靠的绑定,针对机上通信进行了优化.

参考.:系统提供的绑定

在Juval Lowy的书"编程WCF服务"的第一章中,他提供了一个有用的决策活动图,用于选择正确的绑定:

"您应该问自己的第一个问题是您的服务是否需要与非WCF客户端进行交互.如果答案是肯定的,并且客户端是传统的MSMQ客户端,请选择MsmqIntegrationBinding,使您的服务能够通过MSMQ进行互操作.如果您需要与非WCF客户端进行互操作,并且该客户端需要基本Web服务协议(ASMX Web服务),请选择BasicHttpBinding,它将您的WCF服务公开给外部世界,就好像它是ASMX Web服务一样(即WSI-基本配置文件).缺点是,你不能利用最现代的WS-*协议.但是,如果非WCF客户端可以了解这些标准,选择WS绑定之一,如WSHttpBinding,WSFederationHttpBinding或WSDualHttpBinding.如果您可以假设客户端是WCF客户端,但它需要脱机或断开连接,请选择使用MSMQ传输消息的NetMsmqBinding.如果客户端需要conn 通过通信,但可以跨机器边界调用,选择通过TCP进行通信的NetTcpBinding.如果客户端与服务位于同一台计算机上,请选择使用命名管道的NetNamedPipeBinding以最大限度地提高性能.您可以根据其他条件(例如需要回调(WSDualHttpBinding)或联合安全性(WSFederationHttpBinding))来微调绑定选择."

  • 我测试了性能,发现使用HTTP,命名管道并在同一应用程序上执行的操作的1000次迭代采用:服务(HTTP):5192ms,服务(命名管道):4646ms,应用程序:2971ms.我可以接受它会更慢,但我希望NamedPipe绑定更接近应用程序速度(本地运行的操作)比HTTP速度更接近. (2认同)
  • 啊 - 为什么?它仍然需要serialiaztion.想要调整它 - 使用PROTOBUF作为serialiaztion pr协议.比MS的XML/Binary快很多.通过谷歌可下载的soruces avaialble. (2认同)