Featured Posts

Diplomado de desarrollo de aplicaciones para Windows Phone 7.1–LatinoaméricaDiplomado de desarrollo de aplicaciones para Windows... Los invito cordialmente a que se inscriban al Diplomado de desarrollo de aplicaciones para Windows Phone 7.1, impulsado por Microsoft México para todo el mundo!  Completamente...

Readmore

Nueva carrera en Microsoft Virtual Academy: Windows Phone 7.1 (Mango)Nueva carrera en Microsoft Virtual Academy: Windows... Tengo el gusto de darles a conocer la disponibilidad de una nueva carrera en el Microsoft Virtual Academy (MVA): La carrera de Windows Phone 7.1 Mango. Esta es la descripción...

Readmore

Nueva carrera en Microsoft Virtual Academy: Silverlight 4Nueva carrera en Microsoft Virtual Academy: Silverlight... ¿Eres estudiante de Microsoft Virtual Academy (MVA)? Tengo el gusto de anunciarles oficialmente el lanzamiento de la nueva carrera de Silverlight 4 para esta plataforma educativa. La...

Readmore

Rodrigo Díaz Concha Rss

Silverlight 4 – Conexión Local

Posted on : 21-06-2010 | By : Rodrigo | In : Silverlight 4

Tags: ,

4

Silverlight 4 – Conexión Local

 

Introducción

(Este artículo fue escrito originalmente para Silverlight 3 el cual podrán encontrar en esta dirección.)

En Silverlight 4 tenemos una característica que permite comunicarnos entre diferentes aplicaciones dentro de la misma máquina.  Esta característica está bautizada como Conexión Local (Local Connection en inglés).

Esta funcionalidad nos ofrece un mecanismo poderoso para poder complementar nuestros aplicativos que requieran tener comunicación entre sí, ya que implementar esta característica es bastante sencillo como lo demostraremos en este artículo.

System.Windows.Messaging

Todas las clases necesarias para la implementación de la conexión local entre aplicaciones están incluidas en el espacio de nombres System.Windows.Messaging

Clase LocalMessageSender

Esta clase permite el envío de mensajes a un receptor por medio del nombre especificado.  Además permite establecer el nombre del dominio en el que se encuentra el receptor.  Incluye el método SendAsync() el cual enviará el mensaje de manera asíncrona al receptor.  Una vez enviado el mensaje se disparará el evento SendCompleted, el cual incluye en sus argumentos la propiedad Error la cual nos indica si sucedió una excepción durante el envío del mensaje.

Clase LocalMessageReceiver

Análoga a la clase LocalMessageSender, esta clase nos permite recibir mensajes.  También aquí establecemos el nombre del receptor, que deberá concordar con el nombre establecido en el objeto de tipo LocalMessageSender.  Una vez recibido un mensaje se dispara el evento MessageReceived el cual incluye en sus argumentos la propiedad Message de tipo string, misma que contiene el mensaje enviado por la aplicación origen.

Además de esto podemos especificar los dominios válidos de los que puede recibir mensajes este objeto!

Modelo Publicador-Subscriptor

Es a través de este modelo publicador-subscriptor por el cual podemos implementar comunicación entre diferentes aplicaciones de Silverlight 4 en la misma página, o en diferentes pestañas del Navegador… incluso entre diferentes instancias de Navegadores, INCLUSO entre diferentes tipos de Navegadores (Internet Explorer, Firefox, Chrome, Safari, etc.!).

Es importante mencionar además que una aplicación de Silverlight no está limitada a ser únicamente publicador o subscriptor, sino que puede ser ambos!  Esto es, podemos establecer una comunicación local bidireccional entre aplicaciones.  El único requisito es tener los objetos LocalMessageSender y LocalMessageReceiver en cada aplicación de manera correcta.

La Solución

La solución que crearemos estará compuesta de dos aplicaciones Silverlight.  La aplicación Origen permitirá la captura de contenido Xaml dentro de un TextBox e incluirá un botón para enviar el Xaml a la aplicación Destino.

La aplicación Destino por su parte estará escuchando nuevos mensajes que le envíe la aplicación Origen.  Cuando llegue efectivamente un mensaje, interpretará el Xaml convirtiendo todo el árbol de contenido en los elementos visuales correspondientes al código, y los dibujará dentro de un Grid llamado LayoutRoot.

