viernes, 14 de junio de 2013

Servicio de Mensajería

En la parte final del curso,se tocó el tema de mensajería ,el cual también será añadido como un requerimiento de software para el proyecto del curso.

A continuación se presenta algunas definiciones sobre mensajerías:

Un sistema de mensajería permite la comunicación entre aplicaciones a través de distintas
redes, o dentro de un mismo sistema. MQ brinda una API para que los programas clientes
reciban y envíen mensajes desde y hacia las colas (queues) sin poseer una conexión privada y
dedicada para ellos. Es decir, un sistema de mensajería permite la comunicación entre
aplicaciones de forma indirecta. Esto se logra mediante el envío de mensajes a un administrador
de mensajes, al cual están asociadas las aplicaciones, y es este último quien se encarga de
administrarlos y distribuirlos según diversas configuraciones.
El programador no especifica una aplicación de destino a la hora de enviar mensajes, sino que
especifica el nombre de una cola.
Una aplicación puede tener una o mas colas de entrada y una o diversas colas de salida.
El Arquitecto no debe preocuparse acerca de la tecnología existente en la aplicación destino, o si
la aplicación destino no se encuentra disponible (en el caso de los mensajes asincrónicos), sino
que el motor de colas se encarga de reenviar el mensaje si la misma se encuentra detenida o
bien de iniciarla dependiendo del caso.

Un mensaje consiste de dos partes:
• Data (información) que es enviada de una aplicación a otra.
• Header (cabecera) del mensaje o descriptor. Contiene información de control.
En el Header se especifica el ID del mensaje, tipo, prioridad, tiempo de expiración y el
nombre de la cola para la respuesta. El tamaño del mensaje puede tener un máximo de 4
MB o 100 MB dependiendo de la versión de MQ.

Conceptos de Mensajería

Bajo acoplamiento
Uno de los principales beneficios de los sistemas de mensajería es el bajo acoplamiento. A
continuación se discuten dos aspectos.
 Acoplamiento de Procesos
El bajo acoplamiento a nivel de procesos se debe a que el proceso emisor no debe
preocuparse del estado del receptor, ya que el maganer de colas es quien recibe el
mensaje y se encarga de enviárselo al receptor tan pronto como este esté nuevamente
en línea o bien sea consultado por este último. A modo de comparación, se podría
imaginar al Queue Manager como un servidor de correros que retiene los mismos hasta
que sean consultados/extraídos por los cliejntes.
 Acoplamiento de Aplicaciones
Las aplicaciones no deben preocuparse de adaptar su forma de comunicación según la
interfaz del receptor del mensaje, sino que debe hacerlo adaptándose al manager de
colas. Estos últimos suelen tener estándares abiertos para permitir la conectividad.
Este enfoque permite que los clientes se focalicen en el formato del mensaje mas que
por el formato de la interfaz destino.
Tipos de mensaje
A continuación se mencionan los cuatro tipos de mensajes soportados por MQ:
• Datagram: El mensaje no espera respuesta
• Request: El mensaje espera respuesta
• Reply: Una respuesta a un Request
• Report: Mensaje que describe un evento como por Ej. un error en el envío.

Modelos de mensajería
Esta clasificación ocurre para mensajes de tipos asincrónicos mencionados
 y describe la cardinalidad entre el par emisor-receptor.
 Punto a Punto
En este modelo, los mensajes son enviados hacia un destino específico, por lo general,
el nombre de una cola, donde son extraídos por la aplicación. Es decir, hay un mapeo
uno a uno entre el emisor y el receptor. La cola retiene todos los mensajes hasta que
estos son extraídos o bien expiran por tiempo. Este modelo posee las siguientes
características:
• Cada mensaje tiene un solo consumidor.
• El emisor y receptor no tienen dependencia de tiempo. El receptor puede
obtener el mensaje independientemente si este estaba ejecutando cuando el
emisor envió el mensaje.
• El receptor notifica cuando el mensaje fue consumido exitosamente
(acknowledge).






Para más información se adjunta el siguiente enlace :http://apit.wdfiles.com/local--files/start/03_apit_intro_mensajeria.pdf

Web Service SOAP Vs Web Service REST

Luego de tener una noción sobre que es un web service ,investigamos cuál de estos 2 servicios web es el más conveniente .Sin descuidar que significa y  que beneficios o desventajas trae cada servicio.

