Образцы приложений, отправляющих запросы к собственным веб-службам с поддержкой XML

Действующие образцы, приведенные ниже, иллюстрируют отправку запросов SOAP и обработку результатов. Среди этих образцов — клиент Visual Studio 2005 как для C#, так и для Visual Basic.

Начальная настройка

Все образцы приложений требуют одних и тех же шагов для настройки, а именно:

  1. создание образца хранимой процедуры;
  2. создание пользовательской функции;
  3. создание конечной точки HTTP SOAP.
ms189955.note(ru-ru,SQL.90).gifПримечание.
Для создания этих объектов в образце базы данных AdventureWorks можно воспользоваться как средой SQL Server Management Studio, так и программой командной строки osql. Описание процесса установки образца базы данных AdventureWorks см. в разделе Использование программы установки для установки образца базы данных AdventureWorks и других примеров.

Создание хранимой процедуры (GetCustomerInfo)

Приведенная ниже хранимая процедура демонстрирует обработку клиентским приложением входных и выходных параметров, кодов возврата, результатов запросов, а также возникших при выполнении ошибок.

USE AdventureWorks
GO
DROP PROCEDURE GetCustomerInfo
GO
CREATE PROCEDURE GetCustomerInfo
                    @CustomerID nchar(5),
                    @OutputParam nchar(5) OUTPUT 
AS  

  SELECT @OutputParam = '99999'  
  -- The following INSERT should fail, and an-error returned 
  -- to the client.
  INSERT Store (CustomerID) VALUES (1)

 -- Execute a SELECT statement.
 SELECT top 3 SalesOrderID, OrderDate 
 FROM   Sales.SalesOrderHeader
 WHERE  CustomerID = @CustomerID

 -- Execute SELECT returning XML.
  SELECT CustomerID, SalesOrderID, OrderDate 
  FROM   Sales.SalesOrderHeader
  WHERE  CustomerID = @CustomerID
  for xml auto, XMLSCHEMA

  PRINT 'Hello World'
RETURN 0
Go

Хранимая процедура имеет два параметра: входной параметр (CustomerID) и выходной параметр (OutParam), которые демонстрируют передачу параметров.

Хранимая процедура выполняет следующие инструкции.

  • Инструкцию INSERT, умышленно написанную таким образом, что ее выполнение завершается ошибкой. Это позволяет продемонстрировать возврат ошибок в ответе SOAP. В Visual Studio 2005 ошибки возвращаются в виде объектов SqlMessage.
  • Инструкцию SELECT. В Visual Studio 2005 результирующий набор строк возвращается в виде объекта DataSet.
  • Запрос SELECT FOR XML, возвращающий XML-данные. В Visual Studio 2005 результирующий набор строк возвращается в виде объекта SqlXml.
  • Инструкцию PRINT. Результат ее выполнения возвращается в Visual Studio 2005 в виде объекта SqlMessage.

Создание пользовательской функции (UDFREturningAScalar)

Эта функция возвращает целочисленное значение.

USE AdventureWorks
GO
CREATE FUNCTION UDFReturningAScalar() 
RETURNS int
AS
BEGIN
   RETURN 555
END
Go

Создание конечной точки HTTP SOAP (sql_endpoint)

Эта конечная точка позволяет обращаться к хранимой процедуре и пользовательской функции как к веб-методам. Конечная точка настраивается таким образом, чтобы поддерживались и нерегламентированные запросы. Клиентское приложение может отправлять к конечной точке SOAP-запросы, содержащие нерегламентированные запросы.

Обратите внимание на то, что для конечной точки необходимо будет указать имя сервера как значение параметра hostname при резервировании для конечной точки пространства имен HTTP (sp_reserve_http_namespace), а также при заполнении параметра SITE. Также следует учесть, что значение параметра port должно совпадать с номером порта HTTP, используемого экземпляром SQL Server (например, оно может быть равным «80» или другому числу, если экземпляр использует другой номер порта).

USE AdventureWorks
GO
DROP ENDPOINT sql_endpoint
GO
EXEC sp_reserve_http_namespace N'http://hostname:port/sql' 
-- EXEC sp_reserve_http_namespace N'https://www.microsoft.com:80/sql' for example
GO
CREATE ENDPOINT sql_endpoint 
   STATE = STARTED
AS HTTP(
   PATH = '/sql', 
   AUTHENTICATION = (INTEGRATED ), 
   PORTS = ( CLEAR ),
   SITE = 'server'
)
FOR SOAP (
   WEBMETHOD 'http://tempUri.org/'.'GetCustomerInfo' 
            (name='AdventureWorks.dbo.GetCustomerInfo', 
             schema=STANDARD ),
   WEBMETHOD 'UDFReturningAScalar' 
            (name='AdventureWorks.dbo.UDFReturningAScalar'),
   BATCHES = ENABLED,
   WSDL = DEFAULT,
   DATABASE = 'AdventureWorks',
   NAMESPACE = 'http://Adventure-Works/Customers'
)
GO
USE master
EXEC sp_grantlogin @loginame='domain\userOrGroup'
EXEC sp_grantdbaccess @loginame='domain\userOrGroup'
GRANT CONNECT ON ENDPOINT::sql_endpoint TO [domain\userOrGroup]
GO

В приведенном выше коде обратите внимание на следующее.

  • При создании этой конечной точки определяются два веб-метода.
  • WSDL устанавливается в значение DEFAULT. Поэтому клиент может запросить от сервера ответ в формате WSDL.
  • BATCHES установлено в значение ENABLED. Поэтому клиент может отправлять к этой конечной точке нерегламентированные запросы.
  • Веб-метод UDFReturningAScalar не определяет необязательное пространство имен. Он использует пространство имен, определяемое значением NAMESPACE.
  • В качестве значения domain\userOrGroup, сформированного как имя входа SQL Server, должен быть указан существующий пользователь домена или группы, которому требуется доступ к конечной точке HTTP.

См. также

Справочник

Добавление заголовков SOAP в клиентские приложения
Добавление поддержки трассировки SOAP в клиентские приложения
Настройка сервера на прослушивание запросов собственных веб-служб с поддержкой XML
Структура запроса и ответного сообщения SOAP
Правила и ограничения собственных веб-служб с поддержкой XML

Основные понятия

Обработка XML-данных и пользовательских типов данных среды CLR

Другие ресурсы

Написание клиентских приложений

Справка и поддержка

Получение помощи по SQL Server 2005