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:

  1. Criar um exemplo de procedimento armazenado.

  2. Criar uma função definida pelo usuário.

  3. Criar o ponto de extremidade SOAP HTTP.

ObservaçãoObservação

Para criar esses objetos no banco de dados de exemplo AdventureWorks, 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 AdventureWorks, 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 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

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 AdventureWorks
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 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

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.