¿Cuáles son las características de REST y SOAP en
definitiva?
Según hemos visto a lo largo del documento, el principal beneficio de SOAP recae en
ser fuertemente acoplado, lo que permite poder ser testado y depurado antes de poner en
marcha la aplicación. En cambio, las ventajas de la aproximación basada en REST
recaen en la potencial escalabilidad de este tipo de sistemas, así como el acceso con
escaso consumo de recursos a sus operaciones debido al limitado número de
operaciones y el esquema de direccionamiento unificado.
A modo de resumen :

¿Cuáles son las diferencias?
La principal diferencia entre REST y SOAP se resume en los siguientes puntos de vista
del propósito de la Web:





Por qué utilizar Web Services?

Algunas definiciones de Servicios Web o Web Services son:
-Un Web Service es una parte del software que puede comunicarse con otra aplicación a través de una red usando un juego específico de protocolos estandarizados- SOAP, UDDI, WSDL. (Vignette)

-Los Web Services proveen la “interfaz de usuario” para que las aplicaciones puedan comunicarse entre si (sin importar el sistema operativo sobre el que corren o el lenguaje de programación que utilizan). Esto de forma muy parecida a los protocolos HTML y HTTP provee una “interfaz de usuario”, para el funcionamiento de la comunicación e aplicaciones Web (Internet). (BEA)
Los Web Services son componentes de aplicaciones que utilizan alguno de las siguientes tecnologías –SOAP, WSDL y UDDI – para ejecutar en redes de computadoras distribuida. El uso de cualquiera de las tecnologías básicas – SOAP, WSDL y UDDI - se constituye en un Web Service. El uso de todas las tecnologías no es necesario (Gertner).
Los servicios Web son aplicaciones auto-contenidas, auto-descriptivas y modulares, que pueden ser publicadas, localizadas e invocadas a través del Web y que cuentan con un mecanismo estándar para establecer la comunicación con otros tipos de software a través de la red.


“La idea es que cualquier cosa puede ser un Servicio Web”. “los servicios Web son esencialmente un nivel de infraestructuras existente entre modelos de componentes”.

Desde el punto de vista de los negocios, los Servicios Web permiten que las organizaciones integren sus diferentes aplicaciones de una manera eficiente, sin preocuparse por cómo fueron construidas, dónde residen, sobre qué sistema operativo se ejecutan o cómo acceder a ellas. Precisamente por esta razón es que los servicios Web se consideran integradores, por que permiten crear una interfaz de acceso a las aplicaciones, son importar las características de implementación de estás.
Un Servicio Web simple está caracterizado por cuatro estándares: XML, SOAP, UDDI, y WSDL, los cuales al trabajar juntos proporcionan una funcionalidad básica de tipo “solicitud / respuesta”. Los servicios Web simples pueden utilizarse para entregar de forma eficiente información como noticias, inventarios y reportes de clima a los sitios Web, mientras que un Servicio Web complejo pide involucrar transacciones más elaboradas entre varias partes, involucrado servicios de negocios o proveedores y basando en los estándares de E-bussines (por ejemplo: XML) si un comerciante necesita surtir su tienda, puede utilizar un Servicio Web para hacer una solicitud, enviar su oferta a la tienda en línea la aplicaciones que origina el mensaje podría seleccionar automáticamente la oferta con una mejor relación costo/beneficios.

Ventajas ;

  • Los Web Services utilizan un fuerte sistema de seguridad en los firewalls ya que se encuentran apoyados en la tecnología http sobre tcp.
  • No está vinculados a intereses particulares de alguna empresa.
  • Permite la comunicación de softwares ubicados en distintos lugares geográficos
  • Al utilizar http, todo entra y sale mediante una vía única, el 80.
  • Están basados en XML, lo que lo hace fácil de interpretar.
  • Aportan interdepencias de la aplicación y las base de datos.

Conclusión:

Utilizar Web Services para integrar y comunicar aplicaciones distribuidas distintas  ubicados en distintos lugares geográficos mediante la red.



Empezando a programar en MVC2

Cómo crear un proyecto nuevo de MVC en Visual Studio 2010


Esta interrogante me llevó a investigar acerca de cómo programar en MVC ;ya que era un requisito de construcción del sistema dentro del  curso de Desarrollo de Sistemas Distribuidos.

Investigué la lógica de la programación .Asimismo,también  las ventajas y desventajas que presenta .


