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
在WCF服务中使用protobuf_Wcf_Web Services_Wcf Binding - Fatal编程技术网

在WCF服务中使用protobuf

在WCF服务中使用protobuf,wcf,web-services,wcf-binding,Wcf,Web Services,Wcf Binding,我的asp.net网页位于IIS web服务器上,它使用基本HTTP绑定与WCF服务(位于windows 2008 app server上)通信。 我的wcf服务的性能似乎不太好,我想提高同样的性能。此外,我需要在可伸缩性上取得平衡,因为我的网站将有非常高的流量 HTTP压缩、节流是我知道但尚未尝试过的一些方法。。 我可以使用API…请建议…请参阅 protobuf net是这个的.net实现,允许您 高效轻松地序列化.NET对象。它是兼容的 对于大多数.NET系列,包括.NET 2.0/3.0

我的asp.net网页位于IIS web服务器上,它使用基本HTTP绑定与WCF服务(位于windows 2008 app server上)通信。 我的wcf服务的性能似乎不太好,我想提高同样的性能。此外,我需要在可伸缩性上取得平衡,因为我的网站将有非常高的流量

HTTP压缩、节流是我知道但尚未尝试过的一些方法。。 我可以使用API…请建议…

请参阅

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


如果WCF服务不需要暴露在内部网络之外,您还可以考虑使用基于TCP的绑定。

简短的回答是“是”

ProtocolBuffers规范本身不提供RPC堆栈,但在规范之外添加了一些

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

  • 数据成员必须具有明确的顺序(例如,
    [ProtoMember(Order=1)]
    ),因为它使用这些数字作为字段标识符(协议缓冲区使用数字字段)
  • 它最适合于程序集/类共享(服务契约等),因为这种自定义行为不会在“mex”上公开
当与基本http传输一起使用时,它还与MTOM(如果启用)兼容,以获得最大吞吐量。非平凡消息的性能在很大程度上与其大小成正比;您可以了解protobuf网络的大小

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


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

谢谢您的回答……我是否可以知道您是否已经使用protobuf以及性能改进的程度?实际上,该库的作者Marc在StackOverflow的某个地方。我会给他发电子邮件,并给他指出一个问题:)澄清一下,我只是《protobuf网络》的作者;“协议缓冲区”是谷歌一些非常聪明的人的功劳。如果消息是原始数据类型呢?它仍然会取代行为吗?例如,如果返回双数组,是否将其作为序列化字节发送?在这种情况下,您需要程序集共享吗?另外,您是说它与程序集共享配合使用效果最好。那么,如果客户机不知道PortoMember顺序,它会如何表现呢?