Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y...

66
UNIVERSIDAD DE MÁLAGA ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA MASTER OFICIAL EN SISTEMAS DE INFORMACIÓN AUDIOVISUAL Memoria del Proyecto Fin de Máster Título GESTIÓN Y EJECUCIÓN REMOTA DE ALGORITMOS DE PROCESAMIENTO MULTIMEDIA MEDIANTE SERVICIOS WEB Realizado por Francisco Valdivia Herrera Dirigido por Julián Ramos Cózar Curso 2009/2010 Fecha 23 de septiembre de 2010 Firma alumno Firma Director(es)

Transcript of Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y...

Page 1: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

UNIVERSIDAD DE MÁLAGA

ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA

MASTER OFICIAL EN SISTEMAS DE INFORMACIÓN AUDIOVISUAL

Memoria del Proyecto Fin de Máster

Título

GESTIÓN Y EJECUCIÓN REMOTA DE ALGORITMOS DE PROCESAMIENTO MULTIMEDIA MEDIANTE SERVICIOS WEB

Realizado por

Francisco Valdivia Herrera

Dirigido por

Julián Ramos Cózar

Curso

2009/2010

Fecha

23 de septiembre de 2010

Firma alumno Firma Director(es)

Page 2: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar
Page 3: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

Quiero dedicar este proyecto a Ángela por su apoyo constante, y a mi familia y amigos, por animarme siempre, con mención

especial a mi abuela, por ayudarme a ser quien soy. También les doy las gracias a todos aquellos profesores que durante mis

años de estudio han sabido transmitirme sus conocimientos.

Page 4: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar
Page 5: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

Índice general 1. Introducción 1

1.1. Servicios web 1

1.2. Objetivos 4

1.3. Organización del proyecto 5

2. Configuración de Windows XP SP2 y Windows Server 2003 6

2.1. Windows XP SP2 6

2.2. Windows Server 2003 7

2.2.1. Instalar IIS 7

2.2.2. Instalar SQL Server 2005 9

2.2.3. Instalar librerías de Matlab 9

2.2.4. Conexión cliente-servidor 10

3. Primeros pasos en el proyecto 11

3.1. Crear aplicación cliente. Windows Forms 11

3.2. Crear servicio web. ASP .Net 13

3.3. Referenciar los servicios web en la aplicación cliente 15

3.4. Crear la base de datos 17

3.4.1. Estructura de la base de datos 17

3.4.1.1. Tabla usuarios 17

3.4.1.2. Tabla algoritmos 17

3.4.1.3. Tabla archivos 18

3.4.1.4. Tabla archivosResultantes 18

3.4.1.5. Relación entre tablas 18

3.4.2. Crear base de datos y tablas 19

3.4.3. Crear sesión para acceder a la base de datos 20

4. Programación de la aplicación 21

4.1. Diseño de la aplicación 21

4.2. Inicio y pantalla principal 23

4.2.1. Esquema de los formularios 23

4.2.2. Inicio de sesión 23

4.2.2.1. Alta de usuario 23

4.2.2.2. Iniciar sesión 25

4.2.3. Pantalla principal, Ejecutor de algoritmos 26

4.3. Usuarios 27

4.3.1. Esquema de los formularios 27

Page 6: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.3.2. Eliminar y modificar usuario 28

4.4. Algoritmos 30

4.4.1. Esquema de los formularios 30

4.4.2. Subir algoritmo 32

4.4.3. Eliminar algoritmo 34

4.4.4. Seleccionar algoritmo y ejecutar 36

4.4.4.1. Ejecutar algoritmo 36

4.5. Archivos 40

4.5.1. Esquema de los formularios 40

4.5.2. Subir archivo 41

4.5.3. Eliminar o modificar archivos 41

4.5.3.1. Descargar archivos 41

4.5.3.2. Previsualizar archivos 42

4.5.4. Buscar archivos 43

4.5.5. Gestionar archivos resultantes 44

4.6. Crear instalable 44

5. Ejemplo de uso de la aplicación 46

6. Conclusiones 53

6.1. Conclusión 53

6.2. Trabajos futuros 53

Referencias 55

Page 7: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

Índice de figuras 1.1 Proceso de los estándares del servidor web 3

1.2. Recorrido de los mensajes SOAP del cliente al servidor 4

2.1. Visual Studio usado para el proyecto 6

2.2. Instalación del IIS 7

2.3. Servidor de aplicaciones 8

2.4. SQLServer utilizado para el proyecto 9

3.1. Crear aplicación Windows Forms 11

3.2. Toolbox y Properties 12

3.3. Crear Web Site 13

3.4. Crear Web Service 14

3.5. Copiar Web Site en el servidor 15

3.6. Crear referencia 16

3.7. Diagrama de la Base de datos 19

3.8. Crear tabla 20

4.1. Administrador 21

4.2. Desarrollador 22

4.3. Ejecutor 22

4.4. Esquema de formularios del inicio y la pantalla principal 23

4.5. Esquema de formularios de Usuarios 28

4.6. Esquema de formularios de Algoritmos 31

4.7. Esquema de formularios de Archivos 41

4.8. Añadir herramienta Windows Media Player 44

5.1. Configuración de conexión 47

5.2. Subir algoritmo 49

5.3. Subir archivo 50

5.4. Ejecutar 51

5.5. Buscar archivos resultantes 51

5.6. Descargar 52

5.7. Mover a archivos 52

5.8. Buscar archivos 53

Page 8: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar
Page 9: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 1: INTRODUCCIÓN

1

CAPÍTULO 1:

Introducción Hoy en día, los servicios web son la base y a la vez la herramienta con la que trabajan la

mayoría de las empresas de desarrollo de software a la hora de realizar sus proyectos.

Éstos ponen a disposición del cliente métodos y funciones que se encuentran en otros

servidores, de forma que permite una total intercomunicación en Internet de máquinas y

procesos de negocio.

En el presente proyecto, se pretende enseñar cómo diseñar servicios web específicos para que

una aplicación, que necesita tener una base de datos de algoritmos de procesamiento

multimedia, pueda acceder a estos algoritmos y ejecutarlos remotamente, utilizando si es preciso

archivos de otra tabla de la base de datos (imágenes, videos, audios,…).

1.1. Servicios web

Inicialmente, la informática empezó con programas implementados en grandes computadoras

y en los que un solo usuario podría interactuar. Más adelante, estas primeras aplicaciones

permitieron su uso a varios usuarios. Años después, surgió la arquitectura cliente-servidor, que

planteaba dividir todo el programa en dos partes, una que permitiera la interacción con el

usuario, y otra donde se procesaría la información. Con esto se planteó también la posibilidad de

que cada una de esas partes pudiesen estar alojadas en dos ordenadores distintos. Cada vez iba

avanzando más la tecnología y surgió Internet y con ésta llegó la tecnología de servicio web,

permitiendo que el ordenador no fuese el único centro de procesamiento, sino un ‘contenedor’

de servicios de muchas aplicaciones distribuidas en Internet.

Los servicios web (a lo largo de este documento también se llamarán web services) se crearon

para permitir a distintas aplicaciones trabajar de forma colectiva, donde cada una tiene su

software distribuido en distintos servidores. De esta forma, una aplicación puede invocar a

métodos que se encuentren en un web service alojado en un servidor a kilómetros de distancia,

éste procesa estas funciones y le devuelve el resultado a la aplicación ‘llamante’.

Además, una de las grandes características de los servicios web es que permiten la

interoperabilidad, de forma que un servicio remoto pueda ser utilizado por clientes de otras

Page 10: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

1.1 SERVICIOS WEB

2

plataformas, con aplicaciones programadas en lenguajes distintos e incluso por cualquier

infraestructura de componentes distribuidos (un servicio C# podría ser utilizado por una

aplicación Java, por ejemplo), siempre que estos elementos sepan comunicarse mediantes las

interfaces que los servicios proveen.

Para poder crear esta comunicación heterogénea se usa la arquitectura orientada a servicios

(Service Oriented Architecture - SOA) cuya instancia particular son los servicios web XML.

Éste contiene una serie de estándares que permiten la comunicación mediante la tecnología

XML y usando la red (HTTP). Los estándares son los siguientes:

- SOAP (Simple Object Access Protocol) .- Este protocolo de transporte permite la

comunicación del cliente con el servidor mediante mensajes en lenguaje XML.

- WSDL (Web Services Description Language) .- Es un lenguaje de descripción de

servicios, que el proveedor utiliza para especificar las funciones que ofrece el servicio y

describir la forma de comunicación (requisitos del protocolo y la nomenclatura de los

mensajes) para interactuar con estas funciones.

- UDDI (Universal Description, Discovery and Integration) .- Es un directorio que

contiene los servicios web y ayuda a localizarlos. Este estándar no es necesario si el

cliente ya conoce la localización del servicio que quiere invocar.

En la figura 1.1 se muestra un esquema de cómo actúan estos estándares. En el paso 1 el cliente

solicita un servicio, el cual se va a buscar en el directorio de servicios UDDI (a este servidor se

accede usando SOAP también). Existen UDDI públicos y privados. Una vez encontrado el

servicio, el servidor devuelve una URL donde se encuentra el archivo que contiene el servicio.

En el paso 2 el cliente solicita al servidor que contiene el servicio que le envía el archivo, y este

se lo devuelve. Los pasos de búsqueda y descubrimiento pueden ser omitidos si el cliente ya

conoce de antemano el WSDL que le informa de la localización y definición del servicio. En el

paso 3 el cliente obtiene información de cómo interactuar con el servicio gracias al WSDL. Por

último, en el paso 4 ya se pueden comunicar cliente y servidor mediante mensajes SOAP,

enviados por HTTP.

Page 11: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 1: INTRODUCCIÓN

3

Figura 1.1. Proceso de los estándares del servidor web

Un ejemplo simple de este último paso sería el siguiente: en un servidor hay alojado un servicio

web con un método que hace la suma entre dos números especificados por parámetro. Por otra

lado, un usuario desde su ordenador desea llamar a esa función, le pasa 2 números y llama al

método. Para el usuario esto ha sido como invocar un método localmente, pero en realidad lo ha

hecho remotamente. Lo que ha hecho ha sido enviar por la red una orden serializada (luego se

verá lo que significa este concepto) como mensaje SOAP, ordenando que se ejecute la función

con los parámetros especificados, y el servidor devuelve otro mensaje SOAP con el resultado de

la suma.

En la figura 1.2 se encuentra este ejemplo de forma más detallada y técnica. Inicialmente, para

acceder al servicio el cliente instancia un nuevo objeto proxy del servicio Web XML. Este

