Страница 19 из 19
Типы 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. |