Ambos proyectos de Silverlight estarán contenidos en una misma solución, la cual también incluirá una Aplicación Web para poder probar la funcionalidad.  Además ambos proyectos estarán relacionados a la misma Aplicación Web para que nos cree automáticamente las páginas de prueba.  La siguiente figura muestra la estructura de la solución:

Origen

La aplicación Origen contiene un TextBox para escribir una cadena de Xaml válida que se enviará al destino.  Además contiene un botón que hará efectivamente el envío del mensaje.  El siguiente fragmento de código muestra la implementación de la aplicación Origen:

   1: using System.Windows;

   2:  

   3: using System.Windows.Controls;

   4:  

   5: using System.Windows.Messaging;

   6:  

   7:  

   8:  

   9: namespace SL3ConexionLocal.Origen

  10:  

  11: {

  12:  

  13:     public partial class MainPage : UserControl

  14:  

  15:     {

  16:  

  17:         LocalMessageSender sender;

  18:  

  19:         public MainPage()

  20:  

  21:         {

  22:  

  23:             InitializeComponent();

  24:  

  25:  

  26:  

  27:             sender = new LocalMessageSender("SL3ConexionLocal");

  28:  

  29:             

  30:  

  31:             SendXamlButton.Click += (s, a) =>

  32:  

  33:             {

  34:  

  35:                 sender.SendAsync(XamlTextBox.Text);

  36:  

  37:             };

  38:  

  39:             

  40:  

  41:             sender.SendCompleted += (s, a) =>

  42:  

  43:             {

  44:  

  45:                 if (a.Error != null)

  46:  

  47:                 {

  48:  

  49:                     MessageBox.Show(a.Error.Message);

  50:  

  51:                 }

  52:  

  53:             };

  54:  

  55:             

  56:  

  57:         }

  58:  

  59:  

  60:  

  61:     }

  62:  

  63: }

  64:  

Destino

La aplicación Destino recibirá el mensaje enviado por el Origen:

   1: using System;

   2:  

   3: using System.Windows;

   4:  

   5: using System.Windows.Controls;

   6:  

   7: using System.Windows.Messaging;

   8:  

   9: using System.Windows.Markup;

  10:  

  11:  

  12:  

  13: namespace SL3ConexionLocal.Destino

  14:  

  15: {

  16:  

  17:     public partial class MainPage : UserControl

  18:  

  19:     {

  20:  

  21:         public MainPage()

  22:  

  23:         {

  24:  

  25:             InitializeComponent();

  26:  

  27:  

  28:  

  29:             //Receptor/Receiver

  30:  

  31:             //Podemos especificar los dominios válidos de los que podrás recibir mensajes!

  32:  

  33:             //We can specify the domains where this object can receive messages from!

  34:  

  35:  

  36:  

  37:             LocalMessageReceiver receiver = new LocalMessageReceiver("SL3ConexionLocal");

  38:  

  39:             receiver.MessageReceived += (s, a) =>

  40:  

  41:             {

  42:  

  43:                 string message = a.Message;

  44:  

  45:                 try

  46:  

  47:                 {

  48:  

  49:                     UIElement newContent = (UIElement)XamlReader.Load(message);

  50:  

  51:  

  52:  

  53:                     LayoutRoot.Children.Clear();

  54:  

  55:                     LayoutRoot.Children.Add(newContent);

  56:  

  57:                 }

  58:  

  59:                 catch (Exception)

  60:  

  61:                 {

  62:  

  63:                     MessageBox.Show("No es un Xaml válido");

  64:  

  65:                 }

  66:  

  67:                 

  68:  

  69:             };

  70:  

  71:             receiver.Listen();

  72:  

  73:         }

  74:  

  75:     }

  76:  

  77: }

  78:  

Noten cómo se establece el nombre del receptor como “SL3ConexionLocal”.  Posteriormente se comienza a escuchar por mensajes usando el método Listen() y cuando uno es recibido efectivamente se interpreta a un objeto de tipo UIElement a través del método XamlReader.Load().

