- •Iis и xml функции sql Server
 - •Поддержка xml в Microsoft sql Server 2000
 - •Примеры
 - •Iis и xml функции sql Server
 - •Шаблоны
 - •Запросы xPath
 - •Замечания по разделу
 - •Возможности ado 2.5 Сохранение и загрузка из файла в формате xml
 - •Трансформация с помощью domDocument
 - •Выдача Recordset’а в формате xml непосредственно в поток Response
 - •Возможности ado 2.6
 - •Использование Command для формирования xml-документа на сервере
 - •Выполнение шаблона
 - •Выполнение запроса xPath
 - •Шаблон с агрегатными функциями
 - •Формирование xml-документа на клиенте с помощью ado
 - •Апдейтаграммы и xml Bulk Load
 - •Апдейтаграммы
 - •Добавление данных
 - •Обновление данных
 - •Удаление
 - •Создание новой таблицы и загрузка данных
 - •Загрузка иерархических документов
 - •Заключение
 - •Литература
 - •Предисловие
 - •Настройка iis
 - •Содержание wsdl-файла
 - •Секция types
 - •Секция message
 - •Секция portType
 - •Формы сообщений
 - •Секция binding
 - •Секция service
 - •Создание Web-методов
 - •Тестируем Web-сервис
 - •Поддержка sqlxml в .Net Framework
 - •Тестовый проект
 - •Цели и ограничения
 - •Реализация
 - •Заключение
 - •Литература
 - •Тип данных xml Основы
 - •Метод query
 - •Метод value
 - •Метод exist
 - •Метод modify
 - •Использование xml-типа
 - •Хранение xml-типа
 - •Поддержка xml Schema
 - •Создание схемы
 - •Удаление схемы
 - •Ограничения текущей реализации
 - •Безопасность
 - •Вложенные запросы for xml
 - •Генерация xsd на лету
 - •Поддержка xQuery
 - •Тело запроса
 - •Конструкторы узлов
 - •Операторы сравнения
 - •Операторы сравнения атомарных значений
 - •Общие операторы сравнения
 - •Операторы сравнения узлов
 - •Логические операторы
 - •Условные выражения
 - •Flwor-выражения
 - •Кванторные выражения
 - •Сортировка
 - •Заключение
 - •Литература
 
Тестируем Web-сервис
SOAP-сообщение – это простой XML-документ, который состоит из двух фрагментов: необязательного фрагмента Header и обязательного Body. Оба этих фрагмента должны находиться в корневом элементе Envelope. Чтобы понять, что SOAP – это довольно просто, давайте пока формировать запросы «ручками», используя для отправки пакетов компонент XMLHTTP. Все web-методы должны возвращать xml objects (см. рисунок 2).
XMLHTTP
Создавать SOAP-сообщения очень просто, если есть WSDL-документ, и вы его четко придерживаетесь. Будем двигаться небольшими шагами. Начнем с процедуры test_output. Сначала необходимо создать компонент XMLHTTP и сформировать начало SOAP-тела (Body).
VBScript
Dim xmlhttp Set xmlhttp = CreateObject("Msxml2.XMLHTTP") xmlhttp.open "POST","http://dcit06/srv/webserv",false Dim soap_mes soap_mes = "<?xml version=""1.0"" encoding=""windows-1251""?>" _ & "<soap:Envelope xmlns:soap=" _ & ""http://schemas.xmlsoap.org/soap/envelope/"">" _ & "<soap:Body>" _ & ...  | 
	
Из WSDL-файла видно, что операция test_output состоит из запроса и ответа. Запрос определяется набором параметров test_outputIn (секция message под названием test_outputIn). Этот набор состоит из одного элемента test_output, в который вложен элемент i, представляющий собственно значение выходного параметра для метода., Тип элемента i - xsd:int, он может принимать значение nil. Дабы не привлекать пространство имен http://www.w3.org/2001/XMLSchema-instance, в котором определен атрибут nil, задающий пустое значение, просто передадим в качестве значения параметра i нуль.
Остаток скрипта
"<test_output xmlns=""http://dcit06/srv/webserv"">" & _ "<i>0</i>" & _ "</test_output>" & _ "</soap:Body>" & _ "</soap:Envelope>" xmlhttp.send soap_mes WScript.Echo "****************************************" WScript.Echo vbTab & "Response for test_output" WScript.Echo "----------------------------------------" WScript.Echo xmlhttp.responseText  | 
	
