我有一个奇怪的问题。我正在从HttpBasicEncoding切换到二进制编码。当我切换到使用二进制消息编码时,我注意到在Fiddler中我的响应体是比HttpBasicEncoding等效的20倍。以下是我在服务器上的设置:
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBinding"
contract="MyProduct.MyService" />
...
<basicHttpBinding>
<binding name="MyBinding">
<security mode="TransportCredentialOnly" />
</binding>
</basicHttpBinding>
<customBinding>
<binding name="MyBinaryBinding">
<binaryMessageEncoding />
<httpTransport />
</binding>
</customBinding>
<endpoint address="" binding="customBinding" bindingConfiguration="MyBinaryBinding"
contract="MyProduct.MyService" />
在Silverlight应用程序中,我需要以编程方式构建绑定。以下是我构建这些绑定的方法:
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.None;
// Wireup request
HttpTransportBindingElement transportElement = new HttpTransportBindingElement();
transportElement.MaxReceivedMessageSize = int.MaxValue;
transportElement.MaxBufferSize = int.MaxValue;
CustomBinding binding = new CustomBinding();
binding.Elements.Add(new BinaryMessageEncodingBindingElement());
binding.Elements.Add(transportElement);
// Wireup request
我做错了什么?为什么二进制编码响应的大小比HTTP响应大得多?
谢谢!
答案 0 :(得分:1)
BinaryFormatter和NetDataContractSerializer包含许多类型元数据和字段信息,并且它相加。为了生成更小的二进制文件,我建议使用protobuf-net(披露:在作者中),但请注意我没有在Silverlight上为WCF直接进行串行器交换,所以你必须发送byte []作为args和手动处理,但它小而快。我想改善那个领域。
实际上,通过该设置,常规的http绑定会更好,特别是如果您可以启用MTOM。我希望及时改进Silverlight的使用。