Al ejecutar la aplicación Origen en un Navegador y la aplicación Destino en otro (usando las páginas de prueba creadas automáticamente para cada aplicación) podemos comprobar esta funcionalidad:

Resumen

La Conexión Local incorporada en Silverlight 4 permite comunicarnos de una aplicación a otra a través de un mecanismo de publicación-subscripción.  Esta interesante y poderosa funcionalidad abre nuevos paradigmas en el desarrollo de aplicaciones RIA, ya que su modelo de programación es bastante sencillo y sus alcances en soluciones con Silverlight son innumerables.

Silverlight 4 – Conciencia de Conexión

Posted on : 21-06-2010 | By : Rodrigo | In : Silverlight 4

Tags: ,

1

Silverlight 4 -  Conciencia de Conexión

El espacio de nombres System.Net.NetworkInformation de Silverlight, nos permite implementar una funcionalidad de “conciencia” de conexión en nuestras aplicaciones, esto es, saber en un momento dado si la aplicación está ejecutándose en un ambiente conectado o ha perdido la conexión; para poder determinar un comportamiento correcto en cada uno de esos escenarios.  Esta funcionalidad nos sirve tanto para aplicaciones que se estén ejecutando dentro del Navegador como en Aplicaciones Fuera del Navegador.

Clase NetworkInterface

Esta clase abstracta incluye el método estático GetIsNetworkAvailable(), el cual nos indica si hay una conexión de red o no.

Es muy importate mencionar que este método NO indica si hay una conexión a Internet.  Una manera para conocer si tenemos una conexión a Internet es hacer ping a un sitio conocido y con alta disponibilidad (ejemplo: www.microsoft.com, o www.yahoo.com, etc.) y/o utilizar las clase WebClient para descargar un archivo conocido en nuestro servidor donde esté hospedada la aplicación, por ejemplo: un archivo de texto pequeño que podamos descargar y leer para determinar si efectivamente tuvimos acceso a través de Internet.

El siguiente fragmento de código muestra cómo podemos utilizar NetworkInterface.GetIsNetworkAvailable() para determinar si tenemos una conexión de red:

   1: public MainPage()

   2: {

   3:     InitializeComponent();

   4:  

   5:     btn.Click += (s, a) => 

   6:     { 

   7:         txt.Text = NetworkInterface.GetIsNetworkAvailable().ToString(); 

   8:     };

   9: }

Clase NetworkChange

Un paso más adelante en esta funcionalidad está la clase NetworkChange la cual incluye el evento NetworkAddressChanged.  Este evento es disparado cuando hay un cambio en el estado de la conexión de red y está basado en el delegado NetworkAddressChangedEventHandler.  Si lo usamos junto con NetworkInterface.GetIsNetworkAvailable() podemos tener un mecanismo para automáticamente saber si nuestra aplicación está ejecutándose en un ambiente con o sin conexión.

   1: public MainPage()

   2: {

   3:     InitializeComponent();

   4:  

   5:     NetworkChange.NetworkAddressChanged += (s, a) =>

   6:     {

   7:         if (NetworkInterface.GetIsNetworkAvailable())

   8:         {

   9:             //Se ha restablecido la conexión de red

  10:         }

  11:         else

  12:         {

  13:             //No ha conexión de red

  14:         }

  15:     };

  16:     

  17: }

Nota: Este evento no se disparará si simplemente pones tu Navegador ‘Work Offline’

Construyendo la Clase NetworkChangeExtended

Gracias a que la clase NetworkChange no está marcada como sellada, podemos crear fácilmente una clase que extienda esta funcionalidad para determinar no solo si hay conectividad de red, sino determinar que exista realmente conexión a Internet.