После формирования строки запроса можно вызывать Web-сервис и вывести результаты на консоль. Подобным же образом составляется тест для хранимой процедуры CustOrderHist и функции test_ret_func.
ПРЕДУПРЕЖДЕНИЕ Мною замечена ошибка в SQLXML: параметры Web-метода трактуются как неквалифицированные элементы (unqualified elements), т.е. если написать запрос так: <t:test_output xmlns:t="http://dcit06/srv/webserv"> <t:i>0</t:i> </t:test_output> , то SQLXML вернет ошибку: The input parameter 't:i' is not a parameter to the stored procedure called. Если убрать префикс пространства имен у элемента i (как если бы он к нему не относился)– все проходит без ошибок.  | 
	
Наверняка через некоторое (не слишком большое) время вам надоест создавать SOAP-сообщения вручную. Раз так, переходим к следующему разделу.
ПРИМЕЧАНИЕ Прекрасным инструментом для отладки Web-сервисов является XMLSPY. Он автоматически на основе WSDL-файла создает сообщения SOAP (которые можно затем вручную отредактировать), позволяет вызвать Web-метод, а также может выступать в роли трассировщика, позволяя отлаживать Web-сервис.  | 
	
SOAP Toolkit
Если вы никогда не работали с SOAP Toolkit, очень рекомендую замечательную статью Ивана Андреева «Использование протокола SOAP в распределенных приложениях».
SOAP Toolkit возвращает ответ в виде объекта типа IXMLDOMNodeList. Это коллекция элементов IXMLDOMNode, у которых есть свойство xml. Его-то мы и будем использовать для вывода результатов на консоль. В коде присутствует большое количество комментариев, поэтому больше ничего говорить не буду, смотрите сами:
Вызов функции test_output с помощью SOAP Toolkit:
'Создание высокоуровнего объекта SoapClient30, реализующего динамический IDispatch 'на основе информации из WSDL-файла Dim SoapClient Set SoapClient = CreateObject("MSSOAP.SoapClient30") 
 'Здесь происходит чтение WSDL, анализ и генерация IDispatch, 'который будет содержать все, указаные в WSDL операции 'В нашем случае это test_output, test_ret_func и CustOrderHist SoapClient.MSSoapInit "http://dcit06/srv/webserv?wsdl" 
 Dim ReturnNodeList Dim ret_val 'Вызываем Web-метод test_output. Возвращаемое значение сохраняется 'в переменной ret_val 'Часть необработанного SOAP-ответа возвращается в виде IXMLDOMNodeList Set ReturnNodeList = SoapClient.test_output(ret_val) 
 'Вывод результатов на консоль WScript.Echo "****************************************" WScript.Echo vbTab & "Response for test_output" WScript.Echo "----------------------------------------" 
 'Перебираем элементы и выводим их на консоль For Each Node In ReturnNodeList WScript.Echo Node.xml Next 
 'Вывод на консоль возвращаемого значения WScript.Echo "Return value is " & ret_val  | 
	
.NET Framework
Уж с чем-чем, а с поддержкой Web-сервисов в .NET Framework все в порядке. По сравнению с SOAP Toolkit, здесь все гораздо проще и легче. Чтобы начать работу, нужно создать простое консольное приложение и добавить Web-ссылку (web reference) на Web-сервис.
Примеры вызовов Web-методов тривиальны, поэтому стоит упомянуть лишь передачу ответов в формате DiffGram. Для того чтобы это стало возможным, зайдите в консоль администрирования и задайте для процедуры CustOrderHist значение Output as DataSet objects. Ниже приводится полный пример VB.NET-программы получения результатов Web-метода как объекта DataSet.
Автоматическое создание объекта DataSet путем вызова метода ReadXml в режиме DiffGram
Module Module1 
 Sub Main() Dim prx As dcit06.procedures1 Try prx = New dcit06.procedures1 ' В момент выхове метода CustOrderHist происходит следующее ' 1. Вызывается soap-метод CustOrderHist ' 2. xml-фрагмент в формате DiffGram извлекается из ответа ' 3. Происходит создание DataSet и вызов метода ReadXml Dim response() As Object = prx.CustOrderHist("BLAUS") ' response(0) – готовый объект DataSet ' response(1) – код возврата хранимой процедуры Dim ds As DataSet = response(0) Finally prx.Dispose() End Try End Sub 
 End Module  | 
	
Надо сказать, что работать с Web-сервисами из .NET Framework значительно легче, чем через Soap Toolkit. Производительность, как минимум, не хуже, а наглядность и удобство на порядок выше.