objeto es local. El cliente ordena la ejecución de un método de la clase local proxy. Este objeto

representa al web service, y el cliente lo invoca como si de un método local se tratase, aunque

detrás se esconda el acceso remoto al servicio. En el paso 1 el proxy convierte los argumentos

necesarios para la llamada al método a lenguaje XML (a este proceso se le llama serializar), lo

empaqueta en un mensaje SOAP y lo envía por HTTP hasta el otro extremo, el servidor. En el

paso 2, el servidor web recibe el mensaje, lo deserializa y lo convierte a binario que es como lo

entenderá el servicio web. Éste crea una nueva instancia de la clase que implementa el servicio

y llama al método pasándole como argumentos el mensaje deseralizado. La función del servicio

Page 12: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

1.1. OBJETIVOS

4

eb se ejecuta, genera los resultados y los devuelve. En el paso 3 la infraestructura del servicio

web serializa los resultados obtenidos, los encapsula en un mensaje SOAP y lo manda por la red

al cliente. Finalmente, en el paso 4, el proxy del cliente deserializa el mensaje recibido, obtiene

los resultados y se los devuelve al cliente.

Figura 1.2. Recorrido de los mensajes SOAP del cliente al servidor

Para ver cómo se hace todo este proceso en la aplicación, ir al Capítulo 3 de este documento,

puntos 3.1, 3.2 y 3.3.

Los servicios web suponen una revolución tanto en los negocios como en las tecnologías de la

información. Organizaciones como W3C, Oasis, Liberty Alliance o WS-I, y fabricantes como

Microsoft o IBM saben de su importancia, y compiten para liderar y dirigir el proceso de

estandarización de los servicios web.

En este proyecto se va a utilizar la tecnología de Microsoft, que usa el protocolo de

comunicación comentado anteriormente, SOAP. Se usará también el entorno de trabajo Visual

Studio 2008, y se programará en C#. [1][2]

1.2. Objetivos

Como se explicó levemente en líneas anteriores, el proyecto consiste en crear una aplicación

cliente-servidor, donde distintos tipos de usuarios, con distintos tipos de privilegios, puedan

seleccionar de una base de datos externa, algoritmos de procesamiento multimedia

(procesamiento de imágenes, video, audio,…), y ejecutarlos remotamente para probarlos y

Page 13: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 1: INTRODUCCIÓN

5

obtener resultados. Con estos resultados, el usuario puede visualizarlos, descargarlos,

eliminarlos o guardarlos en la base de datos para su posterior análisis. Según el tipo de usuario,

éste puede subir al servidor sus propios archivos para que los procese el algoritmo que él elija e

incluso puede aportar los algoritmos diseñados por él, para que lo usen los demás usuarios. Los

algoritmos son archivos .exe que el usuario habrá generado previamente y que subirá a la

aplicación. Estos algoritmos podrán ser programados con Matlab o C++, cumpliendo con una

serie de requisitos que se verán posteriormente. Por otro lado, existe el usuario Administrador,

que puede gestionar todos los archivos, todos los algoritmos y todos los usuarios registrados.

Todo esto bajo una aplicación que el cliente ejecuta limpiamente, sin que tenga que tener nada

instalado en su ordenador, y sin que requiera de una computadora potente para realizar los

complejos cálculos numéricos que puedan llevarse a cabo en los algoritmos de procesamiento

de imágenes, de audio o de video que quiera ejecutar.

Las herramientas necesarias para llevar a cabo el proyecto son:

- Sistema operativo Windows Server 2003

- Sistema operativo Windows XP SP2

- Visual Studio 2008

- SQL Server 2005

- Matlab Runtime Libraries

Microsoft proporciona a los estudiantes versiones gratuitas y completas de algunas de estas

herramientas y más actualizadas. Se pueden descargar en www.dreamspark.com.

El objetivo, pues, de este documento consiste en mostrar como diseñar, desarrollar y programar

esta aplicación, con la intención de que pueda servir para futuras consultas e incluso para que se

pueda utilizar como herramienta en la docencia o en la investigación.

1.3. Organización del proyecto

El presente documento va a mostrar cómo se ha desarrollado el proyecto. A lo largo de sus

páginas se comentará cómo configurar los programas necesarios, el funcionamiento de cada una

de las opciones, la estructura de la base de datos y se detallarán puntos importantes de

programación.

Page 14: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

2.1. WINDOWS XP SP2

6

CAPÍTULO 2:

Configuración de Windows XP SP2 y

Windows Server 2003 Antes de empezar a programar, se necesita configurar los sistemas operativos para que pueda

funcionar todo correctamente. Se va a utilizar un ordenador con un Windows XP SP2 para

albergar la aplicación cliente, y un ordenador con Windows Server 2003 para la aplicación

servidor. Para hacer más sencillo el desarrollo se ha utilizado VMWare Workstation para

virtualizar la máquina del servidor, de forma que en un mismo ordenador se encuentran dos

sistemas operativos , unidos con una conexión virtual y local. En un caso real, cada ordenador

estaría en un lugar distinto y se comunicarían por internet.

2.1. Windows XP SP2

En este sistema operativo es donde el programador va a desarrollar casi todo el trabajo. Para

ello necesitará instalar Visual Studio Team System 2008 Arquitecture Edition (Figura 2.1.),

donde va a usar ASP.Net y lenguaje C#.

Figura 2.1. Visual Studio usado para el proyecto

Page 15: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 2: CONFIGURACIÓN

7

2.2. Windows Server 2003

En el servidor se encuentran los servicios web, la base de datos y las librerías de Matlab. Por

lo tanto, es el servidor el que se encargará de gestionar y de procesar todos los datos.

2.2.1. Instalar IIS

En primer lugar, hay que instalar Internet Information Services (IIS) para tener los servicios

FTP, SMTP, NNTP y HTTP/HTTPS. Esto se hace en Inicio Panel de controlAgregar o

quitar programas. Elegir ‘Agregar o quitar componentes de Windows’, y dentro seleccionar

‘Servidor de aplicaciones’. Pulsar en Detalles y en la siguiente ventana aparecerá como en la

figura 2.2:

Figura 2.2. Instalación del IIS

Seleccionar ‘Instalar Internet Information Services (IIS)’ y pulsar en Detalles. Por defecto, en la

ventana siguiente estarán marcados todos los servicios necesarios, aunque el servicio de FTP

(para descargar y subir archivos) suele ser opcional, por lo que puede que no esté marcado. Por

lo tanto, se marca y se pulsa Aceptar. Se vuelve a pulsar Aceptar y Siguiente, y cuando termine

el proceso de instalación, pulsar en Finalizar.

Para configurar el IIS, cuando se inició Windows Server, se abrió una ventana titulada

‘Administre su servidor’ (también hay un icono en el escritorio). Ahí hay que pulsar en

Page 16: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

2.2. WINDOWS SERVER 2003

8

‘Administrar este servidor de aplicación’ y elegir ‘Administrador de Internet Information

Services (IIS)’. Aquí se encuentran los servicios necesarios para la aplicación (figura 2.3). En la

propia instalación ya se han creado Sitios Web y Sitios FTP predeterminados, y estos serán los

que se van a utilizar para la aplicación, así que, en principio, no se va a configurar nada, aunque

es bueno conocer varios aspectos:

- Si se pulsa con el segundo botón en ‘Sitio web predeterminado’ y se elige

‘Propiedades’, ahí se encuentran las características del sitio web. Comprobar en la

pestaña ‘ASP.Net’ que la versión de ASP es igual o superior a la 2.0, de lo contrario, no

soportaría trabajar con Web services. También es bueno saber que el directorio donde se

van a guardar todos los Web services, se puede modificar en la pestaña ‘Directorio

particular’. El directorio que se va a usar por defecto es c:\inetpub\wwwroot.

- Si se pulsa con el segundo botón en ‘Sitio FTP predeterminado’ y se elige

‘Propiedades’, ahí se encuentran las características del servicio FTP. En la pestaña

‘Sitio FTP’ aparecerá por defecto la IP del ordenador, en nuestro caso será

192.168.199.100. Además, es importante que en la pestaña ‘Directorio particular’ estén

marcadas las casillas Lectura y Registrar visitas (para permitir descargar archivos) y la

casilla Escritura (para permitir subir archivos). Aquí también se puede modificar el

lugar donde se guardarán los archivos, por defecto es c:\inetpub\ftproot.

Figura 2.3. Servidor de aplicaciones

Page 17: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

2.2. WINDOWS SERVER 2003

9

2.2.2. Instalar SQL Server 2005

Con SQL Server 2005 (figura 2.4.) se va a administrar la base de datos a la que accede la

aplicación. En el presente proyecto no se va a explicar el proceso de instalación, ya que es

sencillo y no es el propósito de este documento, solo tener en cuenta que cuando el proceso pida

elegir entre dos modos de autentificación, la más segura es elegir la autentificación Windows,

ya que de este modo, en programas clientes que conecten con el servidor se evita el envío de

información privada por la red, que puede ser interceptada y utilizada para dañar el sistema.

Figura 2.4. SQL Server utilizado para el proyecto

2.2.3. Instalar librerías de Matlab

Para que se puedan ejecutar archivos .exe basados en algoritmos programados en Matlab, y

sin que sea necesario tener instalado Matlab en sí, es necesario instalar unas librerías que

contienen toda la funcionalidad de Matlab para compilar el código. Éstas son las llamadas

Page 18: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

2.2. WINDOWS SERVER 2003

10

Matlab Runtime Libraries [6][8], que están pensadas para ejecutar aplicaciones stand alone.

Están empaquetadas en el instalador MCRInstaller.exe. Para obtenerlo, es necesario tener una

licencia de Matlab y buscar el archivo en la carpeta de instalación del programa (por lo tanto,

tiene que estar instalado en ese ordenador o en otro cualquiera, para poder acceder al archivo).

Por defecto se localiza en la carpeta …\MATLAB\R2007a\toolbox\compiler\deploy\win32\.

Una vez instalado ya se podrán ejecutar algoritmos con código Matlab. Más adelante, se

explicará como generar un .exe del algoritmo diseñado, y como invocar a ese ejecutable desde

la aplicación con C#.

2.2.4. Conexión cliente-servidor

Esta aplicación se conecta al servidor mediante su IP. El usuario especifica esta IP al iniciar

el programa, en la opción ‘Configurar conexión’.

Para hacer todas las pruebas, se ha utilizado Windows Server 2003, en una máquina virtual.

Para conectar la aplicación que está en la máquina local, a la máquina virtual, basta con

configurar las opciones de red de esta máquina virtual a modo Bridge. Después, dentro de la