A continuación les presento el código de una clase llamada NetworkChangeExtended, la cual efectivamente hereda de NetworkChange pero que incluye la funcionalidad para detectar si hay conexión de Internet o no, por medio del uso de un objeto de tipo WebClient para descargar un archivo de texto llamado Archivo.txt.  Archivo.txt deberá estar en el sitio de origen (/ClientBin de manera predeterminada) y deberá contener algo de texto.

   1: using System;

   2: using System.Net;

   3: using System.Net.NetworkInformation; 

   4:  

   5: namespace SL4ConcienciaConexion

   6: {    

   7:     

   8:     public class InternetAvailableEventArgs : EventArgs    

   9:     {        

  10:         public bool Available { get; set; }    

  11:     }

  12:  

  13:     public class NetworkInterfaceExtended : NetworkInterface    

  14:     {         

  15:         public static event EventHandler<InternetAvailableEventArgs> InternetAvailable;               

  16:         /// <summary>        

  17:         /// Español: Indica si hay conexión a Internet por medio de la descarga de un archivo a través de un objeto WebClient        

  18:         /// English: Indicates if there's Internet connection available through the download of a file using a WebClient object        

  19:         /// </summary>        

  20:         public static void GetIsInternetAvailable()        

  21:         {            

  22:             bool result = false;            

  23:             if (GetIsNetworkAvailable())            

  24:             {                

  25:                 WebClient client = new WebClient();                

  26:                 client.DownloadStringCompleted += (s, a) =>                

  27:                 {                    

  28:                     if (a.Error == null)                    

  29:                     {                        

  30:                         if (!string.IsNullOrEmpty(a.Result))                        

  31:                         {                            

  32:                             result = true;                        

  33:                         }                    

  34:                     }                    

  35:                     else                    

  36:                     {                        

  37:                         result = false;                    

  38:                     }                     

  39:                     OnInternetAvailable(result);                

  40:                 };                

  41:                 client.DownloadStringAsync(new Uri("Archivo.txt", UriKind.RelativeOrAbsolute));            

  42:             }            

  43:             else            

  44:             {                

  45:                 OnInternetAvailable(result);            

  46:             }         

  47:  

  48:         }   

  49:                

  50:         private static void OnInternetAvailable(bool available)        

  51:         {            

  52:             if (InternetAvailable != null)            

  53:             {                

  54:                 InternetAvailable(null, new InternetAvailableEventArgs() { Available = available });            

  55:             }        

  56:         }    

  57:     }

  58: }

Para usarla simplemente nos inscribimos al evento InternetAvailable, el cual se disparará cuando haya un cambio en el estado de la conexión a Internet.

   1: using System.Windows.Controls;

   2: using System.Net.NetworkInformation;

   3: namespace SL4ConcienciaConexion 

   4: { 

   5:     public partial class MainPage : UserControl 

   6:     { 

   7:         public MainPage() 

   8:         { 

   9:             InitializeComponent(); 

  10:             NetworkInterfaceExtended.InternetAvailable += (s, a) => 

  11:             { 

  12:                 txt.Text = a.Available.ToString(); 

  13:             }; 

  14:             Loaded += (s, a) => 

  15:             { 

  16:                 NetworkInterfaceExtended.GetIsInternetAvailable(); 

  17:             }; 

  18:             NetworkChange.NetworkAddressChanged += (s, a) => 

  19:             { 

  20:                 NetworkInterfaceExtended.GetIsInternetAvailable(); 

  21:             }; 

  22:         } 

  23:     } 

  24: }

Resumen

La funcionalidad de Conciencia de Conexión presente en Silverlight 4 es un instrumento bastante útil para que nuestras aplicaciones puedan determinar si están ejecutando en un ambiente con conectividad de red o no.  Asimismo, vimos cómo es fácil extender dicha funcionalidad para incluir un mecanismo de detección de acceso a Internet, a través de una clase que extienda la clase NetworkInterface y que haga uso de un objeto WebClient para descargar asíncronamete un archivo del servidor, por lo tanto determinar la presencia de una conexión a Internet.

Silverlight Tour – Buenos Aires, Argentina (21 de Julio 2010)

Posted on : 21-06-2010 | By : Rodrigo | In : Eventos, Silverlight 4, Silverlight Tour Workshop, Uncategorized

Tags: , , , , , ,

0

July 21, 2010toJuly 23, 2010

El Curso de Silverlight: El Silverlight Tour Workshop en Español llegará a la capital Argentina el próximo 21 de Julio 2010.  El Silverlight Tour Workshop es un curso de tres días (27 horas) de alta profundidad técnica acerca de Silverlight 4. El curso se imparte en varios idiomas en diferentes países en todo el Mundo y está actualizado a Silverlight 4.  Además el material está totalmente en Español.

Silverlight Tour - Buenos Aires

