WCF и Silverlight - двоичное кодирование - PullRequest
2 голосов
/ 04 февраля 2011

У меня странная проблема.Я переключаюсь с HttpBasicEncoding на двоичное кодирование.Когда я переключаюсь на использование двоичного кодирования сообщений, я заметил в Fiddler, что мое тело ответа в 20 раз БОЛЬШЕ, чем эквивалент HttpBasicEncoding.Вот мои настройки на сервере:

При использовании базовой кодировки

<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?

Спасибо!

1 Ответ

1 голос
/ 04 февраля 2011

BinaryFormatter и NetDataContractSerializer включают в себя множество метаданных типа и информацию о полях, и это добавляет.Для создания гораздо меньшего двоичного файла я бы порекомендовал protobuf-net (раскрытие: в авторе), но учтите, что у меня нет прямой замены сериализатора для WCF в Silverlight, поэтому вам придется отправлять byte [] в качестве аргументови обрабатывать вручную, но он маленький и быстрый.Я хочу улучшить эту область.

На самом деле, при такой настройке регулярное связывание http будет лучше, особенно если вы можете включить MTOM.Я надеюсь вовремя улучшить использование Silverlight.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...