Mostrando entradas con la etiqueta WCF. Mostrar todas las entradas
Mostrando entradas con la etiqueta WCF. Mostrar todas las entradas

martes, 31 de enero de 2012

Invocando un servicio WCF desde una aplicación Metro (desde la misma máquina!!)


El otro día hablábamos de las limitaciones de comunicación entre aplicaciones Metro y Desktop hospedadas en la misma máquina establecidas en Windows 8. De hecho, hablábamos de la “NO” comunicación entre Metro y Desktop. Los pistoleros más rápidos dirán que donde dije Digo ahora digo Diego, pero esperar un poco antes de apedrearme en la plaza pública…

Comentábamos que por diseño, invocar desde una aplicación Metro a un servicio WCF expuesto en la misma máquina, no está permitido. Esto puede ser una restricción demasiado estricta (y totalmente injustificadas) si estamos desarrollando en la misma máquina el servicio y la parte Metro que la consume.

Para este tipo de casos (y no para saltarnos el control, que no tenéis una idea buena...) contamos con una herramienta de línea de comandos llamada CheckNetIsolation. Podemos leer un poco más al respecto aquí http://msdn.microsoft.com/en-us/library/windows/apps/hh452759.aspx

Acorde a dicha restricción, al acceder a dicho servicio, la aplicación Metro (sin ningún tratamiento previo) recibiremos una excepción del tipo EndPointNotFopundException con un mensaje tal que así:

{"There was no endpoint listening at ... that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details."}

Ok, a menos de que creas que la gente de Microsoft va de farol, es lo esperado, no?

Ahora viene lo interesante. Para permitir este tipo de comunicación (recuerda que la limitación solo se aplica a la misma máquina) debes seguir estos pasos:

Lo primero que debemos hacer es buscar en el registro la clave de la aplicación Metro con la que deseamos hacer la excepción. Para ello, abrimos el Regedit y buscamos la clave de la aplicación que cuelga de:

HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer

Fíjate en el valor de la propiedad displayname para poder identificarla.
Una vez que sepamos la rama concreta, puedes seleccionarla con el botón derecho y copykeyname y selecciona el nombre de la carpeta del mapping (desde S-1-15... hasta el final). Este <keyname> nos permitirá establecer la excepción más adelante.

A continuación, abre el “Developer Command Promp” y escribe “CheckNetIsolation” para acceder a la utilidad. Pégate una leidita el enlace anterior para evaluar un poco mas en detalle las capacidades de la herramienta.

En nuestro caso debemos escribir:

  • Para ver el listado de las aplicaciones ya excluidas del bloqueo de loopback:
    CheckNetIsolation.Exe LoopbackExempt –s
  • Para incluir nuestra aplicación como una excepción:
    CheckNetIsolation.exe LoopbackExempt -a -p=<keyname>
  • Para comprobar que ya ha sido correctamente incluida, pues vuelve a ejecutar el comando anterior (nunca te lo hubieses imaginado, verdad?)
    CheckNetIsolation.Exe LoopbackExempt –s

Una vez hecho esto, ya podremos consumir servicios de la misma máquina sin recibir la excepción comentada al principio del post, comprobado!!

domingo, 25 de julio de 2010

SOA != Client Server + WCF

El panorama actual en el mundo de desarrollo del software nos brinda más oportunidades de las que nunca habíamos tenido (quizás ni siquiera imaginado). Entre otros escenarios, la aparición de Internet ha propiciado el crecimiento de los sistema distribuidos, la orientación a servicios, el SaaS...

Este nuevo "el dorado" plantea características donde todas las empresas desean desembarcar sus activos. Por supuesto estos destinos son tan interesantes que muchos deciden tomar atajos para llegar a lo que creen el mismo destino, pero cuidado,
que como siempre, no es oro todo lo que reluce.

La formula del título viene a decir eso, se podría leer como:

SOA != Client Server + WCF

No es lo mismo desarrollar Software orientado a servicio que colocar una capa de WCF en una aplicación Cliente Servidor. Definitivamente NO ES LO MISMO...