image

Les recuerdo que ahora el curso incluye una licencia gratis de la suite de controles RadControls for Silverlight de Telerik para cada participante con un valor comercial de 999 USD.

Si necesitan más información acerca del curso pueden consultar las Preguntas Frecuentemente Preguntadas (FAQ) y/o los sitios oficiales en español e inglés.

¡Los esperamos!

Silverlight Tour – Próximas Fechas en México (Junio – Agosto 2010)

Posted on : 21-06-2010 | By : Rodrigo | In : Eventos, Silverlight 4, Silverlight Tour Workshop, Uncategorized

Tags: , , , , ,

1

June 30, 2010toJuly 2, 2010
July 7, 2010toJuly 9, 2010
August 2, 2010toAugust 4, 2010

SLT_Trans

El Curso de Silverlight: Silverlight Tour Workshop en Español regresa a las tres principales ciudades de la República Mexicana.  Si desean recibir un entrenamiento a profundidad en la plataforma de desarrollo de Silverlight 4 para crear aplicativos de negocios o tal vez iniciarse para el desarrollo de soluciones con Windows Phone 7 esta es, como siempre, su mejor opción!

Las fechas son las siguientes:

Silverlight Tour Guadalajara Guadalajara – 30 de Junio 2010
Silverlight Tour Ciudad de México Ciudad de México – 07 de Julio 2010
Monterrey – 02 de Agosto 2010

El Silverlight Tour Workshop es un curso de tres días (27 horas) de alta profundidad técnica acerca de Silverlight 4. El curso se imparte en varios idiomas en diferentes países en todo el Mundo y está actualizado a Silverlight 4.  Ahora el curso incluye una licencia gratis de la suite de controles RadControls for Silverlight de Telerik para cada participante con un valor comercial de 999 USD.

El registro está abierto.  ¡Los esperamos!

Expression Studio 4 disponible ahora

Posted on : 07-06-2010 | By : Rodrigo | In : Expression, Expression Blend, Noticias

Tags: ,

0

El día de hoy ha sido anunciado y liberado oficialmente la suite Expression Studio 4, de donde podemos destacar Expression Blend 4.  Expression Blend 4 contiene una gran cantidad de características nuevas tales como:

  • Compatibilidad con Visual Studio .NET 2010
  • Soporte para Windows Phone 7
  • PathListBox
  • Nuevos Efectos Visuales (Pixel Shaders)
  • Nuevos Comportamientos
  • Soporte para el patrón de diseño MVVM
  • Mejoras en SketchFlow, como la opción de publicar directamente a una lista en SharePoint y poder ver el feedback de varias personas al mismo tiempo!
  • Etc…

Si son subscriptores, la descarga ya está disponible en MSDN.  Además les recuerdo que la actualización de Expression Studio 3 a Expression Studio 4 es totalmente gratuita.  Lo único que tienen que hacer es instalar la versión Trial de Expression Studio 4 *sobre* su versión licenciada de la v3.

Para mayor información de todas las novedades en el resto de productos de la familia Expression visiten su sitio oficial.

Salu2!

TechEd 2010 @ New Orleans

Posted on : 05-06-2010 | By : Rodrigo | In : Conferencias, Eventos, MVP, Silverlight, Windows Phone 7

Tags: , , , , , ,

0

image Uno de los eventos más importantes del año en el ámbito tecnológico para la plataforma de Microsoft es, sin lugar a dudas, el TechEd.  La edición de este año 2010 se llevará a cabo del 07 al 10 de Junio en la ciudad de New Orleans.

En esta edición estaré participando nuevamente como TLG (Technical Learning Guide), pero ahora para el track de desarrollo de Windows Phone 7.  Estén pendientes toda la siguiente semana acerca de esta y demás tecnologías ya que probablemente tendremos buenas y emocionantes noticias al respecto!

Asimismo, si tienen alguna duda en específico con respecto a Silverlight / Windows Phone 7 que consideren importante por favor háganmela saber para poder ayudarles a responderla.  Y si andan en el evento pasen a saludar!

Salu2!

Tecnologías Integradas – Convención Internacional de Interoperabilidad

Posted on : 02-06-2010 | By : Rodrigo | In : Comunidades, Conferencias, Eventos, MVP, Silverlight 4, Uncategorized

