Opciones para comunicarse con los clientes en SignalR

Continuando con los post’s asociados a SignalR, ya hemos podido ver tanto la implementación de SignalR dentro de ASP.NET MVC cómo el concepto del ConnectionId para identificar de forma unívoca a un cliente. Sobre esto último hemos mencionado que en las formas de envío más avanzadas de SignalR se debe hacer uso de este valor.

Veamos cuales son las formas de conexión a clientes que tenemos disponibles desde el servidor hacia los clientes:

Broadcast:

Para mi esta es la forma más sencilla de enviar notificaciones, ya que se las enviamos a absolutamente todos los clientes conectados a nuestra aplicación sin necesidad de conocer quienes son.

Este es el ejemplo que venimos usando desde el primer post asociado a la implementaciónel primer post asociado a la implementación. Para hacer uso de esta opción el Hub usaremos el elemento Clients con la opción All, indicando luego la operación del lado del cliente que queremos invocar:

Leer más »

Anuncios

Qué es el ConnectionId en SignalR y para qué nos sirve?

Siguiendo con la serie de post’s que estamos viendo asociada a SignalR nos llega el momento de analizar cómo hacer para poder diferenciar a qué cliente enviarle una notificación. En el ejemplo del post anterior lo que vimos es el uso más básico que implica el envío de las notificaciones a todos los clientes:

Sin embargo hay algo allí que debemos explicar: cómo maneja SignalR la registración e información de cada cliente? La respuesta es el “ConnectionId”.

Leer más »

Implementando SignalR en ASP.NET MVC

En la entrada anterior vimos algunos puntos asociados al funcionamiento general de SignalR y el planteo que propone. Lo que veremos en este nuevo post es cómo implementarlo en una aplicación ASP.NET MVC y lograr al menos una interacción básica.

Lo primero que haremos es definir el funcionamiento de nuestra aplicación. Lo que queremos lograr es armar un check-list compartido entre distintos usuarios, donde cuando uno de ellos marque un elemento como realizado o no, a los otros también les aparezca dicho estado actualizado. Para este ejemplo haremos algo muy básico, lo cual con el correr de los post’s de esta serie iremos haciendo crecer.

Comenzaremos con una aplicación ASP.NET MVC básica, instalando el paquete Nuget asociado a SignalR:

Install-Package Microsoft.AspNet.SignalR

Una vez finalizada la instalación, deberemos crear el archivo Startup.cs dentro de la raíz de nuestro proyecto web. Es en el mismo donde mediante OWIN estableceremos la inicialización de los mapeos necesarios para la interacción con SignalR, quedando el archivo de la siguiente forma:

ImplementacionSignalR - ClaseStartup
Definición de clase Startup usando OWIN

Hasta allí está lo que es la configuración inicial del proyecto. Lo posterior a hacer será crear el Hub que se encargará de la comunicación con los clientes. Para ello crearemos la carpeta Hubs dentro de la raíz del proyecto web, y dentro de la misma el elemento “SignalR Hub Class” con nombre NotificationHub:Leer más »

Introducción: SignalR en ASP.NET MVC

En la entrada anterior vimos de forma general cómo podemos realizar aplicaciones real-time en ASP.NET MVC. En este post nos vamos a centrar en el primero de esos puntos: SignalR.

Como ya vimos, SignalR nos permite gestionar todas aquellas funcionalidades en las cuales tenemos una interacción en dos vías (conexión bidireccional) entre el servidor y sus clientes.

ASP.NET SignalR es una librería para los desarrolladores de aplicaciones ASP.NET que simplifica el proceso de agregar funcionalidad basada en interacción web en tiempo real. Cuando hablamos de interacción web en tiempo real hacemos referencia a la capacidad de poder enviar contenido desde el servidor a determinadas aplicaciones clientes que lo tendrán disponible de forma inmediata, en vez de que el servidor tenga que esperar que el cliente le solicite nueva información. Esto permite lograr un esquema de conexión bidireccional completo.

Si nuestra aplicación ASP.NET tiene alguna interacción donde necesitamos tener comunicación bidireccional, y para ello utilizamos alguna técnica alternativa (como por ejemplo long polling), quiere decir que podemos usar SignalR en la misma.

 

