Técnicas de desarrollo de Servicios Web en sistemas Linux usando gSOAP y Elicpse – CDT (página 2)
Enviado por Dayrien Corrales D�az
Buscar y rebuscar en Internet ha servido para concluir que no existe mucha fuerza en el desarrollo de WS con este lenguaje de programación. Por esta razón y por la falta de conocimientos es que muchos han migrado a otras tecnologías para desarrollar aplicaciones distribuidas. Aquellos desarrolladores que usan el lenguaje de Dennis Ritchie, si han llegado al fondo de lo que se puede hacer con este lenguaje deben saber que prácticamente (a mi criterio) es el padre de los lenguaje de programación del alto nivel.
A veces se hace difícil y quizás imposible conocer todas las funcionalidades que nos permite un lenguaje es por eso que surgen las bibliotecas y frameworks.
gSOAP es una biblioteca para el desarrollo de WS en el lenguaje C/C++. El trabajo con ella es muy eficiente. La mayoría de los programadores conocen casi que todo el trabajo se lleva a cabo en la consola, tanto para generar los stubs del cliente y los skeletons del servidor, como para la compilación del código a la hora de querer obtener un binario.
El trabajo con ella en las distribuciones de GNU/Linux requiere tener instalados los siguientes paquetes:
apache 1.0 o superior.
gsoap-7.9 o superior.
libsoap-lite-perl.
Aquel que no tenga conocimiento sobre la misma puede acceder a los manuales de usuario que ofrece esta biblioteca.
En esencia, el trabajo se divide en:
Configurar el archivo cabecera (header: file.h) donde se va a configurar el contrato de nuestro servicio. Para ello necesitamos un editor de texto o de código C/C++.
Generar los stubs y skeletons necesarios para la compilación del servicio.
Implementar la función del servicio.
Compilar el programa.
Es imprescindible usar el compilador indicado: si la implementación se llevara a cabo en C, usaríamos gcc, cc, etc.; en caso que se esté implementando en C++ se debe usar g++, c++. A veces mezclamos funciones de ambos apartados pero para nuestra satisfacción el compilador g++ y c++ están actualizados con estas modificaciones y nos permiten una compilación sin errores.
Si quiere comprobar que todo ha salido bien y que no existen errores en el binario del servicio, acceda mediante el navegador web a la dirección: http://localhost/cgi-bin/servicio.cgi, donde se debe mostrar lo siguiente:
–
–
–
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
SOAP-ENV:Client
–
End of file or no input: Operation interrupted or timed out
Una vez se tiene el servicio corriendo en el servidor se procede a hacer un cliente para invocar el servicio y comprobar que realiza la operación que deseamos. Todo esto siguiendo los mismos pasos y consumiendo tiempo de desarrollo.
Eclipse-CDT. IDE para el desarrollo
Podemos mejorar nuestro entorno de trabajo y pasar de la consola a un IDE que permita tener mayor precisión en el código; y sin necesidad de otra herramienta lograr realizar las mismas acciones que se ejecutan en la consola.
La propuesta es utilizar Eclipse con el plugin para el desarrollo en C/C++ (CDT). Este IDE permite la refactorización, instalación / actualización de código; es neutral a la plataforma y se ajusta perfectamente a nuestras necesidades. No estaría demás decir que Eclipse es el más utilizado para el desarrollo de software en la actualidad. Muchos lo consideran el mejor. Es tan potente que puede interactuar con el sistema sobre el cual esté corriendo y ahí es donde se debe aprovechar y configurarlo para que haga lo que queremos.
CONFIGURAR ECLIPSE PARA TRABAJAR CON GSOAP.
Lo primero es obtener Eclipse con el plugin CDT. Una vez se tenga corriendo, cree un nuevo proyecto C++. Luego proceda a crear el header, borre las sentencias del preprocesador y defina el contrato del servicio. Ya tiene configurada la primera parte.
En las propiedades del proyecto, seleccione el acápite C/C++ Build, pestaña Builder Settings, sección Builder: desmarque Use default build command y cambie make por: soapcpp2 -S headername.h.
En la sección Makefile generation desmarcar: Generate Makefiles automatically; y borre Debug del Build Location para que cree la solución en el mismo directorio del proyecto.
Fig. 1: Primera etapa de configuración.
Luego en la pestaña Behaviour, sección Workbrench Build Behaviour borre de todas la variable (all) sin desmarcar los checkboxes. Al aplicar estos cambios se generan los stubs o skeletons del cliente o servidor respectivamente.
Fig. 2: Segunda etapa de configuración.
Luego cree el programa principal y una vez tenga todo listo en el menú seleccionamos Project-> Make Target->Create. Ponga un nombre para la operación y en el Build command teclee:
servidor: g++ -o servicio.cgi main.cpp soapC.cpp soapServer.cpp stdsoap2.cpp soapdefs.h
De click en Build.
Fig. 3: Tercera etapa de configuración.
cliente: g++ -o cliente main.cpp soapC.cpp soapClient.cpp stdsoap2.cpp soapdefs.h
Para generar el binario seleccione del menú: Project->Make Targe-> Build, aparece el elemento a crear, y de click en Build.
Fig. 4: Cuarta etapa de configuración.
Hecho esto se procede el proceso de compilación semejante a como sucede en la consola y queda creado nuestro binario. Los servicios *.cgi no son reconocidos por Eclipse, no obstante hay que recordar que el verdadero propósito es instalarlo como CGI para que pueda ser usado por nuestro servidor Apache.
Solo queda hacer el cliente y para ello siga los mismos pasos para configurar el Eclipse especificando en cada caso lo que se desea generar y/o compilar.
Debido a la no existencia de un plugin para esta plataforma de desarrollo que permita ayudar a los programadores en la creación de WS hay que realizar todos estos pasos. Señalar también que en la compilación pueden existir algunos Warnings, pero esto no es para preocuparse ya que las advertencias no impiden la obtención de los ejecutables deseados.
Servicios Web y transferencia de archivos
El uso de la biblioteca gSOAP se basa esencialmente en usar la referencia de las variables, estructuras de datos y/u objetos para devolver el resultado de la función invocada por un cliente. En el ejemplo mostrado anteriormente se comprueba lo dicho. De forma parecida se procede para los demás tipos de datos definidos en los lenguajes de programación, ya sea entero, flotante, caracter, cadena de caracteres, etc.
En muchos casos el desarrollo de los servicios web lo centramos en la consulta de varios datos y está comprobado que los datos que se devuelven por referencia de memoria son conocidos por el lenguaje de implementación, tanto del servicio como del cliente. En el caso de los datos desconocidos se deben serializar para acercarlos lo más posible a los datos que maneja el lenguaje. ¿Pero que sucede cuando se desea enviar datos que están documentados en archivos? A partir de este punto se comienza a hablar de una complejidad mayor para los servicios web.
Los distintos tipos de archivos que forman parte de un sistema operativo se pueden caracterizar en:
De texto (plano o no plano).
Binarios (ejecutables, fotos, sonidos, videos).
El objetivo de la serialización es llevar a formato de texto los datos que no lo son. Por tanto es necesario este proceso para el envío de archivos mediante servicios web. gSOAP proporciona funciones que adjuntan al mensaje los archivos que se quieren enviar, mas no es la única vía para hacerlo.
En el mundo de la computación está comprobado de que nada, o casi nada es imposible. Hoy en día hasta los archivos más complejos pueden ser convertidos en caracteres reconocidos utilizando un alfabeto de 64 caracteres universalmente legibles.
Base64 no es un método de cifrado (no es una forma de encriptación). Este tipo de codificación es utilizado en el envío de correo electrónico, en particular mediante el protocolo SMTP. Aunque no ofrece ningún tipo de protección pero aún así las ventajas que ofrece se deberían explotar al máximo.
Desde cualquier lenguaje de programación que existe en la actualidad se pueden leer los archivos de los sistemas operativos. En el caso de los binarios una persona no entiende lo que se lee pero la computadora sí lo hace. Aprovechando las funcionalidades que nos ofrece base64 se logra codificar eso que no se entiende a una cadena de datos que no tiene lógica pero está conformada por elementos que sí dominan los humanos dentro y fuera del lenguaje; aunque no tengan ningún sentido el orden en que aparecen.
Para que nuestra función pueda codificar se debe tener definido un alfabeto similar a como se muestra a continuación:
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
En la red de redes podemos encontrar la implementación de las funciones que codifican y decodifican usando base64. Solo queda ahora designar bien las responsabilidades del servicio y del cliente para que se cumpla la operación deseada. Una vez logrado esto sus servicios web enviarán y recibirán archivos. Es recomendable usar este procedimiento solo si se hace una buena gestión de lo que se va a enviar y como se va a enviar.
Los desarrolladores en C/C++ no necesitan adoptar otra plataforma para crear servicios Web.
Eclipse no es solo el IDE que más se utiliza para el desarrollo de software sino que es el que más se ajusta a nuestras necesidades aún sin contar con un plugin para la programación de nuestros programas.
Es posible salirnos del marco de la biblioteca gSOAP para lograr el envío y recepción de archivos entre servicios Web.
Wikimedia Foundation, Inc., "Desarrollo Web", [http://es.wikipedia.org/wiki/Desarrollo_web]
Wikimedia Foundation, Inc., "Servicio Web", [http://es.wikipedia.org/wiki/Servicio_Web]
Jorge A. Saavedra Gutierrez, "Breve historia sobre C/C++/C#", 9 de Diciembre de 2006, [http://jorgesaavedra.wordpress.com/2006/12/09/breve-historia-de-c-c-c/]
Cristian, "Compiladores e IDEs", 2006, [http://casidiablo.net/compiladores-e-ide%E2%80%99s/]
Foro elhacker.net, "Base 64", 2003, http://foro.elhacker.net/tutoriales_documentacion/base_64-t9039.0.html
Autor:
Ing. Dayrien Corrales D?az
Profesor del Departamento de T?cnicas de la Programaci?n.
Facultad 5. Polo: "Hardware y Autom?tica".
Universidad de las Ciencias Inform?ticas.
Cuidad de la Habana, marzo 2009.
Página anterior | Volver al principio del trabajo | Página siguiente |