Записи с тегом «WebServices»

Specified-поля в SOAP веб-сервисах

27.05.2011 16:52 / Артём Волк / 443 просмотра / ...

В уже упоминавшемся ASP.NET-приложении, которое использует сторонний SOAP-веб сервис, для генерации proxy-классов использует механизм, доступный из Visual Studio как «Add Web Reference». После обновления до Visual Studio 2010 SP1 для элементов, объявленных в WSDL с аттрибутом minOccurs="0" с типом, отличным от type="xsd:string", например, так:

<xsd:element minOccurs="0" name="MyField" type="xsd:boolean" />

В proxy-классах генерировалось дополнительное свойство bool MyFieldSpecified. Если не поставить его в true перед вызовом веб-сервиса, поле не будет включено в SOAP-запрос. В моём случае изменить веб-сервис не было возможности (он сторонний), а все поля в вызове сервиса на самом деле обязательные. Найденные существующие решения либо требовали дополнительной обработки кода proxy-классов, либо ручного заполнения свойств или не подходили в моей ситуации.

решение...

Перехват и отладка запросов к SOAP веб-сервису в .NET

15.05.2011 22:39 / Артём Волк / 715 просмотров / ...

Одно из наших ASP.NET-приложений использует сторонний SOAP-веб сервис. На стороне .NET исторически (со времён .NET 2.0) для генерации proxy-классов использовался механизм, доступный из Visual Studio как «Add Web Reference» (подробнее о способах добавления ссылки на веб-сервис можно можно прочитать здесь, стоит только заметить, что в Visual Studio 2010 SP1 соответствующий пункт меню переехал внутрь диалогового окна «Add Service Reference»).

Во время отладки приложения понадобилось проверить XML-код SOAP-запроса. Сделать это оказалось довольно просто. Во-первых, в код приложения нужно временно добавить:

var myService = new MyServiceProxyClass();

// Перенаправляем запросы через HTTP-прокси
myService.Proxy = new System.Net.WebProxy("http://127.0.0.1:8888");

// Используем сервис как обычно...

Во-вторых, нужно запустить HTTP-прокси по указанному адресу. Мы использовали Fiddler, он позволяет просматривать весь HTTP-траффик, который через него проходит.

Решение для WCF-сервисов ещё не нашлось...