Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Использование XML совместно с SQL.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

Настройка 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>