Aplicativos de exemplo para enviar solicitações de XML Web Services Nativos
Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.
Os exemplos funcionais a seguir são fornecidos para mostrar como as solicitações SOAP são enviadas e como as respostas são processadas. Esses exemplos incluem um cliente do Visual Studio 2005, tanto C# quanto Visual Basic.
Instalação inicial
Todos os aplicativos de exemplo exigem uma instalação comum. Essa instalação inclui as etapas a seguir:
Criar um exemplo de procedimento armazenado.
Criar uma função definida pelo usuário.
Criar o ponto de extremidade SOAP HTTP.
Observação |
---|
Para criar esses objetos no banco de dados de exemplo AdventureWorks2008R2, você pode usar SQL Server Management Studio ou o utilitário de comando osql. Para obter informações sobre como instalar o banco de dados de exemplo AdventureWorks2008R2, consulte Considerações para instalar exemplos e bancos de dados de exemplo do SQL Server. |
Criando o procedimento armazenado (GetCustomerInfo)
O procedimento armazenado a seguir foi projetado para mostrar como um aplicativo cliente trata os parâmetros de entrada e saída, o código de retorno, os resultados da consulta e os erros em caso de falha.
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
Esse procedimento armazenado tem dois parâmetros: um parâmetro de entrada (CustomerID) e um de saída (OutParam) para mostrar como os parâmetros são passados.
O procedimento armazenado executa as instruções a seguir:
Uma instrução INSERT que falha intencionalmente, retornando um erro. O erro é proposital para mostrar como os erros são retornados na resposta SOAP. No Visual Studio 2005, os erros são retornados como objetos SqlMessage.
Uma instrução SELECT. No Visual Studio 2005, o conjunto de linhas resultante é retornado como um objeto DataSet.
Uma consulta SELECT FOR XML que retorna dados XML. No Visual Studio 2005, o conjunto de linhas resultante é retornado como um objeto SqlXml.
Uma instrução PRINT. O resultado disso é retornado no Visual Studio 2005 como um objeto SqlMessage.
Criando a função definida pelo usuário (UDFREturningAScalar)
Essa função retorna um valor inteiro.
USE AdventureWorks2008R2;
GO
CREATE FUNCTION UDFReturningAScalar()
RETURNS int
AS
BEGIN
RETURN 555
END;
Go
Criando o ponto de extremidade SOAP HTTP (sql_endpoint)
Este ponto de extremidade expõe o procedimento armazenado e a função definida pelo usuário como métodos Web. O ponto de extremidade também é configurado para permitir consultas ad hoc. O aplicativo cliente pode enviar solicitações SOAP para consultas ad hoc ao ponto de extremidade.
Observe que você terá de fornecer o nome do servidor como valor de nome_do_host ao reservar o namespace HTTP (sp_reserve_http_namespace) para o ponto de extremidade e também ao concluir o parâmetro SITE. Além disso, o valor de porta precisa corresponder à porta HTTP usada pela instância do SQL Server, como "80" ou outro número de porta TCP se for aplicável.
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
No código anterior, observe os pontos a seguir:
Há dois métodos Web definidos ao criar esse ponto de extremidade.
O valor WSDL é definido como DEFAULT. Portanto, o cliente pode solicitar uma resposta WSDL do servidor.
O valor BATCHES é definido como ENABLED. Portanto, o cliente pode enviar solicitações de consulta ad hoc para esse ponto de extremidade.
O método Web UDFReturningAScalar não especifica o namespace opcional. Usa o namespace especificado no valor NAMESPACE.
Os valores de domínio\usuário_ou_Grupo criados como login do SQL Server devem ser definidos como grupo ou usuário de domínio real que exige acesso ao ponto de extremidade HTTP.