Applicazioni di esempio per l'invio di richieste ai servizi Web XML nativi

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa caratteristica in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Gli esempi seguenti illustrano l'invio delle richieste SOAP e l'elaborazione delle risposte. Gli esempi includono un client di Visual Studio 2005, sia C# che Visual Basic.

Configurazione iniziale

Per tutte le le applicazioni di esempio è necessaria una configurazione comune, che comprende i passaggi seguenti:

  1. Creazione di una stored procedure di esempio.

  2. Creazione di una funzione definita dall'utente.

  3. Creazione dell'endpoint HTTP SOAP.

Nota

Per creare questi oggetti nel database di esempio AdventureWorks2008R2 è possibile utilizzare SQL Server Management Studio oppure l'utilità osql. Per informazioni su come installare il database di esempio AdventureWorks2008R2, vedere Considerazioni per l'installazione di esempi e di database di esempio di SQL Server.

Creazione della stored procedure (GetCustomerInfo)

La stored procedure seguente è progettata per illustrare la gestione dei parametri di input e di output, del codice restituito, dei risultati di query e degli eventuali errori da parte di un'applicazione client.

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

La stored procedure include due parametri: un parametro di input (CustomerID) e un parametro di output (OutParam) per illustrare la procedura di passaggio dei parametri.

La stored procedure esegue le istruzioni seguenti:

  • Un'istruzione INSERT che ha esito negativo e restituisce un errore. L'errore è intenzionale, per illustrare la restituzione degli errori nella risposta SOAP. In Visual Studio 2005 gli errori vengono restituiti come oggetti SqlMessage.

  • Un'istruzione SELECT. In Visual Studio 2005 il set di righe risultante viene restituito come oggetto DataSet.

  • Una query SELECT FOR XML che restituisce dati XML. In Visual Studio 2005 il set di righe risultante viene restituito come oggetto SqlXml.

  • Un'istruzione PRINT, il cui risultato viene restituito in Visual Studio 2005 come oggetto SqlMessage.

Creazione della funzione definita dall'utente (UDFREturningAScalar)

La funzione restituisce un valore integer.

USE AdventureWorks2008R2;
GO
CREATE FUNCTION UDFReturningAScalar() 
RETURNS int
AS
BEGIN
   RETURN 555
END;
Go

Creazione dell'endpoint HTTP SOAP (sql_endpoint)

L'endpoint espone la stored procedure e la funzione definita dall'utente come metodi Web ed è configurato per consentire le query ad hoc. L'applicazione client può inviare richieste SOAP di query ad hoc all'endpoint.

Si noti che sarà necessario immettere il nome del server come valore hostname quando si prenota lo spazio dei nomi HTTP (sp_reserve_http_namespace) per l'endpoint e anche quando si completa il parametro SITE. Il valore port inoltre deve corrispondere alla porta HTTP utilizzata dall'istanza di SQL Server, ad esempio "80" o un altro numero di porta TCP se applicabile.

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

Nel codice precedente, si noti quanto segue:

  • Nella creazione di questo endpoint vengono definiti due metodi Web.

  • Il valore WSDL è impostato su DEFAULT. Il client pertanto può richiedere una risposta WSDL dal server.

  • Il valore BATCHES è impostato su ENABLED. Il client pertanto può inviare richieste di query ad hoc all'endpoint.

  • Il metodo Web UDFReturningAScalar non specifica lo spazio dei nomi facoltativo e utilizza lo spazio dei nomi specificato nel valore NAMESPACE.

  • I valori di domain\userOrGroup creati come account di accesso di SQL Server devono essere impostati sull'utente o il gruppo di dominio corrente che richiede l'accesso all'endpoint HTTP.