• Привет, Гость!
  • Войти
  • Регистрация
  • Записи
  • Форумы
  • Люди
  • Файлы
  • Работа
  • Технологии
  • Все
  • Новости
  • События
  • Статьи
  • Блоги

WCF: немного об интероперабильности

WCF: немного об интероперабильности

natale
07.02.2010 18:31

Часть 3: WSDL и document/literal


Итак, WSDL описывает веб-сервис, а WSDL binding описывает, каким образом сервис взаимодействует с протоколом SOAP, т.е. по каким правилам формируются SOAP сообщения. WSDL SOAP binding может соответствовать Remote Procedure Call (RPC) или document стилю. К этому еще добавляются encoded или literal свойства сериализации. Итого получаем четыре возможных варианта (на самом деле пять, т.к. еще есть document/literal wrapped), которые определяют каким образом WSDL binding "преобразовывается" в SOAP сообщение.

Document : <soap:Body> содержит один или несколько дочерних элементов (частей), <soap:Body> содержит те элементы, относительно которых договорились (знают) отправитель и получатель, т.е. других специальных указаний нет.
RPC: RPC подразумевает, что <soap:Body> содержит элемент с именем метода или удаленных процедур, которые будут вызываться. В свою очередь, этот элемент содержит элемент для каждого параметра процедуры/метода.

Endcoded: сериализация выполняется в соответствии со спецификацией SOAP. Правила указывают, каким образом должны быть сериализованы объекты, массивы и т.п.

Literal: сериализация данных выполняется в соответствии со некой схемой (например, W3C XML Schema).

Давайте посмотрим на примеры, чтобы на практике понять различия.

RPC/encoded

<soap:envelope> 
   <soap:body> 
      <myMethod> 
         <x xsi:type="xsd:int">5</x> 
         <y xsi:type="xsd:float">5.0</y> 
      </myMethod> 
   </soap:body> 
</soap:envelope> 

RPC/literal

<soap:envelope> 
   <soap:body> 
      <myMethod> 
         <x>5</x> 
         <y>5.0</y> 
      </myMethod> 
   </soap:body> 
</soap:envelope> 

Document/encoded
Исключаем, т.к. не поддерживается WS-I спецификацией.

Document/literal

<soap:envelope> 
   <soap:body> 
      <Element1>5</Element1> 
      <Element2>5.0</Element2> 
   </soap:body> 
</soap:envelope>

Document/literal wrapped

<soap:envelope> 
   <soap:body> 
      <myMethod> 
         <x>5</x> 
         <y>5.0</y> 
      </myMethod> 
   </soap:body> 
</soap:envelope>

По умолчанию WCF использует document/literal wraped представление, тогда как другие платформы могут использовать, например, rpc/literal. Для конечных клиентов и прокси все преобразования должны быть прозрачны, т.е. SOAP ответ ответы/запросы должны генерировать автоматически в соответствии с тем типом, который объявлен в WSDL сервиса. Но, к сожалению, так бывает не всегда и иногда возникают ошибки, связанные с тем, что та или иная платформа по умолчанию использует другой тип, а не тот, что объявлен в WSDL стороннего сервиса. Что можно сделать в такой ситуации? Например, указать WCF использовать RPC/encoded (и в очередной раз мы будем использовать XmlSerializer):

[OperationContract]  
[XmlSerializerFormat(Style = OperationFormatStyle.Rpc, Use = OperationFormatUse.Encoded)]  
string RPCEncoded(int value)  

natale
07.02.2010 18:31
Комментариев:2 RSS Просмотров:364
Теги: WCF, WSDL
Nelo-cool
08.02.2010 16:17
Требую ещё! :о)
Ссылка
natale
14.02.2010 12:17
To Nelo-cool: еще буквально осталось часов 60 прохождения Mass Effect 2, и можно снова начать добавлять посты в блог :)
Родитель | Ссылка

Natale

natale
WCF, .NET
  • Блог

Облако тегов

.net appfabric azure dublin iis interop microsoft платформа nettcp nlb rest setup project silverlight sinergija velocity visual studio wcf wf wif wsdl конференция
Строишь сложные системы? Хостинг от Parking.Ru

Записи

Популярные
  • mezastel > Сокращенный генератор C# в стиле Zen Coding
  • Enrey > О поедании памяти DataTable
  • serbelyakov > DataGridView
  • Sergey Grigorev > Pex как инструмент для автоматизиции тестирования в .NET
  • shapovalov > AtomicCms - новая система управления сайтом на база ASP.NET MVC
  • XaocCPS > Bundler : клиентская оптимизация JavaScript в ASP.NET
  • mbakirov > Must have плагины для Visual Studio 2010 RC
  • paxer > Kentico CMS как платформа для разработки веб приложений на ASP.NET
  • clevelus > Новая электронная книга о Visual Studio 2010
  • clevelus > Руководство MICROSOFT по проектированию архитектуры приложений
Все популярные записи
Обсуждаемые
  • Enrey > О поедании памяти DataTable
  • sos > Работа на двух экранах - повышение производительно­сти или рассредоточение внимания?
  • paxer > Kentico CMS как платформа для разработки веб приложений на ASP.NET
  • serbelyakov > DataGridView
  • XaocCPS > В ожидании MIX'10 : ваши прогнозы
  • shapovalov > AtomicCms - новая система управления сайтом на база ASP.NET MVC
  • SergeyT. > Что нового в третьем издании книги Джеффри Рихтера "CLR via C#"
  • spugachev > Создание внебраузерных Silverlight приложений. Часть 1.
  • XaocCPS > Bundler : клиентская оптимизация JavaScript в ASP.NET
  • RaveNoX > Экспорт функции из .Net dll или пишем managed функцию для rundll32
Все обсуждаемые записи

Блоги

Новые
  • desco> Случайные записи
  • sashaeve> Блог Microsoft .NET User Group Винница
  • lukesky> Новости технологии NitrosBase
  • RaveNoX> Arthur Kraev
  • Rockie> Gennady G.(Rockie)
  • Новатор> SharePoint. Шаг за шагом.
  • ivanoff> Denis Ivanov
  • paxer> Программировани­е - как страсть
  • Realist> Build Your Web
  • veleslav> veleslav
Обсуждаемые
  • mihailik> Олег Михайлик
  • ceo> Нотатник Вiктора Шатохiна [MSFT]
  • gaidar> Gaidar Magdanurov
  • MikhailChernomo­rdikov> Mikhail Chernomordikov [MSFT]
  • Alexander Lozhechkin [MSFT]> Alexander Lozhechkin
  • agladkik> Andrey Gladkikh: Microsoft Dynamics
  • beerbong> Bong Blog
  • sos> Dmitry Soshnikov [MSFT]
  • not-a-kernel-gu­y> Зеркало: Not a kernel guy
  • sergun> Sergey Zwezdin
О сайте   Свяжитесь с нами   Конфиденциальность   Версия для печати
Работает на 1С-Битрикс: Управление сайтом ASP.NET  |  Хостинг на Parking.Ru