Записи с тегом «SOAP»
Specified-поля в SOAP веб-сервисах
В уже упоминавшемся 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
Одно из наших 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-сервисов ещё не нашлось...
Быстрая эмуляция SOAP-запроса под Windows
Иногда нужно быстро выполнить SOAP-запрос не прибегая к какому-либо языку программирвония, например в тестовых целях. С помощью утилиты curl (есть сборка и под Windows) это можно довольно просто сделать:
curl.exe --header "Content-Type:text/xml;charset=utf8" --data "<?xml version='1.0' encoding='UTF-8'?><soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><ns0:checkin xmlns:ns0='http://some_server/'><id>DSFDFDFSDFS</id><current_version></current_version></ns0:checkin></soap:Body></soap:Envelope>" http://example.com/SoapService/
