Práctica de gsoap. int ns enviar (unsigned nodo, std::string cadena, std::string &resultado); int ns recibir(unsigned nodo, std::string &resultado);

Documentos relacionados
Javier Mena Mena. Departamento de Ingeniería informática y sistemas. Escuela Técnica Superior de Ingeniería Informática. Trabajo de Fin de Grado

Tema 5: Diseño modular. Índice. Notas. Programación 2. Curso Notas. Ejemplo. La herramienta make. 1 Diseño modular.

Desarrollo de servicios distribuidos usando gsoap

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

SOR -::- Prácticas -::- Curso 05/06. RCP es un estándar desarrollado por Sun Microsystems y usado por muchos distribuidores de sistemas UNIX.

Aplicaciones seguras con ClaseSeguridad

Arquitectura de Computadores: Exámenes y Controles

Problemas de Redes de Computadores. Conjunto de problemas 1

Modo básico de funcionamiento del módulo Velneo vmodapache V7

Librerías estándar en C++ STL: Standard Template Library. Álvaro Sánchez Miralles José Porras (Fidel Fernández)

Desarrollo de Servicios Web con JBuilder

Introducción al laboratorio de Programación I

Ubuntu Server HOW TO : SQUID. EN ESTE SE REALIZA LO SIGUIENTE: En este how to se le va a enseñar como instalar servidor proxi Squid.

Instalación y configuración del servidor FTP IIS en Windows 2003 Server. Para llevar a cabo la instalación nos vamos a agregar y quitar programas:

Tema: FUNCIONES, PROCEDIMIENTOS Y RECURSIVIDAD.

Taller de Sistemas Operativos Introducción

SISTEMA DE ENCUESTAS CON PHP Y MYSQL

Problemas comunes en la integración del módulo V.me by Visa en Prestashop

Paso de Borland Turbo C (bajo DOS) a Anjuta (Linux) 1.

Laboratorio 7 Motor de búsqueda web basado en el TAD Árbol Binario de Búsqueda GUIÓN DEL LABORATORIO

PRÁCTICA DE LABORATORIO 3 Tipo Abstrato de Dato

PRACTICA 6.6 VPN Logmein Hamachi registrarse en la página instalación,

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS

El lenguaje de Programación C. Fernando J. Pereda

CORPORACION UNIVERSITARIA AUTONOMA DEL CAUCA PROGRAMA DE INGENIERIA DE SISTEMAS 2o Periodo de 2014 MATERIA: ELECTIVA IV (MEJORAMIENTO DE PROCESOS)

Estructuras de Datos y Algoritmos Tecnólogo en Informática

Prof. Dr. Paul Bustamante

Manual de referencia de sistema para la invocación de Web Services con Aduanas (SMS v3.1.12)

Copias de seguridad con SQL Server 2005 WhitePaper Febrero de 2008

INSTRUCTIVO DEL COMANDO MAKE

UNIDESYS UNIVERSAL BUSINESS SYSTEMS INSTALACIÓN NUEVO PUESTO DE TRABAJO

Seminario 1. Conexión a Oracle

Iptables, herramienta para controlar el tráfico de un servidor

Elastix Web Services (WSDL) Manual de Usuario

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

Un poco de culturilla...1 Crear un servicio Web...1 Usar servicios web...6

2. Instalación y configuración del servidor FTP IIS en Windows 2008 Server.

Curso Internet Básico - Aularagon

Tutorial: Python + Soap Web Service. Daniel Montenegro Cordero

Guia rápida EPlus Cliente-Servidor

Tema: Clases y Objetos en C++.

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS

Esquema de un programa en C: bloques básicos

GUIA DE LABORATORIO Nro. 4

CITRIX Citrix Application Streaming

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

MANUAL DE AYUDA TAREA PROGRAMADA COPIAS DE SEGURIDAD

Contrato de Servicio

Ejercicios - Persistencia en Android: ficheros y SQLite

WEBSERVICES CON FIRMA DIGITAL Versión 1.2

Instalación de un nodo (cliente) - GIA

Manual de instalación del cliente JAVA-WS

Práctica GESTIÓN Y UTILIZACIÓN DE REDES LOCALES. Curso 2001/2002. TCP/IP: protocolo TCP

Servidor. Comenzaremos por confirmar que el servicio NFS esta instalado y ejecutandose desde la terminal, escribiremos lo siguiente: #rpm -q nfs-utils

Modelo de Objetos Distribuidos

MPI es un estándar de programación en paralelo mediante paso de mensajes que permite crear programas portables y eficientes.

Trabaja los Sistemas Aspel desde tus sucursales con Terminal Server

Manual del Protocolo XML-RPC de Mensajería Negocios

