- •Iis и xml функции sql Server
- •Поддержка xml в Microsoft sql Server 2000
- •Примеры
- •Iis и xml функции sql Server
- •Шаблоны
- •Запросы xPath
- •Замечания по разделу
- •Возможности ado 2.5 Сохранение и загрузка из файла в формате xml
- •Выдача Recordset’а в формате xml непосредственно в поток Response
- •Трансформация с помощью domDocument
- •Возможности 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-выражения
- •Кванторные выражения
- •Сортировка
- •Заключение
- •Литература
Настройка iis
Для того чтобы стал возможен вызов хранимых процедур и функций как Web-методов, необходимо создать и настроить виртуальную директорию Internet-сервера. Это выполняется с помощью консоли «IIS Virtual Directory Management for SQLXML 3.0». Я не буду рассматривать все шаги этого процесса, так как для всех типов запросов (soap, templates, dbobject и schema) он одинаков. Подробную информацию об этом можно получить из документации по SQLXML 3.0 и в [1]. Рассмотрим лишь, как настроить запросы типа soap. На рисунке 1 приведен пример.
Рисунок
1. Создание Web-сервиса.
Здесь имя виртуальной директории – «srv». Имя Web-сервиса – webserv, тип директории – soap, имя хоста – dcit06. Кроме этого, необходимо указать физический путь до папки, где будут располагаться конфигурационный файл и файл описания Web-сервиса. После того, как вы нажмете кнопку «Save», SQLXML создаст wsdl-файл, в котором будет содержаться описание Web-сервиса, и конфигурационный файл ssc, в котором будут содержаться описания всех Web-методов и их параметров. Файл ssc предназначен только для внутренних служебных нужд SQLXML, его формат нигде не описан и в любой момент может измениться.
На вкладке Settings не забудьте поставить галочку напротив опции «Allow POST».
Содержание wsdl-файла
WSDL – это специальный формат, предназначенный для описания Web-сервисов, их методов, параметров и используемых протоколов. Это обычный XML-документ с корневым тегом definitions, содержащий описания типов, параметров, операций, протоколов и сервисов. Они подробно будут описаны далее. SQLXML генерирует файл в формате WSDL 1.1, который имеет статус ноты (как и SOAP 1.1).
ПРИМЕЧАНИЕ Если вы не знакомы с терминологией наименования этапов обработки документов консорциума w3c, рекомендую ознакомиться с документом http://www.w3.org/Consortium/Process. |
В данный момент уже практически завершается работа по созданию спецификации WSDL 1.2. Более подробную информацию можно получить по адресу http://www.w3.org/2002/ws.
Файл WSDL условно можно поделить на две части: абстрактную и конкретную часть. Первая описывает типы, параметры и операции и не касается конкретных протоколов и конечных точек (endpoints) или сервисов. WSDL предназначен не только для работы по протоколу SOAP, так что описание конкретного транспорта выделается в отдельные, конкретные элементы, описание которых находится в второй части WSDL файла. Рассмотрим по порядку фрагменты абстрактной и конкретной частей, которые далее в статье будут называться секциями.
Секция types
Эта секция содержит набор схем в формате XML Schema, каждая из которых описывает абстрактные типы, не зависящие от какого-либо языка или машины. Эта секция не является обязательной и может быть опущена, если Web-сервис не нуждается в дополнительных типах (как правило, это составные типы – complex types) и вполне обходится стандартными, определенными в XML Schema.
SQLXML определяет четыре схемы типов:
http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types. Эта схема описывает базовые типы, используемые при построении сообщений.
Простой тип nonNegativeInteger – целочисленный тип без знака в диапазоне от 0 до 2147483647.
Атрибут IsNested булевого типа.
Сложный тип SqlRowSet – используется в случае, когда результирующее сообщение имеет тип DataSet object. Более подробно о типах результирующих сообщений см. раздел «Создание Web-методов».
Сложный тип SqlXml – используется в случае, когда результирующее сообщение имеет тип XML objects.
Простой тип SqlResultCode - целочисленный тип без знака в диапазоне от 0 до 2147483647, который используется для описания возвращаемого хранимой процедурой значения.
http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlMessage. Эта схема определяет единственный тип, который описывает сообщение от SQL Server-а в случае ошибки.
Сложный тип SqlMessage – содержит поля для описания кода ошибки, номера строки, строкового представления ошибки и других параметров.
http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlResultStream. Эта схема определяет единственный сложный тип, который описывает любой ответ от сервера.
Сложный тип SqlResultStream – содержит одно и более вхождений полей следующих типов: SqlRowSet, SqlXml, SqlMessage и SqlResultCode.
Пространство имен конкретного Web-сервиса, которое импортирует все вышеперечисленные пространства имен и описывает типы, необходимые конкретным Web-методам. В данный момент эта схема не содержит ни одного описания, так как пока Web-сервис не определил каких-либо Web-методов.
В качестве примера приведу фрагмент WSDL-файла, сгенерированного при создании виртуальной директории.
Типы
SQLXML:
<wsdl:types> <xsd:schema targetNamespace="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types" elementFormDefault="qualified" attributeFormDefault="qualified"> <xsd:import namespace="http://www.w3.org/2001/XMLSchema"/> <xsd:simpleType name="nonNegativeInteger"> <xsd:restriction base="xsd:int"> <xsd:minInclusive value="0"/> </xsd:restriction> </xsd:simpleType> <xsd:attribute name="IsNested" type="xsd:boolean"/> <xsd:complexType name="SqlRowSet"> <xsd:sequence> <xsd:element ref="xsd:schema"/> <xsd:any/> </xsd:sequence> <xsd:attribute ref="sqltypes:IsNested"/> </xsd:complexType> <xsd:complexType name="SqlXml" mixed="true"> <xsd:sequence> <xsd:any/> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="SqlResultCode"> <xsd:restriction base="xsd:int"> <xsd:minInclusive value="0"/> </xsd:restriction> </xsd:simpleType> </xsd:schema> <xsd:schema targetNamespace="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlMessage" elementFormDefault="qualified" attributeFormDefault="qualified"> <xsd:import namespace="http://www.w3.org/2001/XMLSchema"/> <xsd:import namespace="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types"/> <xsd:complexType name="SqlMessage"> <xsd:sequence minOccurs="1" maxOccurs="1"> <xsd:element name="Class" type="sqltypes:nonNegativeInteger"/> <xsd:element name="LineNumber" type="sqltypes:nonNegativeInteger"/> <xsd:element name="Message" type="xsd:string"/> <xsd:element name="Number" type="sqltypes:nonNegativeInteger"/> <xsd:element name="Procedure" type="xsd:string"/> <xsd:element name="Server" type="xsd:string"/> <xsd:element name="Source" type="xsd:string"/> <xsd:element name="State" type="sqltypes:nonNegativeInteger"/> </xsd:sequence> <xsd:attribute ref="sqltypes:IsNested"/> </xsd:complexType> </xsd:schema> <xsd:schema targetNamespace="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlResultStream" elementFormDefault="qualified" attributeFormDefault="qualified"> <xsd:import namespace="http://www.w3.org/2001/XMLSchema"/> <xsd:import namespace="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types"/> <xsd:import namespace="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlMessage"/> <xsd:complexType name="SqlResultStream"> <xsd:choice minOccurs="1" maxOccurs="unbounded"> <xsd:element name="SqlRowSet" type="sqltypes:SqlRowSet"/> <xsd:element name="SqlXml" type="sqltypes:SqlXml"/> <xsd:element name="SqlMessage" type="sqlmessage:SqlMessage"/> <xsd:element name="SqlResultCode" type="sqltypes:SqlResultCode"/> </xsd:choice> </xsd:complexType> </xsd:schema> <xsd:schema targetNamespace="http://dcit06/srv/webserv" elementFormDefault="qualified" attributeFormDefault="qualified"> <xsd:import namespace="http://www.w3.org/2001/XMLSchema"/> <xsd:import namespace="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types"/> <xsd:import namespace="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlMessage"/> <xsd:import namespace="http://schemas.microsoft.com/SQLServer/2001/12/SOAP/types/SqlResultStream"/> </xsd:schema> </wsdl:types> |