aplicación, entrar en la opción ‘Configurar conexión’ e introducir la IP 192.168.199.100 (que es

la IP que tiene el servidor virtual). En el caso de que se quiera alojar los servicios web en otro

servidor, se tendrá que configurar la red de este servidor de forma apropiada para que pueda

conectarse la aplicación mediante su IP.

Se utiliza el método de introducir la IP directamente para hacer que, de cara al lector, se vea con

más claridad cuál es la IP y no entrar en temas de conectividad. Sin embargo, este método tiene

sus inconvenientes, ya que si se usa esta opción, y de repente cambia el direccionamiento IP del

servidor, el fichero de configuración queda obsoleto, y el cliente se quejará porque ha perdido la

conectividad. Otro caso sería si se estuviese pasando a través de un cortafuegos con NAT, de

forma que la IP del servidor que se ve en la red segura (detrás del cortafuegos) no coincide con

la que se ve en la red no segura (delante del cortafuegos), supondría otro fallo al conectar. Y

otro último caso, en el que el servidor esté alojado en una máquina configurada en un cluster

con failover, que tiende a usar el mismo nombre DNS para dos ordenadores con dos IPs

distintas y usar DNS dinámico (round-robin) para hacer el balanceo de carga. Lo que significa

que van contestando alternativamente dos direcciones IP distintas a las peticiones de conexión,

y nunca se sabe a priori cual de las dos IPs va a contestar.

Por lo tanto, la mejor forma para identificar al servidor es mediante el uso de un nombre

cualificado y su posterior resolución con el servidor de nombre DNS (por ejemplo,

servidor.master.net).

Page 19: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 3: PRIMEROS PASOS EN EL PROYECTO

11

CAPÍTULO 3:

Primeros pasos en el proyecto Ha llegado el momento de crear la aplicación. En primer lugar, se creará un nuevo Windows

Form donde estará toda la funcionalidad del cliente, y después se programarán los Web services

a los que podrá acceder ese cliente. Por último, se diseñará toda la base de datos necesaria, con

sus tablas relacionadas.

3.1. Crear aplicación cliente. Windows Forms

Abrir Visual Studio 2008, crear un nuevo proyecto de tipo Windows Forms Applications y

llamarlo cliente (Figura 3.1).

Figura 3.1. Crear aplicación Windows Forms

Se creará el nuevo proyecto con un formulario vacío inicial llamado por defecto Form1.cs, cuyo

nombre se va a cambiar a inicio.cs (Visual Studio cambiará también el nombre en todas sus

referencias, automáticamente). Si fuese necesario cambiar el formulario inicial por otro creado

Page 20: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

3.1 CREAR APLICACIÓN CLIENTE

12

posteriormente, habría que cambiar el argumento de la llamada a Application.Run en el fichero

Programa.cs:

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new formularioNuevo());

Todo formulario genera 2 archivos principalmente: Form1.cs, donde está el código en el que se

programará la funcionalidad del formulario, y Form1.Designer.cs, donde se encuentran todo el

código que genera el diseño del formulario. Este último apenas se va a modificar, aunque habrá

momentos en los que se deba añadir alguna línea de código.

Windows Forms es, como indica su nombre, un formulario donde poner campos de texto,

botones y demás funcionalidades. Estas herramientas se encuentran en el toolbox de Visual

Studio. Basta con seleccionar la que se quiera utilizar y arrastrarla hacia el formulario. Cada

herramienta tiene sus propiedades de diseño, las cuales se pueden modificar en la pestaña

Properties. En la figura 3.2 se pueden ver estos dos apartados:

Figura 3.2. Toolbox y Properties

Para esta aplicación las herramientas que se van a utilizar son: Button, CheckBox, ComboBox,

DateTimePicker, Label, TextBox, DataGridView, GroupBox, Tooltip y Menustrip.

Page 21: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 3: PRIMEROS PASOS EN EL PROYECTO

13

Ya está el proyecto creado, ahora se van a crear los Web services a los que va a hacer referencia

este proyecto.

3.2. Crear servicios Web. ASP.Net

Las funciones de las que dispondrá la aplicación cliente están clasificadas en tres grupos, las

que gestionarán usuarios, las que gestionarán algoritmos, y las que ejecutarán algoritmos y

gestionarán archivos. Por lo tanto, cada uno de estos grupos de funciones forman tres Servicios

Web: WSUsuarios, WSAlgoritmos y WSArchivos, respectivamente.

Los servicios Web deben estar en el servidor. Visual Studio permite crearlos localmente y

después copiarlos al servidor. Así pues, se van a crear en Visual Studio 2008, en Windows XP y

se copiarán en el servidor posteriormente.

Para crear un servicio web, primero hay que proporcionarle un lugar donde alojarse, un Web

Site. Para ello, ir a Visual Studio y crear un nuevo Web Site de tipo ASP.NET Web Service, y

ponerle el nombre WSiteUsuarios (Figura 3.3).

Figura 3.3. Crear Web Site

Este proceso creará el Web Site, generando varios archivos por defecto, entre ellos Service.cs y

Service.asmx. Estos hay que borrarlos, y se va a crear un Web Service nuevo. Para ello, pulsar

Page 22: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

3.2 CREAR SERVICIOS WEB

14

con el segundo botón en el nombre del WebSite y pulsar Add New Item, seleccionar Web

Service y llamarlo WSUsuarios (figura 3.4).

Figura 3.4. Crear Web Service

Esto generará el archivo WSUsuarios.asmx, que es el Web service, y su código asociado

WSUsuarios.cs, que es donde se escribirá el código con todas las funciones. Por defecto aparece

la función HelloWorld, que se borrará cuando se hagan las demás.

Ahora, se va a copiar el Web Service en el servidor. Para ello, ir a Web siteCopy Web site.

Dentro, pulsar en Connect, seleccionar Remote Site y escribir la URL donde se guardará, con la

IP del servidor (en este caso 192.168.199.100) y la ruta (figura 3.5).

Page 23: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 3: PRIMEROS PASOS EN EL PROYECTO

15

Figura 3.5. Copiar Web Site en el servidor

Aparecerá un mensaje notificando que la ruta no existe y que si se quiere crear, pulsar Sí. Pedirá

que se inserte el usuario y contraseña para entrar al servidor (la misma que al conectarse al

Windows Server 2003). Una vez conectado, hay que seleccionar todos los archivos del lado

izquierdo y copiarlo en el derecho. El servicio web se copiará en la carpeta del servidor que se

configuró anteriormente, en c:\inetpub\wwwroot.

Para los demás servicios web (WSAlgoritmos y WSArchivos) hay que realizar los mismos

pasos. Una vez creados, el siguiente punto será referenciarlos en la aplicación cliente.

3.3. Referenciar los servicios web en la aplicación

cliente.

Para que el cliente pueda usar las funciones/métodos de los web services, es necesario

referenciarlos en la aplicación. Para ello, hay que pulsar con el segundo botón en Cliente, y

pulsar Add Service Reference. Ahí dentro, pulsar Advanced, luego Add Web Reference y a

continuación escribir la URL que se puso al copiar el Web Site. Pulsar Go y todas las funciones

del servicio (en la figura 3.6 aparecen todas las que se van a crear a lo largo del proyecto,

inicialmente solo estará HelloWorld). Escribir el nombre de la referencia y pulsar Add

Reference.

Page 24: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

3.3. REFERENCIAR LOS SERVICIOS WEB EN LA APLICACIÓN CLIENTE

16

Figura 3.6. Crear referencia

Estos pasos hay que repetirlos para los demás servicios web.

Con la referencia ya establecida, para poder utilizar la función HelloWorld en el formulario que

se creó anteriormente por ejemplo, en el archivo inicio.cs se crea una nueva instancia del proxy

del servicio web, de esta forma:

namespace cliente

