logoPlanificación y Optimización Paralela de Redes Logísticas de Transporte

Desarrollo

  1. Introducción
  2. Visual Studio 2010
  3. C#
  4. .NET Framework
  5. Despliege Web mediante IIS

 

Introducción

Aunque gran parte del esfuerzo de este proyecto ha corrido a cargo de la investigación de todo lo relacionado con los apartados anteriores (Desde como modelar una red de transporte de gas a cómo utilizar CPLEX, pasando por construir servicios web y explotar el paralelismo a través de los mismos) no podemos de dejar de hablar del trabajo que se ha invertido en el desarrollo de la misma. Vamos a pasar a describir el entorno de desarrollo que se ha usado en este proyecto, el lenguaje usado y los retos afrontados. Seguidamente comentaremos la implementación de partes críticas de la aplicación, ilustrándolas con código si es necesario.

volver al índice

Visual Studio 2010

Microsoft Visual Studio ha sido, tanto a lo largo de la última década como de la presente, el entorno de desarrollo de referencia para todos aquellos desarrolladores de aplicaciones basadas en sistemas operativos Windows (Microsoft Windows, Windows CE o Windows Mobile, entre otros). Su fiabilidad y robustez a la hora de diseñar, programar, desplegar y depurar aplicaciones son, junto con su versatilidad, el punto fuerte de este paquete integrado.

Visual Studio se pronuncia como uno de los paquetes más versátiles, debido fundamentalmente al amplio soporte que ofrece para numerosos lenguajes de programación, tales como Visual Basic, Visual J#, ASP.NET, C++ ó C#. Otros lenguajes como Python y Ruby también son soportados mediante la instalación de módulos y extensiones adicionales. Además, soporta lenguajes de marcado y estilo tales como XML, CSS o HTML.
El paquete contiene un avanzado editor de código y un depurador, así como un diseñador web. Además, cuenta con un completo editor de estructuras de Bases de Datos.

Esta herramienta no sólo se limita a ofrecer un soporte seguro para crear aplicaciones para entornos Windows. Va más allá, permitiendo a los desarrolladores programar sitios y servicios web, así como aplicaciones para móviles. Con este propósito, Microsoft ha procurado facilitar la tarea de intercomunicar todo este tipo de aplicaciones a través de un framework creado para tal fin en el año 2002, como es .NET, sobre el cuál haremos hincapié más adelante.

Como consecuencia del énfasis puesto por Microsoft en facilitar el desarrollo e implementación de paquetes web, surge esta última versión del framework, lanzada el 12 de Abril de 2010.

Los puntos fuertes de esta versión son, sin duda alguna, la facilidad de desarrollo y la integración total con Windows 7, así como la simplificación de las tareas relacionadas con el desarrollo de módulos y servicios web.
Se añadió retrocompatibilidad con múltiples versiones anteriores de .NET (incluyendo la actual 4.0) y se consiguió agilizar la implementación de servidores web gracias a IntelliSense -una potente herramienta de documentación e inserción de código-, pero el punto que verdaderamente hace falta destacar es el soporte que ofrece para poder interactuar de manera satisfactoria con los servidores IIS (Internet Information Service), que permiten publicar servicios web de manera sencilla.

Dada la naturaleza del presente proyecto, puramente basada en servicios web y orientada fundamentalmente a la recogida de parámetros de forma distribuida a través de diferentes servidores, se ha considerado oportuno el uso de la versión 2010 de Visual Studio, con el fin de agilizar la configuración y despliegue de dichos servicios web.

volver al índice

C#

Motivación

La utilización de CPLEX como una biblioteca adicional de Visual Studio ha motivado en el desarrollo de este proyecto el uso del lenguaje C#, a través del cuál se pueden hacer las llamadas hacia esta estructura. Aunque esto está soportado también en otros lenguajes, la relación entre C# y el framework .NET facilitaba mucho la creación de la parte web de la aplicación.


¿Qué es C#?

C# es un lenguaje de programación de propósito general, multiparadigma, imperativo, declarativo, fuertemente tipado y orientado a objetos.

Fue desarrollado y estandarizado por Microsoft en el año 2001 como parte de su, por entonces, nueva plataforma de desarrollo “.NET”. Su creación vino motivada por la necesidad de disponer de un lenguaje diseñado desde cero y sin elementos heredados de pasadas versiones de C y otros lenguajes, sin elementos innecesarios que dificultase la utilización e interacción con .NET y que resultase lo más sencillo posible para poder aprovechar su versatilidad y potencia.