Ventajas de ASP.NET MVC
  • Ha sido diseñados desde cero para realizar SoC y TDD.
  • No se realizan postback para atender una petición del usuario.
  • El Viewstate no es necesario para mantener el estado de la página.
  • No se utilizan controles de servidor con los que se pierde el control del html generado.
  • No depende de archivos aspx físicos.
  • El entorno de tiempo de ejecución es en gran medida la misma que en formularios Web Forms ASP.NET, pero el ciclo de solicitud es más sencillo y más directa.
  • Una parte esencial del modelo de formularios Web Forms, el ciclo de vida de página, ya no es necesaria en ASP.NET MVC.
Inconvenientes de ASP.NET MVC
  • Control total sobre HTML, JavaScript y CSS, ASP.NET MVC significa que se introducen manualmente los elementos Web.
  • Toma un paso hacia atrás en términos de productividad y facilidad de uso.
  • Se requiere familiarización inicial con el patrón MVC. Se tiene que saber cómo funcionan conjuntamente los controladores y vistas en la implementación de ASP.NET.
  • No se puede aprender fácilmente experimentando lo que disminuye la productividad de los desarrolladores.
La decisión final sobre que framework utilizar dependerá de cuales de las características de ambos frameworks se adaptan a las necesidades del proyecto a desarrollar. Si quieren empezar a aprender un poco mas sobre el Framework  ASP.NET MVC les recomiendo que visiten los siguientes link donde el mismo Scott Guthrie explica las bondades y características del Framework  ASP.NET MVC.
A continuación muestro un tutorial que me sirvió de mucho a la hora de iniciar en la construcción del proyecto en el mundo MVC de .NET
  1. En el menú Archivo, haga clic en Nuevo proyecto.
    Aparecerá el cuadro de diálogo Nuevo proyecto.
    Cuadro de diálogo Nuevo proyecto
  2. En la esquina superior derecha, asegúrese de que esté seleccionado .NET Framework 3.5.
  3. En Tipos de proyecto, expanda Visual Basic o Visual C# y, a continuación, haga clic en Web.
  4. En Plantillas instaladas de Visual Studio, seleccione Aplicación web de ASP.NET MVC 2.
  5. En el cuadro Nombre, escriba MvcBasicWalkthrough.
    1. En el cuadro Ubicación, escriba un nombre para la carpeta de proyecto.
    2. Si desea que el nombre de la solución difiera del nombre del proyecto, escriba un nombre en el cuadro Nombre de la solución.
    3. Seleccione Crear directorio para la solución.
    4. Haga clic en Aceptar.
      Aparecerá el cuadro de diálogo Crear proyecto de prueba unitaria.
      Cuadro de diálogo Crear pruebas unitarias
      NotaNota
      Si está utilizando las ediciones Standard o Express de Visual Studio, no se muestra el cuadro de diálogo Crear proyecto de prueba unitaria. En su lugar, el nuevo proyecto de aplicación MVC se genera sin un proyecto de prueba.
    5. Seleccione Sí, crear un proyecto de prueba unitaria.
      De forma predeterminada, el nombre del proyecto de prueba es el nombre del proyecto de aplicación y se le agrega "Tests". Sin embargo, puede cambiar el nombre del proyecto de prueba. De forma predeterminada, el proyecto de prueba utilizará el marco de pruebas unitarias de Visual Studio. Para obtener información sobre cómo utilizar un marco de pruebas de otro fabricante, vea Cómo: Agregar un marco de pruebas de ASP.NET MVC personalizado en Visual Studio.
    6. Haga clic en Aceptar.
      Se generan el nuevo proyecto de aplicación MVC y un proyecto de prueba. (Si está utilizando las ediciones Standard o Express de Visual Studio, no se crea el proyecto de prueba.)

      La ilustración siguiente muestra la estructura de carpetas de una solución de MVC recién creada.
      Estructura de carpetas de MVC
      La estructura de carpetas de un proyecto de MVC difiere de la de un proyecto de sitio web de ASP.NET. El proyecto de MVC contiene las carpetas siguientes:
      • Content, para los archivos de compatibilidad del contenido. Esta carpeta contiene la hoja de estilos en cascada (archivo .css) para la aplicación.
      • Controllers, para los archivos de controlador. Esta carpeta contiene los controladores de ejemplo de la aplicación, que se denominanAccountController y HomeController. La clase AccountController contiene la lógica de inicio de sesión para la aplicación. La claseHomeController contiene la lógica a la que se llama de forma predeterminada cuando la aplicación se inicia.
      • Models, para los archivos de modelo de datos como los archivos .dbml de LINQ to SQL o los archivos de entidad de datos.
      • Scripts, para los archivos de script, como los compatibles con ASP.NET AJAX y jQuery.
      • Views, para los archivos de paginación de vistas. Esta carpeta contiene tres subcarpetas: Account, Home y Shared. La carpeta Account contiene vistas que se utilizan como interfaz de usuario para el inicio de sesión y para cambiar las contraseñas. La carpeta Home contiene una vista Index (la página de inicio predeterminada para la aplicación) y una vista de página Acerca de. La carpeta Shared contiene la vista de la página maestra para la aplicación.

        El proyecto de MVC recién generado es una aplicación completa que puede compilar y ejecutar sin cambios. La ilustración siguiente muestra cómo aparecía la aplicación al ejecutarla en un explorador.
        Vista de aplicación predeterminada
        El proyecto de prueba unitaria también está listo para compilar y ejecutar. Para este tutorial, agregará un controlador con un método de acción y una vista y agregará una prueba unitaria para el método de acción.

        Ahora agregará un controlador que contiene la lógica para descargar mapas urbanos del servicio Web Microsoft Virtual Earth.

        Para agregar un controlador al proyecto de MVC

        1. En el Explorador de soluciones, haga clic con el botón secundario en la carpeta Controllers, haga clic en Agregar y, a continuación, haga clic enControlador.
          Aparece el cuadro de diálogo Agregar controlador.
          Cuadro de diálogo Agregar controlador
        2. En el cuadro Nombre, escriba MapsController.
          El marco de ASP.NET MVC exige que los nombres de controlador acaben en "Controller", como HomeControllerGameController oMapsController.
        3. Desactive la casilla Agregar métodos de acción para los escenarios Create, Update y Details.
        4. Haga clic en Agregar.
          Visual Studio agrega la clase MapsController al proyecto y lo abre en el editor.

        Para aplicar técnicas de desarrollo basado en pruebas (TDD) a este proyecto debe escribir la prueba unitaria para un método de acción antes de escribir el propio método de acción. Sin embargo, si desea que su prueba unitaria se compile, debe tener un código auxiliar para el método de acción planeado, que en este tutorial es ViewMaps.

        Para agregar un código auxiliar de método de acción

        1. Abra o cambie a la clase MapsController.
        2. Reemplace el método de acción Index con el código siguiente para crear el código auxiliar de método de acción ViewMaps.
          Function ViewMaps()
              ' Add action logic here
              Throw New NotImplementedException()
          End Function
          
          public ActionResult ViewMaps()
          {
              // Add action logic here
              throw new NotImplementedException();
          }

    Después agregará una vista Maps. Para mantener las vistas organizadas, agregará primero una carpeta Maps bajo la carpeta Views.

    Para agregar una vista de contenido de página al proyecto de MVC

    1. Abra la clase MapsController, haga clic con el botón secundario del mouse dentro del método de acción ViewMaps y, a continuación, haga clic enAgregar vista.
      Se mostrará el cuadro de diálogo Agregar vista.
      Cuadro de diálogo Agregar vista
    2. En el cuadro Nombre de vista, escriba ViewMaps.
    3. Desactive las casillas Crear una vista parcial (.ascx) y Crear una vista fuertemente tipada.
    4. Active la casilla Seleccionar la página maestra y establezca la página maestra en ~/Views/Shared/Site.Master.
    5. Establezca ContentPlaceHolder ID en "MainContent".
    6. Haga clic en Agregar.
      La nueva vista se agrega al proyecto en la carpeta Maps.

    A continuación, agregará contenido a la nueva vista.

    Para agregar contenido a la vista

    1. Abra ViewMaps.aspx y agregue el contenido siguiente dentro del elemento Content:
      <h2>My City Maps</h2>
      Select map: 
      <select onclick="GetMap(value);">
          <option value="Seattle">Seattle, WA</option>
          <option value="LasVegas">Las Vegas, NV</option>
          <option value="SaltLake">Salt Lake City, UT</option>
          <option value="Dallas">Dallas, TX</option>
          <option value="Chicago">Chicago, IL</option>
          <option value="NewYork">New York, NY</option>
          <option value="Rio">Rio de Janeiro, Brazil</option>
          <option value="Paris">Paris, France</option>
          <option value="Naples">Naples, Italy</option>
          <option value="Keta">Keta, Ghana</option>
          <option value="Beijing">Beijing, China</option>
          <option value="Sydney">Sydney, Australia</option>
      </select>
      <br />
      <br />
      <div id='earthMap' style="position:relative; width:400px; height:400px;">
      </div>
      <script charset="UTF-8" type="text/javascript" 
          src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2&mkt=en-us">
      </script>
      <script type="text/javascript">
          var map = null;
          var mapID = '';
      
          function GetMap(mapID)
          {
              switch (mapID)
              {
                  case 'Seattle':
                      map = new VEMap('earthMap');
                      map.LoadMap(new VELatLong(47.6, -122.33), 10 ,'i', true);
                      break;
                  case 'LasVegas':
                      map = new VEMap('earthMap');
                      map.LoadMap(new VELatLong(36.17, -115.14), 10 ,'i' ,true);
                      break;
                  case 'SaltLake':
                      map = new VEMap('earthMap');
                      map.LoadMap(new VELatLong(40.75, -111.89), 10 ,'i' ,true);
                      break;
                  case 'Dallas':
                      map = new VEMap('earthMap');
                      map.LoadMap(new VELatLong(32.78, -96.8), 10 ,'i' ,true);
                      break;
                  case 'Chicago':
                      map = new VEMap('earthMap');
                      map.LoadMap(new VELatLong(41.88, -87.62), 10 ,'i' ,true);
                      break;
                  case 'NewYork':
                      map = new VEMap('earthMap');
                      map.LoadMap(new VELatLong(40.7, -74), 10 ,'i' ,true);
                      break;
                  case 'Rio':
                      map = new VEMap('earthMap');
                      map.LoadMap(new VELatLong(-22.91, -43.18), 10 ,'i' ,true);
                      break;
                  case 'Paris':
                      map = new VEMap('earthMap');
                      map.LoadMap(new VELatLong(48.87, 2.33), 10 ,'i' ,true);
                      break;
                  case 'Naples':
                      map = new VEMap('earthMap');
                      map.LoadMap(new VELatLong(40.83, 14.25), 10 ,'i' ,true);
                      break;
                  case 'Keta':
                      map = new VEMap('earthMap');
                      map.LoadMap(new VELatLong(5.92, 0.983), 10 ,'i' ,true);
                      break;
                  case 'Beijing':
                      map = new VEMap('earthMap');
                      map.LoadMap(new VELatLong(39.91, 116.39), 10 ,'i' ,true);
                      break;
                  case 'Sydney':
                      map = new VEMap('earthMap');
                      map.LoadMap(new VELatLong(-33.86, 151.21), 10 ,'i' ,true);
               }
          }   
      </script>
      
      
      
      Este marcado define una lista desplegable para seleccionar un mapa y la lógica de JavaScript para recuperar el mapa seleccionado del servicio Web Microsoft Virtual Earth.
    2. Guarde y cierre el archivo.

    Agregará ahora un elemento al menú de página maestra que llama al método de acción ViewMaps.

    Para agregar una pestaña al menú de página maestra

    1. En la carpeta Shared, abra el archivo Site.master y busque la lista no ordenada (elemento ul) en el elemento div cuyo identificador es "menucontainer".
    2. Agregue el código siguiente a la lista entre el Índice y las pestañas About Us:
      <li><%= Html.ActionLink("My City Maps", "ViewMaps", "Maps")%></li>
      
      
      
      El método ActionLink es un método auxiliar con vínculos a un método de acción. Toma los parámetros siguientes: el texto del vínculo, el nombre del método de acción y el nombre del controlador.
    3. Guarde y cierre el archivo.

    Ya puede probar la aplicación.

    Para probar la aplicación MVC

    1. En el menú Prueba, haga clic sucesivamente en EjecutarTodas las pruebas de la solución.
      Los resultados se muestran en la ventana Resultados de pruebas. Esta vez las pruebas se realizan correctamente.
    2. En Explorador de soluciones, seleccione el proyecto de tutorial y presione CTRL+F5 para ejecutar la aplicación.
      Se muestra la página Index.aspx, que incluye las pestañas que están definidas en la página maestra.
    3. Haga clic en la pestaña My City Maps.
      Se muestra la página My City Maps. Seleccione cualquier mapa para verlo en pantalla.
      Vista de mapas