Образцы приложений, отправляющих запросы к собственным веб-службам с поддержкой XML
Действующие образцы, приведенные ниже, иллюстрируют отправку запросов SOAP и обработку результатов. Среди этих образцов — клиент Visual Studio 2005 как для C#, так и для Visual Basic.
- Отправка SOAP-запросов с использованием клиента Visual Studio 2005 (C#)
- Отправка запросов SOAP с помощью клиента Visual Studio 2005 (Visual Basic)
Начальная настройка
Все образцы приложений требуют одних и тех же шагов для настройки, а именно:
- создание образца хранимой процедуры;
- создание пользовательской функции;
- создание конечной точки HTTP SOAP.
Примечание. |
---|
Для создания этих объектов в образце базы данных 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
Другие ресурсы
Написание клиентских приложений