Este lenguaje combina los mejores elementos de varios de los lenguajes de mayor difusión como C++, Java o Visual Basic. De hecho, su creador Anders Heljsberg fue también el creador de muchos otros lenguajes y entornos como Turbo Pascal, Delphi o Visual J++. La idea principal detrás del lenguaje es combinar la potencia de lenguajes como C++ con la sencillez de lenguajes como Visual Basic, y que además la migración a este lenguaje por los programadores de C/C++/Java sea lo más inmediata posible.

La implementación más conocida de la especificación de este lenguaje es Visual C#, incluida en todos los productos de la gama Visual Studio.

Threads en C#

Situándonos dentro del contexto de esta aplicación, resulta esencial e imprescindible de cara a mejorar la escalabilidad del sistema, así como la velocidad de respuesta, la recogida de diferentes parámetros y restricciones de forma distribuida mediante el envío de múltiples ficheros de restricciones procedentes de diferentes servidores, e incluso aprovechar las computadoras actuales multinúcleo procesando un modelo por cada uno de los núcleos.

Frente a la problemática de procesar más de un archivo a la vez, surge la necesidad de utilizar multithreading. Mientras tengamos la capacidad de crear enésimos hilos, podremos ejecutar el envío de cada archivo de forma independiente garantizando la máxima granularidad del sistema y contribuyendo a mejorar el tiempo de respuesta de la aplicación como consecuencia de explotar este paralelismo.

C# nos propone una sencilla forma de manipular individualmente los hilos a través de los métodos y directivas definidos en la librería System.Threading. Cada hilo pertenecerá a una nueva clase en la cuál será necesario definir, aparte de métodos y atributos propios, las siguientes directivas:

Para proceder a la creación de un hilo de esta clase previamente definida, es necesario pasar por parámetro a la constructora de la clase Thread esta función de inicio.

En el siguiente ejemplo hemos querido crear un thread de la clase MiClase, que contiene los métodos DoWork() y RequestStop() ya definidos:

Para que el hilo MiHilo inicie su ejecución, debemos llamar a MiHilo.Start() desde el proceso padre. Esto iniciará la ejecución del código definido en la función DoWork().

Para finalizar la ejecución, desde el proceso padre llamaremos a MiHilo.Join(), quedando éste suspendido hasta que se ejecute por completo el código de la región RequestStop().

De este modo, en el desarrollo de esta aplicación, se ha invocado al método UploadFile(...) -encargado de enviar desde el cliente los ficheros de parámetros al servidor- en la región DoWork() definida en la clase genérica a la cual pertenecen todos los hilos del programa.

volver al índice

.NET Framework

.NET es el framework (conjunto de tecnologías) desarrollado por Microsoft y lanzado en el año 2002 orientado fundamentalmente a la creación de software para Internet. Proporciona una enorme variedad de librerías y ofrece una interconexión total entre todos los lenguajes de programación soportados por la suite Visual Studio. Además, abstrae a las aplicaciones de las diferentes plataformas de hardware utilizadas entre diferentes redes.

El objetivo básico de este conjunto de herramientas no es otro que el de obtener un entorno específicamente diseñado para el desarrollo y ejecución del software en forma de servicios, que puedan ser hechos públicos y acceder a ellos a través de Internet, de una forma independiente al hardware, software y lenguaje de programación utilizado en el desarrollo o el soporte de dicha aplicación. Este entorno global es lo que en Microsoft denominan Plataforma. NET, y los servicios ya mencionados son los que denominan como servicios web.

El esfuerzo invertido por Microsoft en el fácil y rápido desarrollo de aplicaciones orientadas a la web se tradujo en el diseño del nuevo lenguaje C# ya comentado en el apartado anterior, con el fin de utilizar éste como bandera del ágil desarrollo futuro en .NET.

Para el desarrollo y ejecución de aplicaciones en este nuevo entorno tecnológico, Microsoft proporciona el conjunto de herramientas conocido como .NET Framework SDK, que incluye compiladores de lenguajes como C#, Visual Basic.NET, Managed C++ y JScript.NET específicamente diseñados para crear aplicaciones para él.

Abstracción

El corazón del framework .NET es el CLR (Common Language Runtime). Se trata de la máquina virtual de este paquete, y es la responsable de administrar la ejecución de los programas de .NET . Además, realiza una compilación intermedia de todos los lenguajes soportados en un lenguaje de bajo nivel denominado CIL (Common Intermediate Language), que posteriormente se traduce a instrucciones máquina que son ejecutadas por la CPU. Ésta es la forma a través de la cual .NET consigue abstraer las aplicaciones de manera independiente al lenguaje de programación utilizado.

.NET esquema

La última versión estable de .NET en el mercado es la 4.0, lanzada a la par que Visual Studio 2010 (Abril 2010). Como principal atractivo, esta versión cuenta con un soporte e integración total con Windows 7, y además está optimizada para el uso de múltiples procesadores y el enorme poder de procesamiento paralelo que el hardware más reciente posee, lo cual resultaba básico y esencial a la hora de poder llevar a cabo la parte más interesante de este proyecto: la explotación del paralelismo a gran escala.

