Aplicaciones de ejemplo para enviar solicitudes de servicios web XML nativos

Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

Los siguientes ejemplos se proporcionan para mostrar cómo se envían las solicitudes SOAP y cómo se procesan las respuestas. Estos ejemplos incluyen un cliente de Visual Studio 2005, tanto de C# como de Visual Basic.

Instalación inicial

Todas las aplicaciones de ejemplo requieren una instalación común. Esta instalación implica los siguientes pasos:

  1. Crear un procedimiento almacenado de ejemplo.

  2. Crear una función definida por el usuario.

  3. Crear el extremo HTTP SOAP.

Nota

Para crear estos objetos en la base de datos de ejemplo de AdventureWorks2008R2, puede usar SQL Server Management Studio o la utilidad del símbolo del sistema osql. Para obtener información acerca de cómo instalar la base de datos de ejemplo AdventureWorks2008R2, consulte Consideraciones para instalar ejemplos y bases de datos de ejemplo de SQL Server.

Crear el procedimiento almacenado (GetCustomerInfo)

El siguiente procedimiento almacenado se ha diseñado para demostrar cómo controla una aplicación cliente los parámetros de entrada y salida, el código de retorno, los resultados de la consulta y los errores en caso de que se produzca un error.

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

Este procedimiento almacenado tiene dos parámetros: uno de entrada (CustomerID) y otro de salida (OutParam) que permiten mostrar cómo se pasan los parámetros.

El procedimiento almacenado ejecuta las siguientes instrucciones:

  • Una instrucción INSERT que, deliberadamente, no funciona y genera un error. El error se genera intencionalmente para mostrar cómo se devuelven los errores en la respuesta SOAP. En Visual Studio 2005, los errores se devuelven como objetos SqlMessage.

  • Instrucción SELECT En Visual Studio 2005, el conjunto de filas resultante se devuelve como un objeto DataSet.

  • Una consulta SELECT FOR XML que devuelve datos XML. En Visual Studio 2005, el conjunto de filas resultante se devuelve como un objeto SqlXml.

  • Instrucción PRINT Su resultado se devuelve en Visual Studio 2005 como un objeto SqlMessage.

Crear la función definida por el usuario (UDFREturningAScalar)

Esta función devuelve un valor entero.

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

Crear el extremo HTTP SOAP (sql_endpoint)

Este extremo expone el procedimiento almacenado y la función definida por el usuario como métodos web. El extremo también se configura para admitir consultas ad hoc. La aplicación cliente puede enviar solicitudes SOAP para las consultas ad hoc al extremo.

Tenga en cuenta que deberá suministrar el nombre del servidor como valor de nombre_de_host cuando reserve el espacio de nombres HTTP (sp_reserve_http_namespace) para el extremo y también cuando complete el parámetro SITE. Además, el valor de puerto debe corresponder al puerto HTTP que utiliza la instancia de SQL Server, como "80" u otro número de puerto TCP, si corresponde.

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

En el código anterior, tenga en cuenta lo siguiente:

  • Se han definido dos métodos web al crear este extremo.

  • El valor de WSDL se establece en DEFAULT. Por lo tanto, el cliente puede solicitar una respuesta WSDL del servidor.

  • El valor de BATCHES se establece en ENABLED. Por lo tanto, el cliente puede enviar solicitudes de consultas ad hoc a este extremo.

  • El método web UDFReturningAScalar no especifica el espacio de nombres opcional, sino que utiliza el que se encuentra especificado en el valor NAMESPACE.

  • Los valores de domain\userOrGroup que se crearon como un inicio de sesión de SQL Server se deben establecer en el grupo o usuario de dominio real que solicita acceso al extremo HTTP.