17

我的 asp.net 网页位于 IIS Web 服务器上,它使用基本的 HTTP 绑定与 WCF 服务(位于 Windows 2008 应用服务器上)进行通信。我的 wcf 服务的性能似乎不是那么好,我想改进它。此外,我需要平衡可伸缩性,因为我的网站将有非常高的流量。

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

4

3 回答 3

28

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

协议缓冲区规范本身不提供 RPC 堆栈,但在规范之外添加了一些。

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

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

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

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

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

于 2009-04-26T12:05:36.230 回答
2

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

于 2009-04-25T22:24:10.383 回答
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 等。

于 2009-04-25T22:13:43.483 回答