Vamos a ver algunas cuestiones de teoría asociada a esta interacción en tiempo real entre cliente y servidor. Básicamente existen varias técnicas para poder lograr este comportamiento, algunas mejores en su planteamiento y otras que tienen una mayor compatibilidad:Leer más »

Aplicaciones real-time en ASP.NET MVC

Hay que reconocer que a día de hoy las aplicaciones web’s que usamos evolucionan constantemente, siendo uno de los aspectos más destacados la interacción con el usuario y el dinamismo en tiempo real del contenido. Esto implica que como desarrolladores debamos estar atentos a esas situaciones, para hacer que nuestras aplicaciones cumplan con estas nuevas características que los usuarios empiezan a ver como estándares.

Lo que vamos a ver en este post es la introducción a dos herramientas que nos ayudan a lograr este cometido en nuestras aplicaciones ASP.NET MVC, cada una con su propósito.

Leer más »

Transformaciones sobre web.config: una forma de tener organizados los distintos ambientes

En el desarrollo de aplicaciones ASP.NET MVC puede haber un punto algo conflictivo si no lo tratamos con el debido cuidado: el archivo Web.config y las variantes del mismo en relación a los distintos ambientes de ejecución. Son muchos los casos donde se puede apreciar que hay problemas o confusiones asociadas a los cambios que uno debe tener sobre este archivo dependiendo del ambiente en el cual ejecutemos la aplicación.

Aquí es donde entran en juego las transformaciones sobre el Web.config, las cuales son un conjunto de reglas que podemos ir definiendo sobre el mismo. Mediante esas reglas podremos definir qué cambios se deben aplicar para cada ambiente.

Cuando hablamos de ambiente hacemos referencia al propósito del sitio donde se ejecute la aplicación, siendo los más clásicos:

  • Local: nuestra PC, ambiente de desarrollo al 100%
  • Testing: un sitio expuesto (interna o externamente) para hacer pruebas generales
  • Producción: sitio real de ejecución de nuestra aplicación

Dependiendo del proyecto podrán existir algunos más o menos (al menos tendremos el entorno local y el de producción). Para este post vamos a tomar esta configuración como la referencia.

Asumiendo que ya tenemos los perfiles de publicación necesarios para cada ambiente que no sea local, vamos a cada uno de los mismos (ubicados en Properties > PublishProfiles) y haciendo click derecho seleccionamos la opción que nos generará el archivo derivado Web.config para cada ambiente, donde se aplicarán las transformaciones particulares:

TransformacionConfig - AgregarConfig

Leer más »

Internacionalización: la serie

Buenas a todos! Como ya hemos visto varios posts asociados a internacionalización les dejo el listado de los mismos con una breve introducción:

Internacionalización en ASP.NET MVC

Explicación inicial de cómo configurar nuestra aplicación ASP.NET MVC para que soporte la internacionalización de la misma a partir de la cultura del cliente.

 

Internacionalizar entradas de usuario en ASP.NET MVC

Luego de tener internacionalizada nuestra aplicación ASP.NET MVC, el siguiente punto será lo que debamos considerar para aceptar entradas de usuario dependiendo de la cultura del usuario, además de almacenar esa información de forma estándar y mostrársela nuevamente al usuario según su cultura.

 

Cómo cambiar la cultura manualmente en ASP.NET MVC?

Aunque nuestra aplicación sea capaz de adaptarse a la cultura del cliente, puede haber casos donde queremos darle la posibilidad al usuario de que la cambie según su preferencia. En este post vemos cómo hacer ello de forma sencilla sin perder ni sobre-escribir la funcionalidad ya existente en ASP.NET MVC.

 

Satellite Assemblies en internacionalización ASP.NET MVC

En este post hacemos un breve repaso al concepto de Satellite Assemblies, y cómo las mismas nos dan diversas ventajas en nuestras aplicaciones ASP.NET MVC internacionalizadas.

 

Como siempre, si les parece que hay algún punto sobre el cual profundizar o explicar algo en detalle me lo comentan y lo tengo en cuenta para armar un post asociado. Y ya que estamos seguimos haciendo crecer esta serie.

Gracias por leer!