Enviar solicitudes de servicios Web XML nativos mediante aplicaciones de ejemplo

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 Visual Studio 2005, tanto C# como 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 AdventureWorks, puede usar SQL Server Management Studio o la utilidad del símbolo del sistema osql. Para instalar la base de datos de ejemplo de AdventureWorks, vea Ejecutar el programa de instalación para instalar los ejemplos y las bases de datos de ejemplo AdventureWorks.

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 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

Este procedimiento almacenado tiene dos parámetros: un parámetro de entrada (CustomerID) y un parámetro 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.
  • Una 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.
  • Una 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 AdventureWorks
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 hostname cuando reserve el espacio de nombres HTTP (sp_reserve_http_namespace) para su extremo y también cuando complete el parámetro SITE. Además, el valor de port debe corresponder al puerto HTTP que utiliza la instancia de SQL Server, como "80" u otro número de puerto TCP, si corresponde.

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

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

  • Se han definido dos métodos Web al crear este extremo.
  • El valor WSDL está establecido en DEFAULT. Por lo tanto, el cliente puede solicitar una respuesta WSDL del servidor.
  • El valor BATCHES está establecido 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.

Vea también

Referencia

Agregar encabezados SOAP a aplicaciones cliente
Agregar compatibilidad de trazas SOAP a aplicaciones cliente
Establecer el servidor para que escuche solicitudes de servicios Web XML nativos
Estructura de los mensajes de respuesta y solicitud SOAP
Directrices y limitaciones de los servicios Web XML nativos

Conceptos

Controlar el tipo de datos xml y los tipos definidos por el usuario CLR

Otros recursos

Escribir aplicaciones cliente

Ayuda e información

Obtener ayuda sobre SQL Server 2005