在WCF服务中使用protobuf

时间:2009-04-25 22:10:38

标签: wcf web-services wcf-binding

我的asp.net网页位于IIS Web服务器上,它使用基本HTTP绑定与WCF服务(位于Windows 2008 app服务器上)进行通信。 我的wcf服务的性能似乎并不那么好,我想改进它。同样,我需要在可扩展性上保持平衡,因为我的网站将拥有非常高的流量。

HTTP压缩,限制是我所知道的一些方法,但还没有尝试过.. 我可以使用protobuf API ...请建议......

3 个答案:

答案 0 :(得分:27)

简短的回答是“是”......

协议缓冲区规范本身不提供RPC堆栈,但有些已添加到规范之外。

首先,protobuf-net为WCF提供了挂钩,允许您将服务合同上的操作标记为ProtoBehavior。然后交换常规DataContractSerializer以使用protobuf-net序列化。但是,有一些警告:

  • 您的数据成员必须具有明确的订单(例如[ProtoMember(Order = 1)]),因为它使用这些数字作为字段标识符(协议缓冲区使用数字字段)
  • 最适合汇编/类共享(服务合同等),因为此自定义行为未在“mex”上公开

当与基本http传输一起使用时,这也与MTOM(如果启用)兼容,以实现最大吞吐量。非重要信息的表现在很大程度上与其大小成正比;你可以了解protobuf-net的大小here

或者,我也在研究一个定制的RPC堆栈。 current build在http上有一个工作堆栈,但我还计划在有机会时在原始TCP / IP上启用它。我还没有机会写出来,但我可以根据要求提供示例。请注意,要最方便地使用它,您也需要3.5“扩展名”dll。

如有任何问题,请添加评论或发送电子邮件给我(请参阅我的个人资料)。

答案 1 :(得分:2)

如果WCF服务不需要在内部网络之外公开,您还可以查看使用基于TCP的绑定。

答案 2 :(得分:0)

请参阅protobuf-net

  

protobuf-net是这个的.NET实现,允许你   高效,轻松地序列化.NET对象。它是兼容的   与大多数.NET系列一样,包括.NET 2.0 / 3.0 / 3.5,.NET CF.   2.0 / 3.5,Mono 2.x,Silverlight 2等。