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.
- Enviar solicitudes SOAP mediante el cliente Visual Studio 2005 (C#)
- Enviar solicitudes SOAP mediante el cliente de Visual Studio 2005 (Visual Basic)
Instalación inicial
Todas las aplicaciones de ejemplo requieren una instalación común. Esta instalación implica los siguientes pasos:
- Crear un procedimiento almacenado de ejemplo.
- Crear una función definida por el usuario.
- 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 enDEFAULT
. Por lo tanto, el cliente puede solicitar una respuesta WSDL del servidor. - El valor
BATCHES
está establecido enENABLED
. 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 valorNAMESPACE
. - 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