Enviar solicitudes SOAP mediante el cliente Visual Studio 2005 (C#)
En este tema se describe una aplicación de ejemplo en la que un cliente Visual Studio 2005 envía solicitudes SOAP a una instancia de SQL Server 2005 y procesa la respuesta SOAP. Las solicitudes se envían a los métodos de extremo creados en Enviar solicitudes de servicios Web XML nativos mediante aplicaciones de ejemplo.
Para utilizar esta aplicación, recomendamos familiarizarse con la información sobre conceptos y procedimientos proporcionada en Establecer el servidor para que escuche solicitudes de servicios Web XML nativos y en Escribir aplicaciones cliente.
[!NOTA] Esta aplicación de ejemplo requiere una configuración inicial. Antes de continuar con la aplicación de ejemplo, siga los pasos descritos en Enviar solicitudes de servicios Web XML nativos mediante aplicaciones de ejemplo.
Enviar solicitudes SOAP
En esta aplicación, se configura un formulario con los botones y cuadros de texto necesarios para enviar solicitudes SOAP al extremo.
Cuando se envía una solicitud SOAP para el procedimiento almacenado GetCustomerInfo, el valor de CustomerID proporcionado en un cuadro de texto se pasa como parámetro de entrada. Si no se especifica ningún valor en el cuadro de texto, se asume una cadena vacía y se devuelven los clientes que tengan una cadena vacía como valor de CustomerID. Si se especifica NULL (nulo), se devuelven los clientes que tengan un CustomerID con valor NULL. Observe que cuando esto sucede, el atributo xsi:nil = 'true' se agrega automáticamente a la solicitud SOAP para indicar un valor de parámetro NULL.
El procedimiento almacenado GetCustomerInfo se ha diseñado para mostrar cómo controlar la entrada, los parámetros de salida, los mensajes de error y los resultados. La aplicación envía también solicitudes SOAP para la función definida por el usuario. Además, envía solicitudes SOAP para las siguientes consultas "ad hoc":
- Consulta SELECT para recuperar todos los empleados.
- Consulta SELECT para recuperar un empleado cuyo Id. se proporciona como entrada.
Procesamiento de respuestas SOAP
Cuando los resultados de una solicitud SOAP se devuelven como una matriz de objetos, la aplicación cliente identifica el tipo de cada objeto de la matriz y procesa el objeto en consecuencia. La aplicación muestra a continuación la siguiente información acerca de cada elemento de la matriz de objetos:
- El tipo de datos del valor en el elemento de la matriz.
- El valor: conjunto de resultados, código de retorno, valores de parámetros de salida, etc.
Crear un ejemplo de trabajo
Dados los muchos pasos que es necesario seguir para crear este ejemplo, la aplicación se divide en cinco partes:
- Parte 1. Ejecución del procedimiento almacenado GetCustomerInfo
- Parte 2. Ejecución de SP
- Parte 3. Ejecución de la consulta SQL sin parámetros
- Parte 4. Ejecución de la consulta SQL con parámetros
- Parte 5. Ejecución de la función definida por el usuario
Cada parte proporciona un conjunto de interfaces. Al final de cada una de las partes, se puede probar la aplicación.
Parte 1. Ejecución del procedimiento almacenado GetCustomerInfo
- En el equipo cliente, inicie Microsoft Visual Studio 2005 desde el grupo de programas Microsoft Visual Studio 2005.
- Haga clic en Nuevo proyecto.
- Seleccione Proyectos de Visual C# como Tipo de proyecto.
- Especifique NativeSOAPApp1 como nombre de proyecto
- Especifique la ubicación en la que desea guardar el proyecto.
- Seleccione Aplicación de Windows como plantilla y haga clic en Aceptar.
- En la ventana Explorador de soluciones, haga clic con el botón secundario en Referencias y seleccione Agregar referencia Web. Otra forma de agregar una referencia Web es seleccionar Agregar referencia Web en el menú Proyecto.
- En el cuadro Dirección, escriba https://Server/sql?wsdl y presione ENTRAR. Tenga en cuenta que debe especificar el nombre del servidor en la dirección URL.
- Haga clic en Agregar referencia. Así se crean las clases proxy necesarias, de forma que se pueda llamar a todos los métodos del documento WSDL.
Parte 2. Ejecución de SP
- En el menú Ver, haga clic en Cuadro de herramientas para abrir el cuadro de herramientas del panel Form1.cs [Diseño]. Opcionalmente, puede presionar CTRL + ALT + X para abrir el cuadro de herramientas.
- En Form1, agregue un cuadro de texto (textBox1), un botón (button1) y un cuadro de lista (listBox1).
- Haga clic con el botón secundario en el cuadro de texto y seleccione Propiedades. Cambie el valor Text de textBox1 a 1. Es el valor predeterminado de CustomerID.
- Haga clic con el botón secundario en button1 y seleccione Propiedades.
- Cambie el valor de la propiedad Text de button1 a ExecSP.
- Cambie el valor de la propiedad (name) a ExecSP.
- Haga clic con el botón secundario en el cuadro de texto (listBox1) y seleccione Propiedades. Cambie el valor de la propiedad HorizontalScrollbar a True.
- Haga doble clic en ExecSP.
- Copie el código de Lista de códigos C# para ExecSP (compatibilidad con SOAP nativa) en esta función.
- Actualice el código. Cambie las referencias a
server
con el nombre de host identificado cuando se creó el extremo mediante CREATE ENDPOINT. - Guarde el proyecto y compílelo. Para obtener más información, vea la sección "Compilar el código" anterior.
Parte 3. Ejecutar la consulta SQL sin parámetros
Esta parte de la aplicación cliente ejecuta y agrega una consulta "ad hoc" (consulta FOR XML) que recupera los empleados de la tabla Employee de la base de datos de AdventureWorks.
- En Form1, en la ficha [Diseño], agregue otro botón (button1).
- Haga clic con el botón secundario en este nuevo botón y seleccione Propiedades.
- Cambie el valor de la propiedad Text de button1 a BatchQueryFindAllEmps.
- Cambie el valor de la propiedad (name) a BatchQueryFindAllEmps.
- Haga doble clic en BatchQueryFindAllEmps.
- Copie el código de Código C# para BatchQueryFindAllEmps (compatibilidad con SOAP nativa) en esta función.
- Actualice el código. Cambie las referencias a
server
con el nombre de host identificado cuando se creó el extremo mediante CREATE ENDPOINT. - Guarde el proyecto y compílelo. Para obtener más información, vea la sección "Compilar el código" anterior.
Parte 4. Ejecutar la consulta SQL con parámetros
Esta parte es similar a la anterior, excepto en que la solicitud SOAP para la consulta "ad hoc" incluye un parámetro de consulta. La consulta FOR XML recupera información de empleado para el Id. de empleado especificado.
- En Form1, en la ficha [Diseño], agregue un botón (button1).
- Haga clic con el botón secundario en este nuevo botón y seleccione Propiedades.
- Cambie el valor de la propiedad Text de button1 a BatchQueryFindAnEmp.
- Cambie el valor de la propiedad (name) a BatchQueryFindAnEmp.
- Haga doble clic en BatchQueryFindAnEmp.
- Copie el código de Lista de códigos C# para BatchQueryFindAnEmp (compatibilidad con SOAP nativa) en esta función.
- Actualice el código. Cambie las referencias a
server
con el nombre de host identificado cuando se creó el extremo mediante CREATE ENDPOINT. - Guarde el proyecto y compílelo. Para obtener más información, vea la sección "Compilar el código" anterior.
Parte 5. Ejecutar la función definida por el usuario
En esta parte, la aplicación cliente envía una solicitud SOAP para el método Web UDFReturningScalar. Este método Web corresponde a una función definida por el usuario que devuelve un valor entero.
- En Form1, en la ficha [Diseño], agregue un botón (button1).
- Haga clic con el botón secundario en este nuevo botón y seleccione Propiedades.
- Cambie el valor de la propiedad Text de button1 a ExecUDFReturningScalar.
- Cambie el valor de la propiedad (name) a ExecUDFReturningScalar.
- Haga doble clic en ExecUDFReturningScalar.
- Copie el código de Lista de códigos C# para ExecUDFReturningScalar (compatibilidad con SOAP nativa) en esta función.
- Actualice el código. Cambie las referencias a
server
con el nombre de host identificado cuando se creó el extremo mediante CREATE ENDPOINT. - Guarde el proyecto y compílelo. Para obtener más información, vea la sección "Compilar el código" anterior.
- Haga clic en ExecUDFReturningScalar. El valor devuelto de la función definida por el usuario se muestra en el cuadro de lista.
Dado que el extremo especifica autenticación integrada , aparece la siguiente línea en el código : proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
Si utiliza autenticación de SQL Server, se recomienda quitar esta línea y sustituirla con código que implemente encabezados de WS-Security para proporcionar credenciales de autenticación basada en SQL Server. Para obtener más información, vea Autenticación de SQL Server por medio de SOAP.
[!NOTA] Si utiliza autenticación de SQL Server o autenticación básica, SQL Server 2005 requiere que se utilice SSL (Capa de sockets seguros) para la transmisión cifrada segura de credenciales del usuario que de otro modo serían visibles como texto no cifrado. Para obtener más información sobre cómo habilitar SSL para utilizarlo con extremos HTTP, vea Configurar certificados para su uso con SSL.
Compilar el código
SQL Server 2005 instala Microsoft .NET Framework 2.0 como parte del proceso de instalación. Estas instrucciones de compilación utilizan la versión más reciente de .NET Framework. (Se trata del número más alto en la carpeta \WINDOWS\Microsoft.NET\Framework.)
Para compilar el código de ejemplo
- Guarde el proyecto completo.
- Abra el símbolo del sistema y busque la carpeta en la que se guarda el proyecto.
- En esta carpeta, copie el archivo Reference.cs de la subcarpeta Web Reference\Server. (Por ejemplo, copie "Web Reference\Server\Reference.cs"). Los archivos Form1.cs y Reference.cs deben estar en la misma carpeta.
- Compile el código y especifique el nombre del archivo ejecutable (.exe). Por ejemplo, si el nombre del ejecutable fuera NativeSOAPApp1.exe, la línea de comandos sería la siguiente:
\WINDOWS\Microsoft.NET\Framework\v2.0.xxxxx\csc.exe /out:NativeSOAPApp1.exe Form1.cs Reference.cs
xxxxx es el número de carpeta que corresponde a la versión de .NET Framework.
De este modo se crea el ejecutable (NativeSOAPApp1.exe) en el directorio actual.
[!NOTA] Si utiliza una versión anterior de .NET Framework, puede que reciba un error en tiempo de ejecución. Si esto sucede, intente actualizar el procedimiento almacenado GetCustomerInfo agregando la cláusula
FOR XML AUTO
al final de la instrucciónSELECT
, como se muestra a continuación:
SELECT TOP 3 SalesOrderID, OrderDate
FROM SalesOrderHeader
WHERE CustomerID = @CustomerID
FOR XML AUTO
Los resultados de la ejecución del procedimiento almacenado se muestran en el cuadro de lista.
Vea también
Referencia
Establecer el servidor para que escuche solicitudes de servicios Web XML nativos
Estructura de los mensajes de respuesta y solicitud SOAP
Enviar solicitudes de servicios Web XML nativos mediante aplicaciones de ejemplo
Directrices y limitaciones de los servicios Web XML nativos
Conceptos
Prácticas recomendadas para utilizar servicios Web XML nativos