Instalando CodeKa v1.0 sobre Bitnami Xamp Stack (para Windows, Linux, OS X y Solaris).

Examen escrito de Programación 1

Práctica sobre compartición de instancias remotas.

INSTALACIÓN DE SIESTTA 2.0 EN UN HOSTING (Ejemplo para Guebs.com)

RPC sobre HTTPS

Backup de Exchange 2003 con EXMERGE

Quitar de un Directorio Activo Un Servidor que es el Maestro de Operaciones En Windows 2000 Server y Windows Server 2003

WEB SERVICES CON AXIS

Payslip for SAP Provide HCM People

Examen Principios de Programación Febrero 2012

GUIA RÁPIDA DE VNC Antonio Becerro 2005

Instrucciones para la instalación de IBM SPSS Data Access Pack para Linux

CREACIÓN DE WEBSERVICES

Redes de área local: Aplicaciones y servicios WINDOWS

Redes de área local: Aplicaciones y servicios WINDOWS

Unitronics UniOPC. Tutorial. Unitronics Remote Operator. En este tutorial veremos como funciona el software Unitronics UniOPC

INSTALACIÓN DE MEDPRO

Práctica 1: Herramientas básicas:

Instalar soporte ESE en DSpace

Manual de uso de la Administración ITALO

Instalación de Sonidos En Español para Asterisk en Zeroshell. Escrito por: Joker

INSTALACIÓN COYOTE LINUX. Índice

Documentación servicios Web ENVIALIANET

Servicio de acceso y control remoto SSH. carlos victoria casanova

WINDOWS : COPIAS DE SEGURIDAD

Hostaliawhitepapers. Usar Plesk para, poner en marcha nuestro dominio.

Ministerio de Educación,Cultura y Deporte. Aulas en Red. Windows. Módulo 2: Servicios Básicos. DNS

Memoria compartida y semáforos r/w. La página del manual que podría servir para describir estas funciones es la siguiente:

Práctica GESTIÓN Y UTILIZACIÓN DE REDES LOCALES. Curso 2001/2002. Monitorización de una LAN

Creación de materiales didácticos Aplicaciones para dispositivos móviles Lección 4

Pasarela de desarrollo API DTMF (marcación por tonos).

PASOS A SEGUIR PARA LA CONEXIÓN A LA VPN DE LA GENERALITAT VALENCIANA

- MANUAL INSTALACIÓN LINUX -

MANUAL DE INICIACIÓN A JOVELLANOS VIRTUAL J. A. Espejo coordinador.tic@iesjovellanos.org 1

Explotación de Sistemas Informáticos IES Murgi PRÁCTICA 9: SERVICIO WEB Y FTP DE INTERNET INFORMATION SERVICE

DOCUCONTA Versión Septiembre 2010 MINISTERIO DE HACIENDA. Manual de instalación SECRETARÍA DE ESTADO DE PRESUPUESTOS Y GASTOS

Administración de sistemas UNIX/Linux Práctica Colección de scripts para la configuración de una infraestructura de máquinas UNIX

El cliente de correo Mozilla Thunderbird es un programa de correo electrónico. Perfiles de usuario:

Instalación de Tomcat7 en Ubuntu

Instituto Tecnológico Las Américas (ITLA) Sistemas Operativos 3 (SO3) Daniel Alejandro Moreno Martínez. Matrícula:

Taller de capacitación en la Ventana Única de Transparencia (VUT) Enfoque práctico

Transcripción:

Práctica de gsoap Para desarrollar programas que utilicen gsoap para llevar a cabo las comunicaciones, debemos bajar el paquete gsoap linux 2.7.tgz disponible en: http://atc.ugr.es/pedro/docencia/irhc/irhc.html Debemos descomprimirlo y entrar en el directorio que habrá creado: tar xvfpz gsoap linux 2.7.tgz cd gsoap linux 2.7 Como ejemplo para esta práctica desarrollaremos un ejemplo sencillo que constará de un servidor y varios clientes. El servidor estará escuchando cierto puerto por el que aceptará conexiones para recibir o enviar cadenas a los clientes. Un cliente puede conectarse para enviarle una cadena o bien para solicitarla (en este caso, el servidor toma la más antigua de las que tiene almacenadas y la envía al cliente). Para trabajar crearemos una carpeta nueva llamada ejemplo_basico Una vez que sabemos qué funcionalidad debe tener el servidor, debemos crear el fichero funciones.h que especificará las funciones a las que se puede acceder, y los parámetros que se esperan. El contenido del fichero será similar al siguiente: //gsoap ns service name: funciones //gsoap ns service style: rpc //gsoap ns service encoding: encoded //gsoap ns service namespace: //gsoap ns service location: //gsoap ns schema namespace: urn:func int ns enviar (unsigned nodo, std::string cadena, std::string &resultado); int ns recibir(unsigned nodo, std::string &resultado); Vemos que en este ejemplo sólo permitimos dos tipos de acceso al servidor: para enviar un nuevo valor y para recibirlo. Una vez tenemos el fichero funciones.h debemos compilarlo para que gsoap nos genere todos los ficheros necesarios para manejar las comunicaciones:../bin/soapcpp2 funciones.h ** The gsoap Stub and Skeleton Compiler for C and C++ 2.7.8a ** Copyright (C) 2000 2006, Robert van Engelen, Genivia Inc. ** All Rights Reserved. This product is provided "as is", without any warranty. ** The gsoap compiler is released under one of the following three licenses: ** GPL, the gsoap public license, or the commercial license by Genivia Inc. Saving soapstub.h Saving soaph.h 1

