Образцы приложений, отправляющих запросы к собственным веб-службам с поддержкой XML
В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.
Действующие образцы, приведенные ниже, иллюстрируют отправку SOAP-запросов и обработку результатов. Среди этих образцов — клиент Visual Studio 2005 как для C#, так и для Visual Basic.
Начальная настройка
Все образцы приложений требуют одних и тех же шагов для настройки, а именно:
создание образца хранимой процедуры;
создание определяемой пользователем функции;
создание конечной точки HTTP SOAP.
Примечание |
---|
Для создания этих объектов в образце базы данных База данных AdventureWorks2008R2 можно воспользоваться как средой Среда SQL Server Management Studio, так и программой командной строки osql. Дополнительные сведения об установке образца базы данных База данных AdventureWorks2008R2 см. в разделе Вопросы установки образцов кода и образцов баз данных SQL Server. |
Создание хранимой процедуры (GetCustomerInfo)
Приведенная ниже хранимая процедура демонстрирует обработку клиентским приложением входных и выходных параметров, кодов возврата, результатов запросов, а также возникших при выполнении ошибок.
USE AdventureWorks2008R2;
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 AdventureWorks2008R2;
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 AdventureWorks2008R2;
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='AdventureWorks2008R2.dbo.GetCustomerInfo',
schema=STANDARD ),
WEBMETHOD 'UDFReturningAScalar'
(name='AdventureWorks2008R2.dbo.UDFReturningAScalar'),
BATCHES = ENABLED,
WSDL = DEFAULT,
DATABASE = 'AdventureWorks2008R2',
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.