Pero como ya sabemos las cosas no cambian solas, debemos como desarrolladores hacer un esfuerzo por ser conscientes de las nuevas reglas de juego con las que deseamos que nuestras aplicaciones den la talla.

Revisando mi experiencia el respecto podemos identificar los errores más comunes a la hora de crear Software orientadas a servicios:

  • Los servicios (aunque no te lo creas) no están (solo) para ti.
    Utiliza los recursos del servicio de manera razonable, piensa bien como y cuando realizar las llamadas evitando acaparar los recursos disponibles.
  • Al consumir otros servicios estas realizando una llamada remota, eres consciente?
    No hagas 17 peticiones con sus 17 serializaciones para pintar una pantalla. No me digas que son las clases que usas como DTO y que te van para el pelo para tu ORM...
    Todo el tiempo invertido en optimizar la comunicación tendrá un alto ROI, te lo aseguro.
    Por supuesto recibir 26 millones de objetos (bien serializados) es un problema a nivel de diseño de la aplicación. (consolida la información, pagina, trabaja por bloques pero no tires por ese camino bajo ningún concepto...)
  • Siempre piensa en que la disponibilidad nunca es del 100%
    Eso es así aunque algún comercial se empeñe en decir lo contrario.
    Pregúntate que ocurre si el servicio no está disponible y dota a tu aplicación de la inteligencia necesaria para responder ante tal situación de manera digna. Siempre es interesante valorar la posibilidad de realizar las comunicaciones de manera asíncrona.
    Ten en cuenta que no debes lanzar procesos que comprometan la estabilidad de los servicios, puesto que estos deben estar disponibles para los demás clientes.
    (Recuerda que trabajar por bloques "casi nunca" es opcional y con determinado volumen de datos es obligatorio)
    Piensa en la Alta disponibilidad, como hacer correr varias instancias en paralelo, clúster activo-pasivo antes de que te pille el toro...
  • Diseña un plan de contingencia y déjalo por escrito
    Si no quieres que la gente que mantiene la aplicación te llamen a las 3:00 de la madrugada por que se ha parado el servicio, dales los mecanismos oportunos para que operen con autonomía. Ten un poco de empatía y piensa que ellos no pueden controlar todas las aplicaciones que están en producción como los que lo han desarrollado. 
  • Escalabilidad no es solo una palabra más terminada en …idad
    Creo que está de más decirlo, pero evitar mantener el estado en el servidor entre tus llamadas te permitirá escalar mejor. Tomate la molestia de planificar mecanismos de escalabilidad vertical y horizontal si no quieres morir de éxito. Corregir este tipo de problemas a posteriori siempre es traumático.
    Ten en cuenta que todos los recursos son limitados, hasta el disco donde escribes el log se acaba si no tienes políticas de reciclaje. Piensa en que los servicios están diseñados para ejecutarse 24x7 y 365 días al año, en estos detalles debemos hacer especial énfasis.
  • La correcta gestión de excepciones te puede salvar la vida
    En relación con la disponibilidad, es crítico gestionar de manera lo más eficiente posible las excepciones. La tecnología está ahí hace tiempo solo debes esforzarte en aplicarla correctamente. Una excepción en un servicio debe gestionarse correctamente para que no comprometa su estabilidad y disponibilidad. Trabajar sobre ello puede mejorar mucho la QoS y reducir el coste de mantenimiento.
  • Invierte tiempo en pensar bien tus contratos
    Es importante ajustar el equilibrio entre la cohesion de los servicios y los clientes. Cuando desarrollamos orientado a servicio no debemos hacerlo ad-hoc a un cliente en particular. El servicio debe exponer una serie de funcionalidades bien definidas. Extendiendo esta característica conseguimos el correcto grado de cohesión.
    Ahora tampoco hagas que usar tus servicios sea un infierno...
  • Piensa bien cual es la mejor manera de establecer la comunicación con tus servicios
    La serialización y transporte de los objetos es una parte muy significativa del tiempo de procesamiento consumido. Piensa cuidadosamente la manera de exponer tus servicios al mundo. expón los endpoints que sean necesarios y afina los behaviors de los mismos para evitar matar moscas a cañonazos.