Saving soapc.cpp Saving soapclient.cpp Saving soapclientlib.cpp Saving soapserver.cpp Saving soapserverlib.cpp Using ns service name: funciones Using ns service style: rpc Using ns service encoding: encoded Using ns service location: Using ns schema namespace: urn:func Saving funciones.wsdl Web Service description Compliance warning: operation 'ns enviar' is not compliant with WS I Basic Profile 1.0a, reason: uses SOAP encoding Compliance warning: operation 'ns recibir' is not compliant with WS I Basic Profile 1.0a, reason: uses SOAP encoding Saving soapfuncionesproxy.h client proxy Saving soapfuncionesobject.h server object Saving funciones.enviar.req.xml sample SOAP/XML request Saving funciones.enviar.res.xml sample SOAP/XML response Saving funciones.recibir.req.xml sample SOAP/XML request Saving funciones.recibir.res.xml sample SOAP/XML response Saving funciones.nsmap namespace mapping table Saving ns.xsd XML schema Compilation successful El código del proceso cliente (fichero cliente.c) es bastante sencillo, y sólo debe tener en cuenta contactar con el servidor adecuado: #include <stdlib.h> #include <stdio.h> #include <time.h> #include <math.h> #include <iostream> #include <fstream> #include <string> #include <vector> #include <sstream> using namespace std; #include "soaph.h" #include "funciones.nsmap" // poner la IP:PUERTO del servidor const char server[] = "127.0.0.1:9999"; struct soap soap; int main(int argc, char **argv){ if (argc < 3){ cout << "Uso: cliente [enviar recibir] cadena nodo \n"; return 1; char *accion=argv[1]; string cadena=argv[2]; unsigned nodo = atoi(argv[3]); soap_init(&soap); string resultado; if(accion[0]=='e'){ soap_call_ns enviar(&soap, server, "", nodo, cadena, resultado); cout <<" > enviar devuelve = "<<resultado<<endl; else{ soap_call_ns recibir(&soap, server, "", nodo, resultado); cout <<" > recibir devuelve = "<<resultado<<endl; soap_destroy(&soap); soap_end(&soap); 2

soap_done(&soap); return 0; Para compilar el cliente.c debemos usar la siguiente orden: g++ Wall O2 I.. o cliente cliente.c soapc.cpp soapclient.cpp../stdsoap2.cpp El proceso servidor (fichero servidor.c) constará de un bucle infinito en el que se aceptan conexiones SOAP y las sirve, utilizando las dos funciones creadas al principio (enviar o recibir). El servidor tiene un vector de cadenas de texto donde se van almacenando las cadenas que los clientes envían, y de donde extrae la más antigua para enviarla a un cliente que lo solicite: #include <stdlib.h> #include <stdio.h> #include <time.h> #include <math.h> #include <iostream> #include <fstream> #include <string> #include <vector> #include <sstream> using namespace std; #include "soaph.h" #include "funciones.nsmap" vector<string> almacen; unsigned accede_nodo; int main(int argc, char **argv){ int m, s; struct soap soap; soap_init(&soap); //poner la IP y PUERTO del servidor m = soap_bind(&soap, "127.0.0.1", 9999, 100); if (m < 0){ soap_print_fault(&soap, stderr); exit( 1); for ( ; ; ){ s = soap_accept(&soap); if (s < 0){ soap_print_fault(&soap, stderr); exit( 1); else{ if (soap_serve(&soap)!= SOAP_OK) soap_print_fault(&soap, stderr); else cout << "servido NODO="<<accede_nodo<<" ELEMS="<<almacen.size()<<endl; soap_destroy(&soap); soap_end(&soap); return 0; // el cliente envia al servidor => insertar en el vector int ns enviar(struct soap *soap, unsigned nodo, std::string cadena, std::string &resultado){ accede_nodo = nodo; almacen.push_back( cadena ); resultado = "enviar"; return SOAP_OK; 3

