Exemples d'applications pour l'envoi de demandes de services Web XML natifs

Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

Les exemples suivants ont pour but de décrire la méthode d'envoi des demandes SOAP et la méthode de traitement des réponses. Ces exemples incluent un client Visual Studio 2005, à la fois C# et Visual Basic.

Installation initiale

Une installation commune est nécessaire pour tous les exemples d'applications. Les étapes de l'installation sont les suivantes :

  1. Créez un exemple de procédure stockée.

  2. Créez une fonction définie par l'utilisateur.

  3. Créez le point de terminaison SOAP HTTP.

Notes

Pour créer ces objets dans l'exemple de base de données AdventureWorks2008R2, vous pouvez utiliser SQL Server Management Studio ou l'utilitaire de commande osql. Pour plus d'informations sur l'installation de l'exemple de base de données AdventureWorks2008R2, consultez Considérations relatives à l'installation d'exemples de bases de données et d'exemples de code SQL Server.

Création de la procédure stockée (GetCustomerInfo)

La procédure stockée suivante montre comment une application cliente gère les paramètres d'entrée et de sortie, le code de retour, les résultats des requêtes, ainsi que les erreurs en cas de défaillance.

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

Cette procédure stockée a deux paramètres : un paramètre d'entrée (CustomerID) et un paramètre de sortie (OutParam) pour illustrer la façon dont les paramètres sont passés.

La procédure stockée exécute les instructions suivantes :

  • Instruction INSERT qui échoue intentionnellement et retourne une erreur. L'erreur est volontaire pour indiquer comment les erreurs sont retournées dans la réponse SOAP. Dans Visual Studio 2005, les erreurs sont retournées en tant qu'objets SqlMessage.

  • Instruction SELECT. Dans Visual Studio 2005, l'ensemble de lignes généré est retourné en tant qu'objet DataSet.

  • Requête SELECT FOR XML qui retourne des données XML. Dans Visual Studio 2005, l'ensemble de lignes généré est retourné en tant qu'objet SqlXml.

  • Instruction PRINT. Le résultat est retourné dans Visual Studio 2005 en tant qu'objet SqlMessage.

Création de la fonction définie par l'utilisateur (UDFREturningAScalar)

Cette fonction retourne une valeur de type entier.

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

Création du point de terminaison SOAP HTTP (sql_endpoint)

Ce point de terminaison expose la procédure stockée et la fonction définie par l'utilisateur en tant que méthodes Web. Le point de terminaison est également configuré pour autoriser les requêtes appropriées. L'application cliente peut envoyer des demandes SOAP pour les requêtes appropriées au point de terminaison.

Pour la valeur de hostname, vous devez indiquer le nom du serveur lorsque vous réservez l'espace de noms HTTP (sp_reserve_http_namespace) pour votre point de terminaison, et également lorsque vous indiquez le paramètre SITE. De plus, la valeur de port doit correspondre au port HTTP utilisé par l'instance de SQL Server ; par exemple, "80" ou un autre numéro de port TCP le cas échéant.

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

Dans le code précédent, vous pouvez observer les éléments suivants :

  • deux méthodes Web sont définies pour la création de ce point de terminaison ;

  • la valeur de WSDL est DEFAULT. Par conséquent, le client peut demander une réponse WSDL de la part du serveur ;

  • la valeur de BATCHES est ENABLED. Par conséquent, le client peut envoyer des demandes appropriées à ce point de terminaison ;

  • la méthode Web UDFReturningAScalar ne spécifie pas l'espace de noms facultatif, mais elle utilise l'espace de noms spécifié dans la valeur NAMESPACE ;

  • les valeurs de domain\userOrGroup, créées en tant que connexion SQL Server, doivent correspondre au groupe ou à l'utilisateur de domaine réel qui requiert l'accès au point de terminaison HTTP.