Como siempre, se hace camino al andar, así que la resolución de los problemas presentes en este tipo de escenarios también tenderá a converger (para estandarizarse más adelante) mientras todos maduraremos en el proceso.

Por supuesto surgirán nuevos problemas relacionados con llevar el mundo del desarrollo de software más allá, que para algo estamos aquí, no?

lunes, 19 de mayo de 2008

En que ando metido...

Hace tiempo que no cuento nada por aqui, así que voy a comentaros en que investigaciones ando metido ...

  • Entity Framework
  • WPF
  • WCF
  • Mock
  • SCRUM
  • PoliceInjection
  • MVC con comandos en WPF
  • JQuery
  • ...
Ya os iré constando cosillas interesantes.

Saludos

lunes, 24 de marzo de 2008

Versiones de ASP.NET

Con ASP.NET 3.5 Microsoft espera continuar su éxito en el refinamiento y mejora de ASP.NET.
Las buenas noticias es que Microsoft no ha eliminado o modificado funcionalidades. (Manteniendo la compatibilidad hacia atrás) El enfoque de la mayoría de los cambios y funcionalidades de alto nivel incorporados, es hacer su programación más productiva. (Eso esperemos al menos ;))

De cualquier manera, han existido cuatro liberaciones mayores de ASP.NET:
  • ASP.NET 1.0: La primera de las liberaciones creó el núcleo de la plataforma ASP.NET e introduce un amplio rango de funcionalidades esenciales.

  • ASP.NET 1.1: La segunda liberación añadió mejoras de rendimiento y corrección de errores pero no nuevas funcionalidades. (Lógico en los albores...)

  • ASP.NET 2.0: La tercera liberación recopiló una buena cantidad de funcionalidades nuevas, las cuales fueron creadas sobre la fontanería existente en ASP.NET. El énfasis general se centró en proveer a los desarrolladores con "regalitos" profabricados que pudiesen ser usados sin escribir mucho (o nada) de código. Algunas de estas nuevas funcionalidades incluidas de fabrica fueron en soporte para la navegación de sitios Web, características de temas para estandarizar el diseño de las páginas Web y una manera más fácil de recuperar la información de una base de datos.

  • ASP.NET 3.5: Esta cuarta liberación mantiene el mismo motor básico que ASP.NEt 2.0, pero añade algunas florituras y dos cambios dramáticos. (¡Como suena eso de importante!)

    Las mejora más significativa es el ASP.NET AJAX toolkit, el cual otorga a los desarrolladores Web mejores herramientas para crear sitios Web de respuesta rápida que incorporen ricos efectos normalmente vistos en aplicaciones de escritorio. (como por ejemplo el drag-and-drop y autocompletar)

    La otra innovación es el soporte para LINQ, un conjunto de mejoras del lenguaje incluidas en .NET 3.5 que permiten realizar búsquedas en datos de memoria de la misma manera que se consulta a una base de datos.

Nota:
Si se pregunta que ocurre con el ASP.NET 3.0, bien pues... no existe!

Microsoft empleó el nombre .NET 3.0 para liberar un conjunto de nuevas tecnologías, que incluían el Windows Presentation Foundation (WPF), Windows Workflow Foundation (WF) y Windows Communication Foundation (WCF), pero no incluyó ninguna actualización de la versión de ASP.NET

Un saludo.

lunes, 17 de marzo de 2008

Windows Communication Foundation (1)

El W.C.F. (no confundir con el W.T.F.! ;)) es el núcleo de las aplicaciones de comunicación orientadas a servicio (service-oriented) para la plataforma Windows.

Se coloca sobre los estándares de Servicios Web y está diseñada para las necesidades de la arquitectura orientada a servicio (S.O.A.) y el Software como servicio (Software As A Service (SAAS)) (Perdón por la anidación...)

Esta filosofía establece que el software debe ser construido alejado del "grano fino", con componentes débilmente acoplados y con interfaces bien definidas que se comuniquen empleando protocolos estándar.

