Compartilhar via


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.