{

public partial class inicio : Form

{

WSUsuarios.WSUsuarios servicio = new cliente.WSUsuarios.WSUsuarios();

Y en el código de cualquier botón u otro objeto se podría llamar a la función de esta forma:

servicio.HelloWorld();

Page 25: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 3: PRIMEROS PASOS EN EL PROYECTO

17

3.4. Crear la base de datos

3.4.1. Estructura de la base de datos

En la base de datos, es donde se registrarán todos los usuarios, los algoritmos y los archivos.

Para los usuarios y los algoritmos se creará una tabla por cada uno y para archivos se crearán

dos, una para los archivos que suba el usuario y que se utilicen como parámetros para ejecutar el

algoritmo y otra para guardar los archivos resultantes de la ejecución. Cada elemento irá

identificado por su id única.

El concepto de una base de datos es la de guardar registros en tablas, pero también es el de

guardar físicamente los archivos que están registrados. Por eso, en el servidor, en el directorio

ftproot, se van a crear los directorios Algoritmos, Archivos y ArchivosResultantes, para guardar

ahí todo lo necesario. Para que funcione bien el acceso a estos datos, es necesario dar todos los

privilegios al usuario, solo en estas 3 carpetas.

A continuación se detallan los campos que contienen estas tablas, y el tipo de dato que tiene

cada uno, y en el siguiente punto se especifican las relaciones entre las tablas y el diagrama

resultante:

3.4.1.1. Tabla usuarios

id int

usuario nvarchar(50)

password nvarchar(MAX)

tipo nvarchar(50) Tipos: Administrador, Desarrollador o Ejecutor

fecha datetime Fecha del momento del registro

3.4.1.2. Tabla algoritmos

id_alg int

nombre varchar(50)

descripción varchar(200)

ejecutable varchar(50)

numParametros int

parámetros varchar(MAX)

directorio varchar(54) Directorio donde se guarda el algoritmo

archivos_subidos varchar(200) Lista de archivos subidos

Page 26: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

3.4 CREAR LA BASE DE DATOS

18

id_usuario int Usuario que subió el algoritmo

fecha datetime Fecha de creación del algoritmo

3.4.1.3. Tabla archivos

idArchivo int

nombre varchar(100)

descripción varchar(200)

idAlgoritmo int Algoritmo que se le suela aplicar al archivo

tipo varchar(6) Tipos: Imagen, video, audio, texto, otros

idUsuario int Usuario que sube el archivo

fecha datetime Fecha de creación del archivo

3.4.1.4. Tabla archivosResultantes

idArcR int

nombreArcR varchar(100)

directorioArcR varchar(100)

fechaArcR datetime

idAlg int

idUsu int

3.4.1.5. Relación entre tablas

Un usuario puede subir varios algoritmos, varios archivos y puede generar varios archivos

resultantes, pero un algoritmo, un archivo o un archivo resultante solo puede tener un usuario,

por lo tanto es una relación uno a muchos.

La relación entre algoritmos y archivos también es de uno a muchos

En la figura 3.7 se muestra el diagrama resultante.

Page 27: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 3: PRIMEROS PASOS EN EL PROYECTO

19

Figura 3.7. Diagrama de la Base de Datos

3.4.2. Crear base de datos y tablas

Para crear toda esta estructura, primero hay que crear la base de datos. Entrar en SQL Server

2005, e iniciar sesión en el caso de haber especificado contraseña en la instalación. Pulsar con el

segundo botón en Base de datos y seleccionar Nueva base de datos. Especificar su nombre (en

este caso ‘BDProyecto’) y pulsar Aceptar.

Ahora se van a crear las tablas. Para ello, entrar en la base de datos creada, pulsar con el

segundo botón en Tablas y seleccionar Nueva tabla. Aparecerán unas columnas donde poner el

nombre del campo y su tipo de dato. Para poner la clave primaria, pulsar con el segundo botón

en el campo de la id y seleccionar Establecer clave primaria, y para que tome un valor y se

incremente cada vez que se inserte un registro, ir a la pestaña Propiedades de columna y elegir

Sí en el apartado Especificación de identidad. Finalmente, a la derecha de la ventana, en

Propiedades se puede especificar el nombre de la tabla (figura 3.8).

Page 28: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

3.4 CREAR LA BASE DE DATOS

20

Figura 3.8. Crear tabla

Para relacionar las tablas de la forma en que aparece en la figura 3.7, hay que ir a Diagramas de

base de datos y seleccionar Nuevo diagrama de base de datos. A continuación aparecerá una

ventana con todas las tablas que se han creado, que se añadirán al diagrama. Para relacionar la

id de Usuario con idUsu de Archivos, por ejemplo, pulsar en id y arrastrar hasta idUsu.

Aparecerá una ventana para elegir el tipo de relación, en este caso es uno a muchos, por lo que

se le da a Aceptar sin modificar nada.

3.4.3. Crear sesión para acceder a la base de datos

Por último, para que a esta base de datos solo pueda acceder el administrador y el usuario que

utilice la aplicación, se va a crear una sesión. Para ello, ir a Seguridad, Inicios de sesión y

seleccionar Nuevo inicio de sesión. Escribir nombre de la sesión y el tipo Autentificación de

SQLServer. En este caso, el usuario será proyecto y la contraseña proyecto. Elegir la base de

datos a la que se le va a asignar esta sesión y pulsar en Asignación de usuarios a la derecha, para

establecer los privilegios del usuario. Elegir el usuario y seleccionar db_datareader y

db_datawriter. Pulsar Aceptar y ya estará creada la sesión.

Page 29: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

21

CAPÍTULO 4:

Programación de la aplicación En este capítulo se va a mostrar cómo está estructurado y programado todo el conjunto de

formularios. Se enseñará el código necesario para mostrar cómo se ha programado ciertos

aspectos de la aplicación.

4.1. Diseño de la aplicación

La aplicación cambiará de opciones y de aspecto según el usuario que haya iniciado sesión.

Todos estos formularios se han creado usando las herramientas de toolbox de Visual Studio

comentadas anteriormente.

Existen tres tipos de usuarios que pueden utilizar la aplicación, que se diferenciarán por los

permisos y privilegios de cada uno. A continuación se detallan:

- Administrador.- Control total sobre la aplicación (figura 4.1):

Figura 4.1. Administrador

o Dar de alta, dar de baja, buscar y modificar usuarios

o Seleccionar, subir y eliminar algoritmos

o Subir, buscar, eliminar, modificar, visualizar y descargar archivos

Page 30: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

22

o Generar, visualizar, descargar y eliminar archivos resultantes y moverlos o

copiarlos a la tabla archivos.

- Desarrollador.- Control total sin gestión de usuarios y modificando sus propios archivos

(figura 4.2):

Figura 4.2. Desarrollador

o Seleccionar, subir algoritmos y eliminar solo los subidos por él.

o Subir, buscar, visualizar y descargar archivos, y eliminar o modificar solo los

que haya subido.

o Generar, visualizar, descargar archivos resultantes, y eliminar o mover solo lo

que haya generado.

- Ejecutor.- Usuario autorizado solo ha probar algoritmos y analizar resultados (figura

4.3):

Figura 4.3. Ejecutor

o Seleccionar algoritmos.

o Subir, buscar, visualizar y descargar archivos, y eliminar o modificar solo los

que haya subido.

o Visualizar, descargar, eliminar, mover y copiar solo los archivos resultantes que

haya generado.

Page 31: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

23

4.2. Inicio y pantalla principal

4.2.1. Esquema de los formularios

En la figura 4.4 se muestra como están conectadas las ventanas que conforman el inicio de la

aplicación y la pantalla principal.

Figura 4.4. Esquema de formularios del inicio y la pantalla principal

4.2.2. Inicio de sesión

El programa empieza con una ventana inicial donde se puede iniciar sesión o permitir a un

usuario que se registre.

4.2.2.1. Alta de usuario

Si el usuario decide registrarse, se le pedirá que indique su nombre y contraseña, y se le dará

de alta como ejecutor (el administrador podrá cambiar su tipo de usuario).

La contraseña de cada usuario debe ser un elemento privado que ni el propio administrador

Page 32: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.2. INICIO Y PANTALLA PRINCIPAL

24

pueda conocer, por eso, se va a utilizar el algoritmo HASH para cifrarlas [9]. Estos algoritmos

permiten convertir de forma irreversible una información en otra, de forma que una vez que se

hace este proceso, no se puede conocer cuál era la información original. Se va a utilizar el

algoritmo SHA512 por ser el más seguro. Para ello hay que añadir el espacio de nombre:

using System.Security.Cryptography;

Y después añadir este código al pulsar el botón Alta:

SHA512Managed cifrador = new SHA512Managed();

byte[] contraseñaOriginal = Encoding.ASCII.GetBytes(pwd.Text);

byte[] contraseñaCifrada = cifrador.ComputeHash(contraseñaOriginal);

String textoContraseñaCifrada =

Convert.ToBase64String(contraseñaCifrada);

Para dar de alta al usuario, la aplicación va a hacer uso del primer servicio web, el de usuarios.

Para ello, se instancia una variable que contendrá este servicio:

WSUsuarios.WSUsuarios servicio = new cliente.WSUsuarios.WSUsuarios();

Y después al pulsar Alta, llamará a la función alta, de esta forma:

Boolean respuesta = servicio.alta(usuario.Text,textoContraseñaCifrada,

"ejecutor");

Este método se conecta a la base de datos y introduce un nuevo registro en la tabla usuarios.

Para conectarse a la base de datos se utilizan clases ADO.Net de .Net Framework, el código es:

string scnn = "Data Source=WEB-MASTER;Initial Catalog=BDProyecto;"

+"User ID=proyecto; Password=proyecto";

System.Data.SqlClient.SqlConnection cnn = new

System.Data.SqlClient.SqlConnection(scnn);

cnn.Open();

Se le especifica el nombre del servidor, el nombre de la base de datos, y el usuario y el

password para acceder (aquí se va a utilizar el usuario que se creó en el punto 3.4.3).

Después se inserta el registro mediante lenguaje SQL:

string sentencia = "INSERT INTO usuarios(usuario,password,tipo,fecha) "

+ "VALUES(@usuario,@password,@tipo,@fecha);";

System.Data.SqlClient.SqlCommand comando = new

System.Data.SqlClient.SqlCommand(sentencia, cnn);

comando.Parameters.AddWithValue("@usuario", usuario);

comando.Parameters.AddWithValue("@password", password);

comando.Parameters.AddWithValue("@tipo", tipo);

comando.Parameters.AddWithValue("@fecha", fecha);

Page 33: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

25

respuesta=(comando.ExecuteNonQuery()==1);

Se usa Parameters para hacer una consulta parametrizada, así se evita que se pueda inyectar

código SQL malicioso en las cadenas de texto. Para ejecutar una sentencia que no devuelva

nada (sin contar el booleano que indica si se ha realizado con éxito) se utiliza

ExecuteNonQuery. Finalmente, se debe cerrar la conexión con:

cnn.Close();

cnn.Dispose();

Tener en cuenta que al insertar el registro, uno de los campos es la fecha de creación. Para que

el sistema obtenga la fecha actual, se escribe esto:

string fecha=System.DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

4.2.2.2. Iniciar sesión

Al introducir un usuario y contraseña, el programa comprueba si existe cifrando la contraseña

dada, y comparándola con la que hay guardada en la base de datos. Este formulario también

hace uso del servicio web WSUsuarios, por lo que también se ha de instanciar. Al pulsar Entrar,

se llama a la función (se utiliza ref para usar argumentos de entrada/salida)[4]:

servicio.inicio(usuario.Text, textoContraseñaCifrada,ref tiporesp,ref

idresp);

Este método hace una consulta SQL, buscando a ese usuario y devolviendo el id del usuario y

su tipo:

string consulta = "SELECT id,tipo FROM usuarios WHERE usuario=@usuario

AND password=@password";

Se ejecuta la consulta con ExecuteReader para poder manipular todos los resultados obtenidos:

System.Data.SqlClient.SqlDataReader myReader = comando.ExecuteReader();

En este caso se quiere recoger el valor del campo Id que se encuentra en la posición 0 y el valor

del campo Tipo que está en la posición 1:

bool bien=myReader.Read();

if (bien)

{

idresp = myReader.GetInt32(0);//La columna id

tiporesp = myReader.GetString(1); //La columan tipo

Page 34: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.1. INICIO Y PANTALLA PRINCIPAL

26

}

Si el usuario es correcto, en la aplicación se abrirá el formulario Principal y se ocultará el de

Inicio.

principal fprincipal = new principal(this, usuario.Text,tiporesp,idr);

fprincipal.Show();

this.Hide();

Al crear una instancia del nuevo formulario, se le pasarán el objeto propio de formulario inicio

(para poder cerrar el formulario junto al principal), y otros 3 parámetros que se usarán en las

llamadas a otros métodos. Si se quiere abrir un formulario y dejar el otro abierto, pero sin que se

pueda acceder a él, se escribe ShowDialog. Así se abre, por ejemplo, el formulario Alta anterior:

alta falta = new alta();

falta.ShowDialog();

4.2.3. Pantalla principal, Ejecutor de algoritmos

Desde el formulario principal se podrá acceder a toda la funcionalidad del programa. La

ventana contiene todas las opciones disponibles, y según sea el usuario registrado, se ocultarán

más o menos opciones. Si, por ejemplo, ha entrado un desarrollador, la opción de gestión de

usuarios no la tendrá disponible, por lo tanto, se oculta así:

if (tipo == "desarrollador")

{

this.Text = "Desarrollador";

principal.ActiveForm.Text = "Desarrollador";

usuariosToolStripMenuItem.Visible = false;

this.BackgroundImage =

cliente.Properties.Resources.fondoDesarrollador1;

}

Este ejemplo cambia, además, el título del formulario y el diseño del fondo.

En la ventana principal también se encontrarán otras opciones para cerrar la ventana y para

cambiar la sesión. Cuando se inició la sesión, desde el formulario de Inicio se abrió el

formulario Principal, y se le pasó el objeto de este formulario Inicio. Esto se hace para que al

cerrar el Principal, se cierre el Inicio también (aunque este esté oculto). Por eso, al principio del

código de Principal se crea una variable de tipo Inicio, que contiene el objeto.

inicio padre;

Y se crea el evento FormClosing para que cerrar el formulario padre:

Page 35: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

27

private void principal_FormClosing(object sender, FormClosingEventArgs

e)

{

padre.Close();

}

Un aspecto muy importante para que esto funcione, es declarar este evento en el archivo

principal.Designer.cs. Normalmente, cuando se hace doble click sobre los botones o los textbox,

se crean los eventos necesarios y se declaran automáticamente en el Designer (como el evento

Click), pero en este caso hay que añadirlo manualmente [5]:

this.FormClosing += new

System.Windows.Forms.FormClosingEventHandler(this.principal_FormClosing)

;

En el cambio de sesión se va a mostrar una ventana externa preguntando al usuario si esta

seguro de que quiere cerrar sesión. Esto se hace con el MessageBoxButtons de tipo YesNo:

string message = "¿Está seguro de que quiere cambiar de sesión?";

string caption = "Aviso";

MessageBoxButtons buttons = MessageBoxButtons.YesNo;

DialogResult result;

result = MessageBox.Show(message, caption, buttons);

if (result == System.Windows.Forms.DialogResult.Yes)

{

padre.Show();

this.Hide();

}

El formulario Principal se limitará a abrir los formularios a los que se va llamando, no necesita

utilizar ningún servicio web.

4.3. Usuarios

4.3.1. Esquema de los formularios

El plantel de opciones para la gestión de usuarios y el esquema que forman los formularios se

muestra en la figura 4.5.

La opción de dar de alta funciona igual que la comentada anteriormente, con la salvedad de aquí

el administrador puede elegir el tipo de usuario que va a dar de alta. La búsqueda de usuarios es

Page 36: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.2 USUARIOS

28

una simple tabla para que el usuario sepa los usuarios que hay registrados. Esto y otras nuevas

funciones se van a comentar en el siguiente apartado.

Figura 4.5. Esquema de formularios de Usuario

4.3.2. Eliminar y modificar usuario

Este formulario necesita llamar a funciones del servicio web WSUsuarios. Primero se hace

una búsqueda de los usuarios. Se hace según los campos especificados, por ejemplo, si el

usuario rellena los campos Palabra clave y Tipo la consulta es esta:

Page 37: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

29

select = "SELECT id,usuario,tipo,fecha FROM usuarios WHERE usuario LIKE

'%" + busqueda + "%'AND tipo=@tipo;";

Y para que los resultados se muestren en el DataGridView, se utiliza un objeto

SQLDataAdapter que permite guardar los resultados en un objeto DataSet. Aquí también se

parametrizan las variables:

System.Data.SqlClient.SqlDataAdapter adaptador = new

System.Data.SqlClient.SqlDataAdapter();

adaptador.SelectCommand = new

System.Data.SqlClient.SqlCommand(select, cnn);

if (tipo.Length > 0)

{

adaptador.SelectCommand.Parameters.AddWithValue("@tipo", tipo);

}

if (busqueda.Length > 0)

{

adaptador.SelectCommand.Parameters.AddWithValue("@busqueda",

busqueda);

}

System.Data.DataSet ds = new System.Data.DataSet();

adaptador.Fill(ds, "Resultados");

Esta función devuelve un Dataset, que se añadirá al objeto Datagridview, se especifica que no

se vea la barra lateral que trae por defecto el DataGrid y se utiliza el método Visible para

ocultar los campos que no es necesario que aparezcan, como, en este caso, el id:

DataSet ds = servicio.mostrar(tipo.Text, busqueda.Text);

dataGridView1.DataSource = ds.Tables[0];

dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells

);

dataGridView1.RowHeadersVisible = false;

dataGridView1.Columns["id"].Visible = false;

Cuando el cliente elige un usuario de la lista, el evento CellClick permite recoger los campos

que se han seleccionado:

private void dataGridView1_CellClick(object sender,

DataGridViewCellEventArgs e)

{

idSelec = dataGridView1.CurrentRow.Cells[0].Value.ToString();

usuarioSelec =

dataGridView1.CurrentRow.Cells[1].Value.ToString();

tipoSelec = dataGridView1.CurrentRow.Cells[2].Value.ToString();

baja.Enabled = true;

Page 38: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.3. ALGORITMOS

30

modificar.Enabled = true;

}

Tener en cuenta que este evento también hay que colocarlo manualmente en el Designer.

Para eliminar o modificar, se les pasará a las funciones estos elementos seleccionados. Al

eliminar se utiliza la sentencia SQL:

string sentencia = "DELETE usuarios WHERE id=@id;";

Y para modificar se usa:

string sentencia = “UPDATE usuarios SET tipo=@tipoc WHERE id=@id”;

En el caso de los usuarios, no se ha contemplado la posibilidad de borrar varios usuarios a la

vez. Esto sí se puede hacer con los algoritmos y los archivos, por lo que se explicará más tarde.

4.4. Algoritmos

4.4.1. Esquema de los formularios

El esquema de la figura 4.6 refleja, además de las opciones de gestión de algoritmos, la

selección de algoritmos y su ejecución, es decir, la base de este proyecto.

Page 39: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

31

Figura 4.6. Esquema de formularios de Algoritmos

Page 40: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.3 ALGORITMOS

32

4.4.2. Subir algoritmo

Los algoritmos que puede subir el usuario pueden estar programados con cualquier lenguaje de

programación, ya que la aplicación solo se dedica a lanzar el ejecutable. Para esta aplicación se

ha probado con algoritmos diseñados en Matlab y C++. Sea como sea, para el buen

funcionamiento de la aplicación, estos algoritmos deben cumplir los siguientes requisitos:

- En el caso de Matlab, se deben crear los ejecutables de la forma:

mcc –m algoritmoPrincipal.m algoritmo2.m –o nombreAlgorimo [7]

Esto genera una serie de archivos, entre ellos el .exe y el .ctf, que serán los necesarios

para la ejecución (este último no se genera si la versión del Matlab es superior a la 2008,

ya que ya viene dentro del .exe). Puede que para ejecutables generados con otros

métodos también funcionen en la aplicación, pero no se han probado.

- Los algoritmos no pueden tener una interfaz gráfica ni una consola que interactúe con el

usuario, ya que esta interfaz se abriría en el servidor, y el cliente desde su ordenador no

podría verla. Esta aplicación está pensada para algoritmos donde se le pasen los

parámetros necesarios, se ejecute y devuelva uno o varios archivos.

- Tienen que cerrarse completamente. Cuando se ejecutan, el servidor devuelve los

resultados cuando se haya acabado la ejecución. Si se programa un algoritmo que deje

abierta una ventana (como, por ejemplo, la ventana gráfica de Matlab), no terminará de

ejecutarse nunca y será imposible obtener los archivos que genere. Al inicio de la

aplicación se le permite al usuario especificar este tiempo de espera, para que no se

quede bloqueado indefinidamente. Se explica cómo se hace posteriormente.

- Tienen que tener un conversor para el tipo de dato que sea, ya que en la llamada del

ejecutable desde el servidor, se le pasarán los parámetros como cadenas, por lo que el

algoritmo tendrá que convertir esta cadena a entero, a real o a lo que sea necesario.

- Los archivos que genere el algoritmo, deben guardarse en el mismo directorio del

algoritmo.

El formulario Subir algoritmo permitirá al usuario subir por FTP los archivos necesarios para

ejecutar (el .exe, el .ctf, …) y especificar los parámetros, que podrán ser los archivos multimedia

que estén en la base de datos (imágenes, videos,…) o una cadena de texto.

Gracias a la configuración del IIS que se hizo anteriormente, se podrán subir archivos por FTP.

En este código se muestra cómo programar el botón Examinar:

Page 41: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

33

OpenFileDialog dlgOpen = new OpenFileDialog();

if (dlgOpen.ShowDialog() == DialogResult.OK)

archivo.Text = dlgOpen.FileName;

Para subir un archivo, primero se va a comprobar si ya existe. Para ello, se va a utilizar una

función del servicio web WSAlgoritmos, donde se usará uno de los métodos de System.IO:

System.IO.Directory.Exists(@"C:\Inetpub\ftproot\Algoritmos\" +

directorio)

Después se va a crear un directorio donde se guardará este archivo:

string ftpfullpath = “ftp://192.168.199.100/” + "Algoritmos/" +

directorio;

FtpWebRequest ftp = (FtpWebRequest)WebRequest.Create(ftpfullpath);

ftp.Method = WebRequestMethods.Ftp.MakeDirectory;

FtpWebResponse CreateForderResponse = (FtpWebResponse)ftp.GetResponse();

Y por último, se subirá [10]:

FtpWebRequest request =

(FtpWebRequest)FtpWebRequest.Create(ftp://192.168.199.100/” +

"Algoritmos/" + directorio + "/" + nombredestino);

request.Method = WebRequestMethods.Ftp.UploadFile;

request.Credentials = new NetworkCredential(user, pass);

request.UsePassive = true;

request.UseBinary = true;

request.KeepAlive = true;

FileStream stream = File.OpenRead(origen);

byte[] buffer = new byte[stream.Length];

stream.Read(buffer, 0, buffer.Length);

stream.Close();

Stream reqStream = request.GetRequestStream();

reqStream.Write(buffer, 0, buffer.Length);

reqStream.Flush();

reqStream.Close();

El user y el pass serán los que se utilizan para entrar al Windows Server, y origen es la dirección

que se ha elegido al examinar.

Una vez subidos los archivos necesarios, el usuario puede especificar los tipos de parámetros

que se usarán para ejecutar. En la ventana se muestran 3 campos para rellenar, aunque se

permitirán poner más parámetros dentro de otro formulario al pulsar el botón ‘Más parametros’,

hasta un máximo de 10 (también puede dejar los campos en blancos, y dejarlo sin parámetros).

Todo esto se guarda en una cadena de texto, con los parámetros delimitados por separadores

especiales. Por ejemplo, un parámetro de nombre ‘Video’ que es de tipo ‘Archivo de la base de

Page 42: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.3. ALGORITMOS

34

datos’ y otro parámetro de nombre ‘NumFrames’ que es de tipo ‘Número o cadena de texto’, se

guardará en el campo ‘parametros’ de la tabla ‘algoritmos’ de la BD, con el siguiente formato:

Video|Archivo de la base de datos-NumFrames|Número o cadena de texto

Al ejecutar el algoritmo, la aplicación ‘desenvolverá’ esta cadena de texto y la utilizará para

mostrar al usuario los parámetros del ejecutable.

A pulsar el botón ‘Guardar’ se registrará en la base de datos un nuevo algoritmo, usando una

función similar al alta de usuario, y que se encuentra en el servidor web WSArchivos (no

WSAlgoritmos).

4.4.3. Eliminar algoritmo

Un administrador o un desarrollador podrán borrar uno o más algoritmos a la vez. Podrá

buscarlos según palabras clave o según el usuario que lo haya subido. Para rellenar este

ComboBox de usuarios es necesario realizar una consulta, leyendo los resultados con el Reader

y guardándolos en una cadena de texto:

select = "SELECT DISTINCT usuario FROM usuarios,algoritmos WHERE

algoritmos.id_usuario=usuarios.id;";

System.Data.SqlClient.SqlCommand comando = new

System.Data.SqlClient.SqlCommand(select, cnn);

SqlDataReader reader = comando.ExecuteReader();

int i = 0;

while (reader.Read())

{

p = p + String.Format("{0}", reader[0]) + "|";

i++;

}

return p;

Nótese que se utiliza DISTINCT para que no se repitan usuarios en la resolución de la consulta.

Estos resultados los devolverá el servicio web y en la aplicación se añadirán al ComboBox:

p = servicio.rellenar();

int lp = p.Length;

char[] c=p.ToCharArray();

int i = 0;

string temp = "";

while (i < lp)

{

temp = "";

Page 43: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

35

while (p[i] != '|')

{

temp = temp + p[i];

i++;

}

usuario.Items.Add(temp);

i++;

}

Para permitir al usuario que pueda elegir más de una fila en el DataGrid, primero hay que

establecer la propiedad SelectionMode a FullRowSelect, y esto se hace en el Designer del

formulario, escribiendo la siguiente línea:

this.dataGridView1.SelectionMode =

System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;

Después, ya dentro del código del formulario, se cuentan el número de filas seleccionadas y

mediante la propiedad del DataGrid SelectedRow, se podrá recorrer los registros seleccionados

y procesarlos uno a uno. Para este caso de eliminar, se hace así:

Int32 selectedRowCount

=dataGridView1.Rows.GetRowCount(DataGridViewElementStates.Selected);

string idSel=””,arcSel=””;

if (selectedRowCount > 1)

{

for (int i = 0; i < selectedRowCount; i++)

{

idSel =

dataGridView1.SelectedRows[i].Cells["id_alg"].Value.ToString();

dirSel =

dataGridView1.SelectedRows[i].Cells["directorio"].Value.ToString(

);

servicio.borrar(idSel, dirSel); }

}

Para borrar se llama a una función del servicio web. Esta elimina el registro de la base de datos,

que se hace de la misma forma que el Baja de usuario comentado anteriormente. También

elimina el directorio donde se alojan los archivos físicamente. El método Delete permite borrar

directorios y subdirectorios:

Page 44: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.3 ALGORITMOS

36

if (System.IO.Directory.Exists(@"C:\Inetpub\ftproot\Algoritmos\" +

directorio))

{

System.IO.Directory.Delete(@"C:\Inetpub\ftproot\Algoritmos\" +

directorio, true);

}

4.4.4. Seleccionar algoritmo y ejecutar

Aquí está la funcionalidad principal del proyecto. El usuario elige un algoritmo, lo ejecuta y

gestiona los archivos resultantes. La selección de algoritmos es muy parecida al eliminar

algoritmos comentado anteriormente. Para la ejecución se va a mostrar su funcionamiento con

más detalle.

4.4.4.1. Ejecutar algoritmo

Cuando el usuario pulsa el botón Ejecutar, la aplicación abre un nuevo formulario, y su

diseño dependerá de los parámetros de los que conste el algoritmo. Inicialmente el formulario se

crea con un tamaño necesario para que quepan 10 parámetros, con sus campos de texto y

botones en el caso de que los parámetros sean de tipo ‘Archivo de la base de datos’. El

programa recoge la id del algoritmo seleccionado y la lee de la base datos, obteniendo todos sus

campos, entre ellos, el de los parámetros. Así, según sea el número de parámetros y el tipo de

estos, con la propiedad Drawing se construirá la ventana en tiempo de ejecución. Para un

algoritmo que tenga 2 parámetros, por ejemplo, se pone esto:

if (numParametros >= 2)

{

this.Size = new System.Drawing.Size(394, 220);

ejec.Location = new System.Drawing.Point(278, 107);

descargar.Location = new System.Drawing.Point(211, 147);

mensaje.Location = new System.Drawing.Point(149, 117);

p2.Visible = true;

p2.Text = p[2];

textBox2.Visible = true;

if (tp[2] == "Archivo de la base de datos")

{

button2.Visible = true;

}

}

Page 45: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

37

Cuando el parámetro sea del tipo ‘Archivo de la base de datos’, se mostrará un botón, que, al

pulsarlo, llevará al usuario a elegir un archivo. Este permitirá seleccionarlo, visualizarlo o

descárgalo. El proceso de descarga y visualizado se explicará en Archivos.

Una vez estén todos los parámetros introducidos se va a proceder a ejecutar. Todas las

operaciones de ejecución se encuentran en el servidor web WSArchivos, no en WSAlgoritmos.

Se ha hecho así para mayor comodidad a la hora de declarar variables que usan tanto

operaciones de algoritmos como de archivos.

Los archivos que el usuario elige para aplicarle el algoritmo deben estar en la misma carpeta

que el propio algoritmo. Por eso, se realiza una copia de estos, de esta forma:

string sourcePath = @"C:\Inetpub\ftproot\Archivos";

string targetPath = @"C:\Inetpub\ftproot\Algoritmos\" + directorio;

string sourceFile = System.IO.Path.Combine(sourcePath, fileName);

string destFile = System.IO.Path.Combine(targetPath, fileName);

System.IO.File.Copy(sourceFile, destFile, true);

Justo antes de ejecutar se va a tomar la fecha y hora actual, para después detectar cuales son los

archivos nuevos que ha generado el algoritmo, según su fecha de creación. Para ejecutar el .exe,

se utiliza la propiedad Start del método Process. A este método se le especifica el directorio de

trabajo, el nombre del ejecutable y los argumentos que se le pasan (que se escriben separados

unos de otros con espacios en blanco):

System.Diagnostics.Process MyProceso = new System.Diagnostics.Process();

MyProceso.StartInfo.WorkingDirectory = "C:/Inetpub/ftproot/Algoritmos/"

+ directorio;

MyProceso.StartInfo.FileName = ejecutable;

MyProceso.StartInfo.Arguments = parametros;

MyProceso.Start();

No olvidar que los argumentos que se pasan son cadenas de texto, por lo que el algoritmo debe

convertirlos en el caso de que sean números u otro tipo de datos.

El procesado de un algoritmo puede tardar más o menos según sea su complejidad. Se va a

establecer el tiempo de espera que especificó el usuario en la ventana de configuración, de esta

forma, si el algoritmo tarda más de lo establecido en ejecutarse, la aplicación dejará de esperar

resultados y mostrará un mensaje anunciando que no se ha ejecutado con éxito. Para establecer

este dato, se pasa la variable de timeout a la función ejecutar del web service y se utiliza el

método WaitForExit del proceso:

salida = MyProceso.WaitForExit(timeoutServidor * 60000);

Page 46: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.3. ALGORITMOS

38

No obstante, puesto que los webservices están configurados por defecto con un tiempo de

espera de unos minutos, saltaría una excepción indicando que se ha superado el timeout en el

caso de que la ejecución dure más de estos pocos minutos. Por eso, también hay que establecer

este dato para el objeto al servicio web que se instanció al inicio en la aplicación cliente, usando

el método TimeOut y recogiendo la variable del formulario inicio:

inicio finicio = new inicio(); servicio.Timeout=finicio.timeoutServidor*60000;

Una vez se haya ejecutado el algoritmo, este devolverá unos archivos resultantes. Estos se

guardarán en el directorio donde está el ejecutable del .exe. La aplicación los va a registrar en la

base de datos y los moverá a la carpeta Archivos Resultantes. Para ello, se va a obtener la lista

de archivos del directorio del algoritmo:

DirectoryInfo dir = new DirectoryInfo("C:/Inetpub/ftproot/Algoritmos/" +

directorio);

A continuación se recorre la lista viendo las fechas de creación de cada archivo, se compara con

la fecha que se tomó al inicio de la ejecución, y para cada archivo con fecha de creación

superior a la anterior, se le cambiará el nombre a formato tipo nombre_22-01-

2010_22.33.22.extensión:

foreach (FileInfo f in dir.GetFiles())

{

string name = f.Name;

DateTime creationTime = f.CreationTime;

int ln = name.Length;

string nombre = "";

string extension = "";

if (creationTime.CompareTo(f1) > 0)

{

string fechaMod = f.CreationTime.ToString().Replace(" ", "_");

fechaMod = fechaMod.Replace("/", "-");

fechaMod = fechaMod.Replace(":", ".");

//Extensión

int j=name.Length;

while(name[j-1]!='.'){

j--;

}

//Nombre

int limite = j;

int k = 0;

Page 47: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

39

while (k < limite-1)

{

nombre = nombre + name[k];

k++;

}

while(j<name.Length){

extension=extension+name[j];

j++;

}

//Nombre final

string nuevoNombre = nombre + "_" + fechaMod+ "." + extension;

,se registra en la tabla ArchivosResultantes de la base de datos:

string sentencia = "INSERT INTO

archivosResultantes(nombreArcR,directorioArcR,fechaArcR,idAlg,idUsu) " +

"VALUES(@name,@directorio,@creationTime,@idAl,@idUsu);";

System.Data.SqlClient.SqlCommand comando = new

System.Data.SqlClient.SqlCommand(sentencia, cnn);

comando.ExecuteNonQuery();

,se obtiene el id del registro que se ha insertado (esto se hace para que, cuando se registren todos

los archivos, el usuario pueda gestionarlos, y así la aplicación tendrá las ids de los registros a

gestionar) :

comando.Parameters.Clear();

comando.CommandText = "SELECT @@IDENTITY";

idInsertado = Convert.ToInt32(comando.ExecuteScalar());

, y por ultimo, se mueve el archivo a la carpeta ArchivosResultantes del servidor,

renombrandolo:

string archivoOrigen = System.IO.Path.Combine(rutaOrigen, name);

string archivoDestino = System.IO.Path.Combine(rutaDestino, name);

System.IO.File.Move(archivoOrigen, archivoDestino);

File.Move(@"C:\Inetpub\ftproot\ArchivosResultantes\"+name,

@"C:\Inetpub\ftproot\ArchivosResultantes\"+nuevoNombre);

Una vez registrados todos los archivos, se le permitirá al usuario descargarlos, eliminarlos,

moverlos o copiarlos a la tabla Archivos o visualizarlos. Estas nuevas opciones se explicarán en

el apartado 4.4.3.

Page 48: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.4. ARCHIVOS

40

4.5. Archivos 4.5.1. Esquema de los formularios

Los formularios relacionados con la gestión de archivos se muestran en la figura 4.7

Figura 4.7. Esquema de los formularios de Archivos

Page 49: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

41

4.5.2. Subir archivo

El usuario podrá subir los archivos a los que les va a aplicar los algoritmos que se encuentren

en la aplicación. Por lo tanto, podrá subir videos, imágenes, audio, texto, etc.

El usuario podrá subir el archivo, describirlo, especificar el tipo de archivo que es, y

relacionarlo con un algoritmo. Esto último es un campo más para ayudar al usuario a buscar sus

archivos posteriormente. De esta forma, si un archivo sabe que lo va a utilizar para un algoritmo

específico, lo asocia, y podrá buscarlo con más facilidad y permitirá a otros usuarios a saber qué

archivos están pensados para ejecutar un algoritmo u otro. Si no se asocia a ninguno, la

aplicación lo asociará automáticamente a un registro oculto de la tabla Algoritmos, con id 6 y

nombre ‘Ninguno’. En ningún momento se dará la oportunidad de eliminar este algoritmo

‘Ninguno’, ya que es un pilar necesario para el buen funcionamiento de la aplicación.

4.5.3. Eliminar o modificar archivos

Se permite al usuario eliminar, modificar, descargar o previsualizar los archivos. El usuario

puede elegir varios archivos para eliminarlos o descargarlos, pero no para modificar o

previsualizarlos, en ese caso, tendrá que hacerlo uno a uno. La funcionalidad del Eliminar y el

Modificar son muy similares a los comentados en los puntos anteriores.

4.5.3.1. Descargar archivos

Para descargar un archivo, la aplicación cliente se conecta por FTP al servidor. Es necesario

crear una instancia WebClient, y utilizar su método DownloadFile:

string server = "ftp://192.168.199.100/";

string user = "administrador";

string pass = "practicas";

string ruta="Archivos";

string rutaDestino = carpeta.Text;

string remoteUri = server + ruta;

string archivo="";

string destino = "";

string myStringWebResource = null;

WebClient myWebClient;

archivo = nombreArchivo;

destino = rutaDestino + "\\" + archivo;

fileName = archivo;

// Crea una instancia WebClient.

myWebClient = new WebClient();

Page 50: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.4. ARCHIVOS

42

myWebClient.Credentials = new NetworkCredential(user, pass);

//Concatena el dominio con el nombre del archivo

myStringWebResource = remoteUri + fileName;

// Descarga el archivo en destino

mensaje.Text = "Descargando...";

Application.DoEvents();

myWebClient.DownloadFile(myStringWebResource, destino);

mensaje.Text = "Descargado correctamente";

Decir que se utiliza Application.DoEvents() para que el mensaje se muestre en el formulario

mientras se va compilando el código.

Una vez descargados, se le da la facilidad al usuario de ver sus archivos descargados, abriéndole

la carpeta contenedora:

System.Diagnostics.Process.Start(@carpeta.Text);

4.5.3.2. Previsualizar archivos

Para un mayor dinamismo a la hora de trabajar con la aplicación por parte del usuario, se le

va a permitir visualizar los archivos. Podrá abrir imágenes (bmp, jpg, png, gif y jpeg), videos

(mpg, avi, mpeg, wmv) o audio (wma, wav, mp3). Cuando el usuario elija un registro y pulse

Visualizar, la aplicación va a descargar el archivo temporalmente en C:\ local, lo mostrará en

una ventana nueva, y cuando cierre esta ventana se borrará.

Para las imágenes, se va a utilizar la herramienta PictureBox. La ventana con la imagen se

adaptará al tamaño de esta imagen.

pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

MyImage = new Bitmap(@"C:\" + nombre);

pictureBox1.ClientSize = new Size(MyImage.Width, MyImage.Height);

this.Size = new System.Drawing.Size(MyImage.Width, MyImage.Height);

pictureBox1.Image = (Image)MyImage;

Para poder visualizar los videos o audios, es necesario añadir a la barra de herramientas el ítem

Windows Media Player. Esto se hace pulsando con el segundo botón en Toolbox y seleccionar

Choose Items. En la pestaña COM Components se encuentra esta herramienta (figura 4.8).

Page 51: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.4. ARCHIVOS

43

Figura 4.8. Añadir herramienta Windows Media Player

Cuando el usuario pulse visualizar, se abrirá una ventana con la herramienta Windows Media

Player introducida, con un reproductor simple de Windows Media.

axWindowsMediaPlayer1.Visible = true;

axWindowsMediaPlayer1.URL = "C:\\"+ nombre;

axWindowsMediaPlayer1.Ctlcontrols.play();

Finalmente, cuando cierre la ventana, el archivo temporal se borrará, de esta forma si es una

imagen:

MyImage.Dispose();

File.Delete(@"C:\" + nom);

Y de esta otra si es video o audio

axWindowsMediaPlayer1.close();

axWindowsMediaPlayer1.Dispose();

File.Delete("C:\\" + nom);

4.5.4. Buscar archivos

Se da la opción de buscar, descargar y visualizar los archivos. Este formulario funciona igual

que el comentado anteriormente, por lo que no es necesario hablar más sobre él.

Page 52: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 4: PROGRAMACIÓN DE LA APLICACIÓN

44

4.5.5. Gestionar archivos resultantes

Esta última opción permite gestionar los archivos que se han devuelto al ejecutar un

algoritmo. El usuario podrá visualizarlos, descargarlos, eliminarlos y moverlos o copiarlos a la

tabla archivos. Puesto que las tres primeras opciones ya se han tratado anteriormente, queda por

detallar el paso de los registros a la tabla Archivos.

Cuando el usuario ejecuta un algoritmo, quiere analizar los resultados que devuelve este. Una

vez los haya investigado, decidirá si son adecuados para que formen parte de aquellos que se

pueden utilizar para aplicar en otros algoritmos, o quizá prefiera dejarlos ahí y comprobarlos en

otro momento. Para eso están las opciones de copiar y mover.

Tanto para copiar como para mover, en la aplicación se abrirá otra ventana para que el usuario

especifique con qué nombre, descripción y tipo de archivo se va a registrar en la tabla. Si copia

o mueve varios registros a la vez, se le avisará de que se pasarán con el mismo nombre, sin

descripción y del tipo ‘Otros’. Se registrarán en la base de datos y se moverán o copiarán

físicamente. Para esto último se va a utilizar la propiedad File:

File.Copy(@"C:\Inetpub\ftproot\ArchivosResultantes\" + nombre,

@"C:\Inetpub\ftproot\Archivos\" + nombreNuevo);

File.Move(@"C:\Inetpub\ftproot\ArchivosResultantes\" + nombre,

@"C:\Inetpub\ftproot\Archivos\" + nombreNuevo);

4.6. Crear instalable

Se va a crear un archivo instalable que contenga la aplicación cliente. Gracias a esto,

cualquier usuario podrá usar el programa desde su ordenador, conectándose al servidor que ya

está configurado y con los correspondientes servicios web.

En primer lugar, hay que crear un nuevo proyecto dentro de Visual Studio. Se pulsa en

ArchivoNuevoProyecto y se selecciona ‘Otros tipos de proyecto’’Instalación e

implementación’’Instalador de Visual Studio’’Asistente para proyectos de instalación’. Se

introduce el nombre del instalador y se selecciona ‘Agregar a la solución’. Aparece el asistente

de creación. En el paso 1 elegir ‘Crear un programa de instalación de una aplicación para

Windows’. En el paso 2 se elige ‘Resultado principal del cliente’. En el paso 4 se puede agregar

archivo de texto ‘Leeme’ o el icono del ejecutable, por ejemplo. En el paso 5 se finaliza el

asistente.

Page 53: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

4.5 CREAR INSTALABLE

45

Una vez creado, aparecerá en la barra derecha de Visual Studio, en el Explorador de soluciones.

Si se pulsa en propiedades, se lo podrá especificar el nombre del autor, la descripción y, por

ejemplo, el icono del ejecutable (AddRemoveProgramsIcon). A continuación se pulsa con el

segundo botón en el nombre del Instalador y se selecciona ‘Propiedades’. Pulsar el botón

‘Administración de configuración’ y se elige ‘Any CPU’ y configuración de tipo ‘Release’ en

el instalador. Volver atrás y pulsar en ‘Requisitos previos’. Aquí se van a establecer que es lo

que hay que tener instalado para la aplicación. En este caso, solo es necesario el Windows

Installer y la última versión del Net Framework (sistema x86). Elegir ‘Descargar los requisitos

previos desde la misma ubicación de la aplicación’ para que en la propia carpeta del instalable,

estén los programas necesarios. En la parte superior de la barra del Explorador de soluciones,

hay un acceso al editor de interfaz de usuario, donde se pondrá configurar el menú de

instalación.

Para finalizar, pulsar con el segundo botón en el proyecto y pulsar ‘Generar’. En el directorio

donde está almacenado el proyecto se encuentra ahora la carpeta Release, con el archivo

Setup.exe y los archivos que se especificaron en los requisitos. Esta carpeta es la que se le dará

al usuario final para instalar la aplicación.

Page 54: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 5: EJEMPLO DE USO DE LA APLICACIÓN

46

CAPÍTULO 5:

EJEMPLO DE USO DE LA

APLICACIÓN El usuario instala en su equipo el programa ‘Ejecutor de algoritmos’. Puede que el sistema le

pida instalar una versión más actualizada de Net Framework. Una vez instalado, entra en la

aplicación y lo primero que se encuentra es la pantalla de inicio de sesión. Antes de nada, el

usuario tiene que introducir la IP del servidor al que se va a conectar. Para ello, pulsa el botón

‘Configurar conexión’, introduce el dato y deja el Timeout en su valor por defecto, 120 minutos

(figura 5.1).

Figura 5.1. Configuración de conexión

También se encuentra la opción de darse de alta, pero él ya creó una cuenta anteriormente, y el

administrador le otorgó el tipo de usuario ‘Desarrollador’. Inicia sesión con su usuario y

contraseña y entra en la pantalla principal para desarrolladores.

Entra en ‘Elegir algoritmos’ y encuentra ahí todos los algoritmos que hay en la base de datos y

que puede usar. Sin embargo, decide subir un algoritmo que ha diseñado él mismo, y que quiere

compartir con los demás usuarios. El algoritmo lo creó en Matlab y consiste en un programa que

recibe como entrada un video y extrae tantos frames como haya especificado y le hace una

transformación a elegir entre pasar a blanco y negro (byn) o convertir a modo espejo (espejo).

Los frames resultante tendrán un nombre que también se ha de especificar como parámetro. El

código es el siguiente[3]:

function framesTransformados(video,numFrames,transformada,nombre)

Page 55: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 5: EJEMPLO DE USO DE LA APLICACIÓN

47

numFrames=str2num(numFrames);

mov = aviread(video);

if(strcmp(transformada,'byn'))

for i=1:numFrames,

[X,map] = frame2im(mov(i));

X=rgb2gray(X);

map=colormap(gray(255));

j=num2str(i);

imwrite(X,map,[nombre j '.bmp']);

end

end

if(strcmp(transformada,'espejo'))

for i=1:numFrames,

[X,map] = frame2im(mov(i));

X=espejo(X);

j=num2str(i);

map=colormap();

imwrite(X,map,[nombre j '.bmp']);

end

end

close();

end

function frameE=espejo(frame)

rows=size(frame,1);

col=size(frame,2);

fila=1;

frameE=[];

while(fila<=rows)

c=[];

colE=col;

while(colE>0)

e=frame(fila,colE,:);

c=[c e];

colE=colE-1;

end

frameE=[frameE;c];

fila=fila+1;

end

end

El usuario generó un ejecutable de su código usando la herramienta mcc:

Page 56: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 5: EJEMPLO DE USO DE LA APLICACIÓN

48

mcc -m framesTransformados.m -o ExtraerFramesTransformados

Así pues, de vuelta a la aplicación, el usuario pulsa en la barra de herramientas la opción

‘Algoritmos’ y selecciona ‘Subir algoritmo’. Le especificará el nombre, una breve descripción,

y subirá el ejecutable ExtraerFramesTransformados.exe y el archivo

ExtraerFramesTransformados.ctf. Después establece los parámetros, que son ‘Video’ de tipo

‘Archivo de la base de datos’ y ‘Número de frames’, ‘Transformada’ y ‘Nombre de frames’ que

son de tipo ‘Número o cadena de texto’ . Para añadir el cuarto parámetro tiene que pulsar ‘Más

parámetros’ e introducirlo ahí. Con todo hecho, el usuario pulsa ‘Guardar algoritmo’ y éste se

registrará en la base de datos (figura 5.2).

Figura 5.2. Subir algoritmo

Una vez creado el algoritmo, el usuario va a subir un video al que quiere aplicarle su algoritmo.

Para ello, vuelve a la pantalla principal y pulsa ‘Archivos’ de la barra de herramientas y

selecciona ‘Subir archivo’. Aquí elije el archivo de su disco duro, lo describe, selecciona que es

de tipo video y lo relaciona con su algoritmo (figura 5.3).

Page 57: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 5: EJEMPLO DE USO DE LA APLICACIÓN

49

Figura 5.3. Subir archivo

Ya que ha creado el archivo, va a probar su algoritmo. Vuelve de nuevo a la pantalla principal y

pulsa ‘Elegir algoritmo’. Busca con la ayuda de los parámetros de la parte superior,

seleccionando su nombre de usuario para que muestre todos los algoritmos que haya subido.

Elije ‘Extraer_frames’ y pulsa ‘Ejecutar’. Se le mostrará una ventana donde poner los valores de

los parámetros que definió en su algoritmo.

En el parámetro ‘Video’ le aparece un botón donde buscar los archivos de la base de datos. Lo

pulsa y selecciona ‘VideoDePrueba.avi’. Para comprobar que es ese, puede visualizarlo antes

con el botón ‘Visualizar’. Una vez elegido, sigue rellenando parámetros. Quiere que devuelve 3

frames, que les haga la transformada de pasar a blanco y negro (para ello escribe byn) y

establece el nombre frame como nombre de los fotogramas resultantes. Pulsa el botón ‘Ejecutar’

y, tras unos minutos de proceso, la aplicación le indicará que se ha ejecutado con éxito, y le

permitirá ver los archivos resultantes (figura 5.4).

Page 58: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 5: EJEMPLO DE USO DE LA APLICACIÓN

50

Figura 5.4. Ejecutar

Pulsa en ‘Descargar archivos resultantes’ y le aparecerá la ventana de gestión de archivos

resultantes, con los tres frames generados (figura 5.5).

Figura 5.5. Buscar archivos resultantes

Después de visualizarlos y analizarlos, decide eliminar uno, descargar otro y mover el último a

la tabla archivos, para que él y otros desarrolladores puedan usar esas imágenes en el futuro.

Al eliminar, se le muestra un mensaje para que verifique que quiere eliminarlo realmente.

Al descargar, se le muestra una ventana donde elegir ubicación (figura 5.6).

Page 59: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 5: EJEMPLO DE USO DE LA APLICACIÓN

51

Figura 5.6. Descargar

Y al mover, podrá elegir con que nombre, descripción y tipo se moverá a la tabla archivos

(figura 5.7):

Figura 5.7. Mover a archivos

Por último, puede ver que en la tabla archivos se encuentra, efectivamente, el archivo movido.

Para ello vuelve a la pantalla principal, elige ‘Archivos’ y selecciona ‘Buscar archivos’. Filtra la

búsqueda por ‘Algoritmo asociado’ igual a ‘Extraer_frames’ y ahí se encuentra el archivo

(figura 5.8).

Page 60: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 5: EJEMPLO DE USO DE LA APLICACIÓN

52

Figura 5.8. Buscar archivos

Page 61: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

6.1 CONCLUSIONES

53

CAPÍTULO 6:

CONCLUSIONES

6.1. Conclusiones

Viendo esta aplicación, se puede comprobar la gran utilidad de los servicios web. Gracias a

ellos, se puede programar una aplicación como esta, que permite usar algoritmos de procesado

multimedia de forma remota. Así, cualquier usuario, tanto estudiante como profesional, y ya sea

en el ámbito personal, docente o investigador, podrá compartir sus propios algoritmos que haya

desarrollado o usar los algoritmos que haya aportado otros usuarios. Y esto sin necesidad de

tener nada instalado en su ordenador, con la comodidad que eso conlleva, es decir, no depender

de grandes requerimientos en el equipo para ejecutar complejos cálculos gráficos y

matemáticos, y de no perder el tiempo en la configuración de todos los programas necesarios.

El programa cliente que consume los servicios puede ser diseñado como aplicación de escritorio

o aplicación web. En este caso se ha optado por la aplicación escritorio, por la gran facilidad

al programar que presenta Visual Studio y el lenguaje C#. Además, se ha considerado hacerlo

así porque el hecho de que se ejecute localmente permite una mayor rapidez a la hora de

manipular y navegar por la aplicación, y puesto que en principio se ha pensado para que se

comparta en un grupo ‘cerrado’ (los profesores de un departamento, por ejemplo) no se ha visto

necesario crearlo como aplicación web, aunque perfectamente podría haberse hecho así, con sus

correspondientes ventajas.

6.2. Trabajos futuros

Una de las grandes ventajas de los servicios web es que pueden ser utilizados en otras

aplicaciones futuras. Por lo tanto, si se quiere desarrollar nuevos programas que consuman estos

servicios, podrá hacerlo sin ningún problema, incluso utilizando distintas tecnologías, ya que el

cliente y el servidor pueden estar diseñados con lenguajes diferentes.

Un trabajo para el futuro podría ser, como se ha comentado anteriormente, la de convertir la

aplicación cliente en una aplicación web, de forma que se acceda desde un portal de internet y

puedan usarla muchos usuarios.

Una posible mejora sería la de probar a usar algoritmos creados con otros lenguajes de

programación, aquí solo se ha probado con C++ y sobre todo con Matlab. Aunque en teoría todo

Page 62: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

CAPÍTULO 6: CONCLUSIONES

54

ejecutable que cumpla los 5 requisitos comentados en el punto 4.3.2. pueden funcionar en la

aplicación, se deberían hacer más pruebas con más lenguajes.

Como comentario final, decir que ha sido todo un reto para mí crear esta aplicación, y he

aprendido mucho sobre C#.net, ASP, Visual Studio y los servicios web. Esta tecnología permite

crear una gran variedad de utilidades y anima a seguir aprendiendo. Espero que este documento

pueda servir como guía a estudiantes o a cualquier interesado para la creación de este tipo de

aplicaciones, ya que, aunque no explique paso a paso todo el proceso de desarrollo, da a conocer

cómo se hacen muchos puntos importantes.

Page 63: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar

REFERENCIAS

55

Referencias

Bibliografía

[1] David Jorgensen, “Developing. NET web services with XML”, Rockland, MA :

Syngress Pub. Inc., 2002.

[2] Robert Tabor, “Servicios web XML de Microsoft.NET”, Madrid [etc]: Prentice Hall,

D.L. 2002

[3] Amos Gilat, “Matlab: una introducción con ejemplos prácticos”, Barcelona: Reverté,

2006.

Internet

[4] http://msdn.microsoft.com

[5] http://social.msdn.microsoft.com/Forums

[6] http://www.mathworks.com/

[7] http://technologyinterface.nmsu.edu/

[8] http://www.taringa.net/posts/ebooks-tutoriales/4577241/Integrar-Visual-Studio-2008-

con-Matlab.html

[9] http://www.quieroprogramar.com/2007-05-

11_GUARDAR_CONTRASENAS_DE_MANERA_SEGURA.html

[10] http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=115

Page 64: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar
Page 65: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar
Page 66: Memoria del Proyecto Fin de Másterconoce de antemano el WSDL que le informa de la localización y definición del servicio. En el paso 3 el cliente obtiene información de cómo interactuar