// el cliente recibe del servidor => sacar del vector y devolverlo int ns recibir(struct soap *soap, unsigned nodo, std::string &resultado){ accede_nodo = nodo; if( almacen.size() > 0 ){ resultado = (string)(almacen[0]); almacen.erase( almacen.begin(), almacen.begin()+1 ); else{ resultado="<vacio>"; return SOAP_OK; Para compilar el servidor.c debemos usar la siguiente orden: g++ Wall O2 I.. o servidor servidor.c soapc.cpp soapserver.cpp../stdsoap2.cpp lm Por último sólo nos queda crear un Makefile para automatizar la compilación de nuestros programas (así evitaremos compilar por separado el fichero funciones.h, cliente.c y servidor.c). Nuestro Makefile tendrá el siguiente aspecto: GSOAP=../bin/soapcpp2 SOAPH=../stdsoap2.h SOAPC=../stdsoap2.c SOAPCPP=../stdsoap2.cpp CC=g++ CPP=g++ LIBS= COFLAGS= O2 CWFLAGS= Wall CIFLAGS= I.. CMFLAGS= CFLAGS= $(CWFLAGS) $(COFLAGS) $(CIFLAGS) $(CMFLAGS) all: cliente servidor cliente: funciones.h cliente.c $(SOAPH) $(SOAPCPP) $(GSOAP) funciones.h $(LIBS) servidor: $(LIBS) clean: $(CC) $(CFLAGS) o cliente cliente.c soapc.cpp soapclient.cpp $(SOAPCPP) funciones.h servidor.c $(SOAPH) $(SOAPCPP) $(GSOAP) funciones.h $(CC) $(CFLAGS) o servidor servidor.c soapc.cpp soapserver.cpp $(SOAPCPP) lm rm f *.o soaph.h soapstub.h soapc.cpp soapc.c soapclient.cpp soapclient.c soapserver.cpp soapserver.c soap*proxy.h distclean: rm f *.o *.wsdl *.xsd *.xml *.nsmap *.log soaph.h soapstub.h soapc.cpp soapc.c soapclient.cpp soapclient.c soapserver.cpp soapserver.c soap*proxy.h cliente servidor soapclientlib.cpp soapserverlib.cpp soapfuncionesobject.h soapfuncionesproxy.h Ya tenemos los cuatro ficheros necesarios para hacer un ejemplo básico: :~/progs/gsoap/ejemplo_basico$ ls l total 16 rwx 1 pedro pedro 409 2006 06 15 13:01 funciones.h rwx 1 pedro pedro 1170 2006 06 15 13:01 cliente.c rwx 1 pedro pedro 840 2006 06 15 13:01 Makefile rwx 1 pedro pedro 1523 2006 06 15 13:01 servidor.c Sólo nos queda compilar los ficheros funciones.h, cliente.c y servidor.c make cliente 4

make servidor Ahora, en la máquina que hará de servidor ejecutamos el programa servidor y en una o varias máquinas ejecutamos el programa cliente En el ejemplo que sigue, hemos utilizado una sola máquina para hacer de servidor y cliente. Así pues, tendremos dos shell: en el primero se ejecuta el servidor y en la segunda el cliente. Podríamos tener varios clientes, y lo único que deberíamos tener en cuenta es que cada vez que un cliente se comunica con el servidor, debe usar su número de nodo como identificador. Si en el segundo shell ejecutamos:./cliente enviar primera 1 el servidor recibe la cadena primera desde el nodo identificado como 1 y con la orden de el cliente envía un valor al servidor. 5

Conforme el servidor recibe valores, los inserta en la cola que mantiene internamente. En cada petición de acceso que recibe va mostrando el nodo que hace la petición y el número de elementos en la cola en ese momento. En la siguiente captura, el servidor ha recibido dos peticiones para almacenar lo que el cliente 1 ha enviado. El cliente ha enviado dos veces y está listo para enviar la tercera: Si algún cliente comienza a hacer peticiones para que el servidor extraiga valores de la cola y los envíe al cliente:./cliente recibir 1 Veremos que el servidor muestra el número de cliente que ha accedido y el número de elementos en la cola disminuye. De la misma forma, el cliente muestra la cadena que ha recibido desde el servidor: 6

Por último, volviendo al código fuente del servidor.c, según la programación de la función int ns recibir(struct soap *soap, unsigned nodo, std::string &resultado) vemos que si la cola del servidor se vacía y sigue recibiendo peticiones para extraer valores y enviarlos al cliente, la cadena devuelta es vacio 7

8