На ряду с множеством новых возможностей в Silverlight 3, которые описал в своем блоге Сергей Байдачный, происходит улучшение механизма взаимодействия с серверной стороной. А именно, взаимодействия Silverlight-приложений и WCF-сервисов. Добавлена:
- возможность использования Binary XML для передачи данных;
- возможность передачи исключений в Silverlight-приложение;
- улучшен механизм реализации “Duplex” режима;
- и др.
В данном посте хочу рассказать о возможности передачи данных с использованием Binary XML.
Передавая данные в формате Binary XML, мы ускоряем время передачи данных от клиента к серверу, тем самым уменьшая время ожидания ответа от сервера. Это результат того, что сериализованные данные в таком формате меньше по объему, чем при SOAP. И архивирование данных на уровне IIS’а происходит быстрее.
Для реализации возможности использования Binary XML особо утруждаться не надо. Достаточно в серверное приложение добавить “Silverlight-enabled WCF Service” сервис. По-умолчанию сервис уже настроен на передачу данных в формате Binaty XML, эта опция находится в файле конфигурации:
<bindings>
<customBinding>
<binding name="customBinding">
<binaryMessageEncoding/>
<httpTransport/>
</binding>
</customBinding>
</bindings>
Чтобы данные передавались в формате SOAP, необходимо выделенную выше строку заменить на:
<textMessageEncoding/>
Для сравнения обеих форматов, я создал сервис, который выполняет сложение двух чисел. При сравнении Fiddler’ом передаваемых данных, вот что он показал:
| | Binary XML | SOAP |
| Headers | | |
| TreeView | | |
Тестовый пример