miércoles, 25 de junio de 2014
Hace pocos días se ha publicado la revisión 2.1 de SignalR que, aparte de corregir bugs, introduce algunas funcionalidades que pueden resultar interesantes en muchos escenarios. En cualquier caso, como se podría esperar de una revisión de este calado, no rompen con nada existente ni resultan cambios espectaculares, simplemente aportan algunas características que no fueron incluidas en la versión 2.0 por falta de tiempo, o que han surgido con posterioridad.
En esta serie de posts recorreremos las características más interesantes incluidas en esta revisión, y comenzaremos tratando la nueva capacidad de hacer llamadas al lado cliente desde los Hubs utilizando tipado fuerte.
Como consecuencia, en tiempo de compilación no hay ningún tipo de comprobación sobre el nombre del método invocado, ni el número de parámetros que le estamos suministrando, ni siquiera su tipo. Es decir, el código compilará perfectamente tanto si hacemos la llamada correcta
Y obviamente, tampoco tendremos ayudas del editor como intellisense o autocompletado.
En fin, que sin ser espectacular, sí es una ayuda interesante para el desarrollador cuando estamos trabajando en hubs con gran número de métodos en cliente, donde es bastante sencillo equivocarse.
Publicado en Variable not found.
En esta serie de posts recorreremos las características más interesantes incluidas en esta revisión, y comenzaremos tratando la nueva capacidad de hacer llamadas al lado cliente desde los Hubs utilizando tipado fuerte.
1. Situación actual
Como sabéis (y los que no, ya estáis tardando ;-)), cuando desde un Hub en el servidor queremos invocar a un método de todos los clientes conectados al mismo, simplemente tenemos que ejecutar un método sobre la propiedadClients.All
. Por ejemplo, en el siguiente código estaríamos invocando el método message
del lado cliente, suministrándole dos parámetros:public class EchoHub : Hub { public Task BroadcastMessage(string senderName, string message) { return Clients.All.Message(senderName, message); } }Esto es fantástico, y forma parte de la magia de SignalR:
Clients.All
, al igual que otros selectores de destinatarios del mensaje como Clients.Client
o Clients.Others
, son sólo propiedades de tipo dinámico, y por esta razón podemos usarlas para invocar sobre ellas métodos con cualquier nombre y parámetros.Como consecuencia, en tiempo de compilación no hay ningún tipo de comprobación sobre el nombre del método invocado, ni el número de parámetros que le estamos suministrando, ni siquiera su tipo. Es decir, el código compilará perfectamente tanto si hacemos la llamada correcta
Clients.All.Message(senderName, message)
como si nos equivocamos en uno o varios aspectos al introducirla (por ejemplo, si usamos Clients.All.Mesage(senderName, 1, message)
). Y obviamente, tampoco tendremos ayudas del editor como intellisense o autocompletado.
2. Hubs tipados en Signalr 2.1
En esta revisión de SignalR, a la hora de crear un hub podemos indicar un interfaz que define las operaciones que se encuentran disponibles a nivel cliente. Para ello, en lugar de heredar como siempre desde la claseHub
, heredaremos de Hub<T>
, siendo T
el tipo del interfaz con la definición del contrato. El código anterior quedaría como sigue:public class EchoHub : Hub<IEchoClient> { public Task BroadcastMessage(string senderName, string message) { return Clients.All.Message(senderName, message); } } public interface IEchoClient { Task Message(string senderName, string message); }A partir de ese momento, todos los selectores de destinatarios como
Clients.All
o Clients.Others
serán considerados del tipo T
, por lo que sólo podremos realizar sobre ellos llamadas definidas por el interfaz y, por supuesto, tendremos de nuevo disponibles todas las ventajas a nivel de editor:En fin, que sin ser espectacular, sí es una ayuda interesante para el desarrollador cuando estamos trabajando en hubs con gran número de métodos en cliente, donde es bastante sencillo equivocarse.
Publicado en Variable not found.
Aún no hay comentarios, ¡sé el primero!
Enviar un nuevo comentario