volver al índice

Despliege Web Mediante IIS

Para el desarrollo de este proyecto se han utilizado el framework de desarrollo Visual Studio y el servidor de aplicaciones IIS. Aunando fuerzas, las herramientas de Microsoft permiten un rápido y cómodo desarrollo y despliegue de servicios web, ahorrando al programador tiempo en labores de escritura de ficheros de configuración , apertura de puertos o preparación de servidores FTP, entre otros, y a la vez permitiéndole total libertad para adecuar estos parámetros en caso de considerarlo necesario.

Creación y desarrollo

Visual Studio ofrece al usuario la posibilidad de crear proyectos basados en distintos esquemas. Para el caso que nos ocupa, el sistema permite el uso de un proyecto plantilla de servicio web basado en el lenguaje C#. Los ficheros que compilan servicios web llevan la extensión “.asmx”. Es un archivo de texto que sirve de punto de entrada direccionable del servicio Web XML. Hace referencia al código de ensamblados pre compilados, a un archivo de código subyacente o a un código contenido en el propio archivo .asmx. Veamos el ejemplo para este caso. El contenido del fichero es:

<%@ WebService Language="C#" CodeBehind="Service1.asmx.cs" Class="WebService2.Service1"%>

El parámetro “Language” define el lenguaje en que será implementado el servicio, “CodeBehind” hace referencia al archivo que implementará el servicio con la extensión correspondiente a su lenguaje, y “Class” nos indica nombre de la clase que implementa el servicio. Sin embargo, mediante el asistente de Visual Studio prácticamente no nos tendremos que preocupar de estos detalles.

IIS

Como se ha podido observar, el fichero que implementa las funcionalidades será de tipo “.asmx.” y una extensión correspondiente al lenguaje que implemente el servicio –“cs” para C#, “vb” para Visual Basic-.
Dentro de la clase que implementa el servicio, tendremos una constructora pública y los métodos que consideremos oportuno. De entre estos, tendremos que marcar con la anotación “WebMethod” aquellos métodos públicos que queramos hacer accesibles a aplicaciones que vayan a consumir el servicio. El atributo “WebMethod” proporciona algunas propiedades que permiten refinar el comportamiento del método, pero éstas quedan fuera del objeto de este estudio.

Despliegue

Una vez que hemos implementado nuestro servicio web, es hora de desplegarlo. Para el proceso de depuración durante el desarrollo, Visual Studio provee de un servidor local que nos permitirá hacer las pruebas oportunas. Para desplegar el servicio web y hacerlo accesible desde otros terminales, deberemos desplegarlo utilizando la herramienta Administrador de Internet Information Services -IIS-. Antiguamente esta herramienta tenía que ser adquirida o estaba incluida en determinadas compilaciones de Windows. Hoy en día viene integrada en Windows 7 y podremos acceder a ella a través de “Herramientas administrativas” en el Panel de Control.

IIS: Es un servidor web que provee de servicios FTP, SMTP, HTTP/s y NNTP*. Se compone de varios módulos para procesar páginas ASP, ASP.NET y otras como las de PHP o Perl. Actualmente ostenta el puesto del tercer servidor más utilizado, con un doce por ciento del total de peticiones.

administrador iis

Para poder desplegar el servicio que hemos creado en IIS, Visual Studio nos permitirá exportar el mismo mediante despliegue directo en el IIS, por FTP o creando una carpeta con los ficheros mínimos para ejecutarlo. Pinchando el botón derecho sobre nuestro proyecto y luego pulsando “Publish” podremos elegir las opciones de despliegue. De entre las opciones podremos elegir la dirección y puerto de despliegue. Si hacemos el despliegue mediante Web Deploy, tendremos que indicar la página que queremos que incluya el servicio. En caso de no existir en el servidor, IIS tomará automáticamente los pasos para crearla y desplegar el servicio. Si por el contrario elegimos la opción “File System”, deberemos encargarnos nosotros mismos de crear la página y mapear la ruta del servicio en la máquina servidor mediante el administrador de IIS.

Cabe destacar que, ya que Visual Studio provee de un servidor interno para probar aplicaciones en desarrollo, si creamos un servicio web mediante el asistente, a la hora de desplegarlo deberemos borrar una serie de líneas de la sección “configSections” ya que IIS las incluye en sus propios ficheros de configuración y no se admitirá la duplicidad. Estas opciones se refieren al manejador de scripts, los servicios de autenticación y de rol, o el controlador de Json.

 

volver al índice

Sistemas Informáticos | Facultad de Informática UCM | Curso 2011/2012