XML Web-службы в Microsoft SQL Server 2005
Страница 19. Типы WSDL-файлов



Типы WSDL-файлов

Рассмотрим фрагмент синтаксиса создания и изменения конечной точки:

[ , WSDL = { NONE | DEFAULT | ‘sp_name’ } ]

При создании конечной точки, если не задано никаких специальных параметров или указано значение NONE, поддержка wsdl будет отключена. При указании значения DEFAULT SQL Server 2005 будет использовать стандартный генератор wsdl-документов, который может создавать два типа документов: простые и сложные. Сложный wsdl-документ описывает все детали и тонкости возвращаемых SQL Server документов XML. В таком документе присутствует обширная XSD-схема, очень подробно описывающая все серверные типы в формате XSD. Получающаяся в результате XSD-схема настолько сложна, что многие автоматические средства генерации клиентского кода не могут обработать подобный WSDL-документ. Как ни странно, к таким средствам относятся стандартный генератор .NET Framework 1.1 и SOAP Toolkit. Для подобных «устаревших» средств SQL Server генерирует wsdl-документ в простом формате. Основное отличие заключается в том, что результирующий документ XML имеет тип не SqlResultStream, а простой тип xsd:any.

Вот фрагмент простого wsdl-документа нашей Web-службы:

<xsd:element name=»hello_worldResponse»>
<xsd:complexType>
<xsd:sequence>
<xsd:element minOccurs=»1» maxOccurs=»1» nillable=»false» name=»hello_worldResult»>
<xsd:complexType mixed=»true»>
<xsd:sequence>
<xsd:any minOccurs=»0» maxOccurs=»unbounded» processContents=»skip»/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>

Как можно заметить, элемент hello_worldResponse содержит лишь один элемент hello_worldResult, который может содержать любое количество каких угодно элементов.

В простой схеме имеется еще много изменений в объявлениях серверных типов, однако мы не будем углубляться в такие дебри: каждый желающий может сравнить эти файлы самостоятельно.

Сложный wsdl-документ можно получить путем обращения к Web-службе: https://localhost/yukon/hello?wsdl. Данную строку можно набрать в любом браузере, например в Internet Explorer. Он загрузит WSDL-документ и отобразит его как обычный XML-файл. Для получения простого документа необходимо обратиться к серверу так: https://localhost/yukon/hello?wsdlsimple.

Все документы генерируются «на лету», т.е. SQL Server не кэширует их и не вычисляет заранее.

Если вас по каким-либо причинам не устраивает стандартный генератор wsdl-документов, вы можете написать свой. Пользовательский генератор — это обычная хранимая процедура с определенной сигнатурой, которая должна возвращать набор с одной строкой и одним полем. Значение этой ячейки будет трактоваться как WSDL-документ. Сигнатура хранимой процедуры такова:

CREATE PROCEDURE <SP name>(
@endpointID as int,
@isSSL as bit,
@host as nvarchar(256),
@queryString as nvarchar(256))
as

где:

  • endpointID — идентификатор конечной точки;
  • sSSL — параметр, который означае, был ли использован SSL;
  • host — название сервера;
  • queryString — параметр запроса.

Данная процедура вызывается, когда происходит обращение по адресу конечной точки с указанием какого-либо параметра (параметр — это то, что следует после знака вопроса в строке запроса). Например, для нашей Web-службы мы можем написать следующее: https://localhost/yukon/hello?some-info. Строка после знака вопроса (some-info) будет передана в хранимую процедуру в качестве параметра queryString. По соображениям совместимости и наглядности рекомендуется начинать название параметра со слова wsdl, например: https://localhost/yukon/hello?wsdl,some-info.

Обычно подобные хранимые процедуры пишутся на управляемом коде с использованием всех возможностей обычных языков (таких, как VB.NET или C#) и общей языковой среды — CLR. Пример подобной процедуры можно найти в BOL, но можно написать ее с использованием простого TSQL.

Стандартные генераторы схем, которые могут понадобиться при написании собственного генератора, являются также хранимыми процедурами. Информацию о них можно просмотреть с помощью следующего запроса:

select * from sys.system_objects where name like ‘sp_https_generate_wsdl%’

Параметры системных хранимых процедур можно просмотреть с помощью представления sys.system_parameters. Сигнатуру пользовательской функции генератора я, кстати, узнал из такого запроса:

select * from sys.system_parameters where [object_id] = object_id(‘sp_https_generate_wsdl_defaultcomplexorsimple’)

Рекомендую выполнить этот запрос перед тем, как писать собственный генератор, потому что я сильно сомневаюсь, что сигнатура хранимой процедуры в будущих версиях Yukon не изменится.

Примечание автора.

Вся приведенная в статье информация относится ко второй бета-версии SQL Server 2005, поэтому третья бета-версия или финальный продукт могут отличаться по функциональности или деталям реализации. Будьте внимательны и сверяйтесь с BOL.

 
« Предыдущая статья   Следующая статья »