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 :
Créez un exemple de procédure stockée.
Créez une fonction définie par l'utilisateur.
Créez le point de terminaison SOAP HTTP.
[!REMARQUE]
Pour créer ces objets dans l'exemple de base de données AdventureWorks, 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 AdventureWorks, 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 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
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 AdventureWorks
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 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
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.
Dans cette section