Ejemplo: generar servicios web SOAP (C#)
Este ejemplo explica cómo generar un servicio web SOAP con MapForce. Vamos a generar código de programa C# a partir de un proyecto de prueba de MapForce que encontrará en la siguiente ruta: <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\Query Person database.mfp. Este proyecto implementa un servicio web SOAP que expone dos operaciones: getPerson y putPerson. Este servicio web se comunica en segundo plano con una BD SQLite de la que obtiene o al que añade detalles de personas con estas operaciones. Para ver un ejemplo de cómo crear este tipo de proyectos en MapForce, consulte el apartado Crear proyectos de servicio web a partir de archivos WSDL.
Este ejemplo usa Visual Studio 2015 para compilar el código C# generado. La solución se implementará en Internet Information Services (IIS) 10 con ASP.NET habilitado.
Tenga en cuenta que, para simplificar, en el ejemplo se emplea una configuración de servidor web básica que no debe entenderse como preceptiva. En un entorno de producción es muy probable que el servidor web, las directivas de seguridad de la organización y otros factores exijan un enfoque distinto.
Para llamar al servicio web SOAP en este ejemplo se utiliza XMLSpy Enterprise Edition. Si no tiene XMLSpy, necesitará un cliente SOAP para probar el servicio web o, si lo prefiere, deberá escribir código de programa que pueda llamar al servicio web.
Nota: | si está usando IIS 7.x, puede que necesite instalar primero el componente de Windows "Compatibilidad con la configuración de IIS 6 y metabase de IIS 6" |
Paso 1: preparar el archivo query.wsdl
Este servicio web de ejemplo se creó a partir del siguiente archivo WSDL: <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\query.wsdl. Por defecto, el archivo query.wsdl define los detalles del servicio tanto para C# como para Java en dos secciones distintas, una de las cuales está excluida con comentarios. Por lo tanto, antes de generar código C#, ubique la siguiente sección en el archivo query.wsdl y asegúrese de que no hay comentarios que la excluyan:
<service name="WS2DB"> |
Asegúrese también de que la siguiente sección está excluida (solo en el caso de Java):
<!--<service name="WS2DB"> |
Paso 2: generar código C# y compilarlo (build)
Ejecute MapForce y abra el proyecto "Query Person database.mfp" desde la carpeta <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\. Haga clic con el botón derecho en el proyecto dentro de la ventana Proyecto y seleccione Generar código en | C#. MapForce genera código de programa y muestra el resultado en la ventana Mensajes:
El código se genera por defecto en el directorio secundario "Salida", que es relativo al directorio del proyecto. Para este tutorial no tocaremos la configuración predeterminada. Si de todas formas quiere cambiar el directorio de salida, consulte el apartado Configurar la generación de código.
Ejecute Visual Studio y abra la solución que ha generado. Espere a que la solución termine de cargar todos los proyectos.
Puede que tenga que ejecutar Visual Studio como administrador. Además, esta solución debe compilarse como aplicación de 32 bits, como se muestra más abajo. |
Para generar la solución, siga estos pasos:
•en el menú Compilar, haga clic en Compilar solución (Ctrl+Mayús+B).
Recuerde que en este ejemplo realizamos las consultas en una BD de Microsoft Access usando el proveedor ADO para Access, que solo funciona con aplicaciones de 32 bits. Por lo tanto, la solución debe compilarse en 32 bits:
•en el menú Compilar, haga clic en Administrador de configuración, cree una nueva plataforma de solución para x86 y vuelva a compilar.
Paso 3: implementar el servicio web en IIS
En la ventana Explorador de soluciones de Visual Studio, haga clic con el botón derecho en el proyecto services-Site/WS2DB y seleccione "Publish Web App" del menú contextual.
Cuando la aplicación solicite que elija un destino, seleccione "Custom".
Cuando la aplicación solicite que indique un nombre de perfil, introduzca algo que sea fácil de recordar más tarde, como "iis".
Seleccione "File System" como método de publicación y elija una carpeta de destino (en este ejemplo "C:\WS2DB").
Haga clic en Next. No cambie la configuración predeterminada.
Haga clic en Next y luego en Publish.
La ventana Resultados muestra el resultado.
Paso 4: configurar la aplicación en el Gestor IIS
Puede añadir la nueva aplicación a IIS como sigue:
1.En IIS, haga clic con el botón derecho en Sitios | Default Web Site y seleccione Agregar aplicación del menú contextual.
2.En "Alias", introduzca un nombre que identifique a su aplicación web (en este ejemplo la llamaremos "services").
3.En "Ruta de acceso física", introduzca la ruta en la que publicó previamente la aplicación ("C:\WS2DB" en este ejemplo).
Además, para este ejemplo en particular es necesario que las aplicaciones de 32 bits estén habilitadas para el grupo en que se esté ejecutando la aplicación.
1.En IIS, haga clic con el botón derecho en el grupo de aplicaciones en el que se implementó la aplicación y seleccione Configuración avanzada del menú contextual.
2.En Habilitar aplicaciones de 21 bits, seleccione la opción True.
Para terminar, como en este archivo usa una BD SQLite para leer los datos, el grupo de aplicaciones de IIS debe tener permiso para acceder al archivo de la BD. A no ser que haya modificado el proyecto de MapForce, la BD se encuentra en la siguiente ruta: <Documentos>\Altova\MapForce2023\MapForceExamples\Tutorial\people.sqlite.
1.En el explorador de Windows, haga clic con el botón derecho en el archivo people.sqlite y seleccione Propiedades.
2.En la pestaña Seguridad, haga clic en Editar.
3.Haga clic en Agregar e introduzca este nombre de objeto: IIS AppPool\DefaultAppPool. Use un valor distinto a "DefaultAppPool" si implementó la aplicación en otro grupo.
4.Conceda los permisos necesarios y haga clic en Aplicar. (En este ejemplo se necesitan permisos de lectura y escritura para el archivo de BD.)
Para comprobar si el servicio web se está ejecutando, acceda a esta URL: http://localhost/WS2DB.
Si se cargan los detalles del servicio web en el explorador, puede realizar llamadas al servicio web desde una aplicación cliente, como mostramos a continuación.
Hacer llamadas al servicio web
Si siguió los pasos anteriores al pie de la letra, entonces el WSDL del servicio web está disponible en http://localhost/WS2DB/query.wsdl. Para llamar al servicio web que acaba de implementar usaremos XMLSpy. Por supuesto, también puede usar otros clientes SOAP para ello.
Note: | se recomienda acceder al WDSL genuino en http://localhost/WS2DB/query.wsdl en lugar de usar el método de consulta "?wdsl", ya que este último puede devolver un archivo WSDL al que le falten algunas funciones del original o que no funcione. |
Ejecute XMLSpy Enterprise Edition. En el menú SOAP, haga clic en Crear solicitud SOAP nueva. Cuando la aplicación lo solicite, introduzca el WSDL del servicio web (en este ejemplo, http://localhost/WS2DB/query.wsdl).
Haga clic en Aceptar. Cuando la aplicación solicite que seleccione una operación SOAP, elija getPerson.
XMLSpy generará una solicitud de prueba como esta:
<?xml version="1.0" encoding="UTF-8"?> |
Localice el elemento <Query> de la solicitud y reemplace "String" con el valor que quiera usar como entrada para el servicio web. Como ya hemos explicado, este servicio web obtiene detalles de personas de una BD SQLite. En este ejemplo, para que la llamada devuelva datos, debe reemplazar "String" por "Ro" (en otras palabras, solo se extraen los datos de las personas cuyo nombre o apellido contenga "Ro"). La nueva solicitud tiene este aspecto:
<?xml version="1.0" encoding="UTF-8"?> |
Ahora puede enviar la solicitud anterior al servidor. En el menú SOAP, haga clic en Enviar solicitud al servidor para abrir el cuadro de diálogo "Configuración de la solicitud SOAP".
Haga clic en Aceptar. XMLSpy inicia la llamada y devuelve la respuesta en el editor. La imagen siguiente muestra una respuesta exitosa.
Usando el mismo método que acabamos de explicar también puede llamar a la operación putPerson expuesta por este servicio web. Para ver unas instrucciones paso a paso, consulte el apartado "Llamar al servicio web" en el tutorial para Java. Las instrucciones para los dos casos son idénticas, salvo la URL de WSDL, que es distinta para el ejemplo con Java.
Solución de problemas
En la siguiente tabla encontrará los problemas más habituales con los que puede encontrarse al crear o invocar un servicio web y cómo solucionarlos.
Problema | Solución |
---|---|
Al llamar al servicio web aparece este error:
The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine." | 1.Compile la solución C# en Visual Studio como aplicación de 32 bits. 2.Impleméntela en IIS. 3.Haga clic con el botón derecho en el grupo de aplizaciones de IIS en el que implementó la aplicación y seleccione Configuración avanzada. 4.En Habilitar aplicaciones de 21 bits, seleccione la opción True. |
Al llamar al servicio web aparece este error:
The Microsoft Jet database engine cannot open the file '<path>\people.mdb'. It is already opened exclusively by another user, or you need permission to view its data. | •Conceda al grupo de aplicaciones de IIS permisos para leer el archivo de BD de Access. Véase "Paso 4: configurar la aplicación en el Gestor IIS" más arriba. |
Al llamar al servicio web aparece este error:
System.Data.OleDb.OleDbException: Operation must use an updateable query. | •Conceda al grupo de aplicaciones de IIS permisos para escribir en el archivo de BD de Access. Véase "Paso 4: configurar la aplicación en el Gestor IIS" más arriba. |