Los Servicios Web fueron el principio de esta tendencia, donde la lógica de negocio de una manera independiente de la tecnología, exponiendo un interfaz basado en XML utilizando un lenguaje llamado Web Services Description Language (W.S.D.L.). Los desarrolladores pueden entonces emplear un mensaje XML con un formato llamado Object Access Protocol (S.O.A.P.) (Jabón para los profanos...) que deriva de XML para comunicar con el Sevicio.

Seguiremos profundizando...

Un saludo

jueves, 13 de marzo de 2008

Diferencias entre .NET Framework 3.0 y .NET Framework 3.5

Para aclarar un poco la cosa, digamos que el Framework 3.0 es esencialmente un add-on/plugin para el Framework 2.0 para añadir las funciones básicas para que las aplicaciones puedan engancharse con WPF, WCF, y pre LINQ.

.NET Framework 3.0, llamado antiguamente WinFX incluye un nuevo conjunto de APIs de código manejado que son una parte integral de los sistemas operativos Windows Vista y Windows Server 2008. También se encuentra disponible para Windows XP SP2 y Windows Server 2003 como descarga.

No hay cambios mayores de arquitectura en esta release; .NET Framework 3.0 emplea el Common Language Runtime del .NET Framework 2.0. A diferencia de releases previas del .NET no hay una release de .NET Compact Framework homologa.

Por su parte, el .NET Framework 3.5 que ha sido liberado por Microsoft recientemente es una release completa. Dicho Framework solo correrá sobre Windows XP SP2 o posterior y el soporte para LINQ es nativo.

Algunas características a tener en cuenta son:

  • Esta versión del Framework emplea la versión 2.0 del CLR (el mismo modelo que usa el .NET Framework). Sin embargo, instala el .NET Framework 2.0 SP1, el cual añade algunos métodos y propiedades, requeridos por las características .NET Framework 3.5 como LINQ a las clases de la BCL del .NET Framework 2.0. Dichos cambios no afectan a aplicaciones escritas para la versión 2.0 del Framework.

  • Tanto el soporte completo para los tipos de proyectos del .NET Framework 3.5, como compilaciones para .NET Framework 3.5 están incluidas en el Visual Studio 2008
  • El código fuente de la BCL (Base Class Library) de esta release será liberada bajo la licencia Microsoft Reference License. (Sí, han leído bien!!)

  • .NET Framework 3.5 SP1, con codename "Arrowhead", mejorará el soporte para aplicaciones ocasionalmente conectadas y provee soporte built-in para el Microsoft ASP.NET MVC Framework.

  • .NET Compact Framework 3.5 será liberado a la vez que esta actualización para proveer por ejemplo LINQ, HTTP compression y mejoras para el soporte de audio para dispositivos móviles.
Espero que les sirva de ayuda.

Un saludo

Windows SDK

Una de las características necesarias (pero no suficientes) de todo buen desarrollador de Software es la disposición a aprender a trabajar con nuevas tecnologías, mejores, más potentes, que modifican los hábitos y patrones de trabajo. (En caso contrario valore la posibilidad de dedicarse a la ebanistería... ;))

La rueda de Microsoft no deja de girar y se avecinan tiempos de evolución- revolución con la nueva versión del Microsoft .NET Framework.

Para que se hagan una idea de por donde van a ir, o mejor dicho, ya van, los tiros vamos a explicar algunso aspectos importantes del nuevo panorama.

El Windows SDK contiene todas las APIs para desarrollar la siguiente generación de aplicaciones Windows, incluidas las dirigidas a Windows Vista, y provee los cimientos para el desarrollo de software para las plataformas de cliente y servidor de Windows para el futuro inmediato. (más o menos inmediato que todavía hay por ahí quien desarrolla las aplicaciones en Access...)

El Windows SDK se centra en el .NET Framework 3.0 que contiene las clases con las que ya está familiarizado del .NET Framework 2.0 más WPF, WCF, y WWF.

Estas siglas (no tiene nada que ver con el Pressing Catch!) hacen referencia a los siguientes conceptos:
  • Windows Communication Foundation
  • Windows Workflow Foundation
  • Windows Presentation Foundation
Que veremos más en detalle en siguientes posts.

Un saludo