Tags: , , , , , , , ,

0

June 9, 2010

Primera Convención de Interoperabilidad

Tengo el honor de haber sido invitado como expositor para la 1era. Convención Internacional de Interoperabilidad, el cual es un evento virtual que se llevará a cabo el próximo 09 de Junio 2010 a las 10:00 horas.  En el evento podrán ver escenarios de integración entre diferentes tecnologías, explicados por expertos de diversas materias y plataformas.

En mi caso participaré con el tema “Interoperabilidad con COM en aplicaciones de Silverlight 4”.  En dicha sesión, ustedes podrán comprobar lo sencillo que es invocar funcionalidades existentes en componentes de COM (Component Object Model) desde sus aplicativos que ejecuten Afuera del Navegador con Silverlight 4.  Si bien no es un escenario multi-plataforma como tal (COM es una plataforma de Microsoft, como lo es Silverlight), son tecnologías diferentes y hoy en día es bastante común tratar de lograr lo que en mi sesión expongo, por ejemplo, tratar de integrar un aplicación de Silverlight con Office.  ¡Espero que les sea de utilidad!  También les reitero que su retroalimentación es muy importante! :)

La información es la siguiente:

Microsoft Latinoamérica te invita a participar este miércoles 9 de junio, en la 1ª Convención Virtual Internacional de Interoperabilidad “Tecnologías Integradas”. Es un evento que tiene como objetivo mostrar escenarios de la vida real que te permitirán ver la manera más efectiva de integrar diversas tecnologías del mundo de hoy. Durante el mismo, tendrás la oportunidad de compartir las experiencias de cada uno de los expositores internacionales desarrolladores de soluciones en diferentes plataformas, dentro del marco de integración tecnológica. Contaremos con la participación de tecnólogos, desarrolladores y profesionales de interoperabilidad de Venezuela, Ecuador, México, Perú, Brasil y otros países de Latinoamérica.

Fecha: 09 de Junio

Horario: 10:00 horas

(Evento Virtual)

Pueden revisar toda la agenda del evento aquí

Asimismo, les invito a que se registren aquí

¡Los esperamos!

Tercer Simposio Latinoamericano de SharePoint @ Ciudad de México | 03 de Junio 2010

Posted on : 02-06-2010 | By : Rodrigo | In : Comunidades, Conferencias, Eventos, MVP, SharePoint, Silverlight 4, Uncategorized, Windows Phone 7

Tags: , , , , , , , , ,

3

June 3, 2010

Tengo el gusto de invitarles al 3er. Simposio Latinoamericano de SharePoint que se llevará a cabo el próximo día jueves 03 de Junio 2010 a partir de las 09:00 a.m.  Como hace 1 año el evento contará con oradores nacionales e internacionales y sin duda alguna será un gran evento ya que SharePoint 2010 ha sido liberado recientemente y la mayoría de las sesiones estarán alineadas a esta nueva versión de la plataforma.

image

Por mi parte tengo el honor de volver a ser orador y en conjunto con mi buen amigo Mauricio Angulo; hablaremos de UX, Silverlight 4 y tal vez un poco de Windows Phone 7.  Recuerden que Silverlight, al ser una tecnología Web que ejecuta del lado del cliente puede ser capaz de conectarse a cualquier fuente de datos y consumir cualquier tipo de información: es aquí donde precisamente nace la posibilidad de integrarlo de manera natural con SharePoint.  Traigan todas sus preguntas para que les sean respondidas!!! :)

Los datos del evento son:

Fecha: Jueves 3 de Junio
Lugar: Hacienda de los Morales. Vázquez de Mella 525 Col.Del Bosque, Polanco, 11510 México D.F.

Horario:9:00 am a 8:00 pm

Mantente actualizado de los avances del Simposio a través de los siguientes recursos:

  1. Página de la Comunidad de SharePoint
  2. Blogs de la Comunidad de SharePoint
  3. PodCast de la Comunidad de SharePoint
  4. Comunidad de SharePoint – en Facebook
  5. Comunidad de SharePoint – en LinkedIn

La entrada es libre y pueden registrarse haciendo clic aquí

Los(as) esperamos!!!

image