Escalabilidad horizontal de SignalR con Azure Service Bus (SignalR 1.x)
Advertencia
Esta documentación no es para la última versión de SignalR. Eche un vistazo a SignalR de ASP.NET Core.
En este tutorial, implementará una aplicación SignalR en un rol web de Windows Azure mediante el backplane de Service Bus para distribuir mensajes a cada instancia de rol.
Requisitos previos:
- Una cuenta de Windows Azure.
- SDK de Windows Azure.
- Visual Studio 2012.
El backplane de Service Bus también es compatible con Service Bus para Windows Server, versión 1.1. Sin embargo, no es compatible con la versión 1.0 de Service Bus para Windows Server.
Precios
El backplane de Service Bus usa temas para enviar mensajes. Para obtener la información de precios más reciente, consulte Service Bus. En el momento de redactar este documento, puede enviar 1 millón de mensajes al mes por menos de 1 USD. El backplane envía un mensaje de Service Bus para cada invocación de un método de concentrador SignalR. También hay algunos mensajes de control para conexiones, desconexiones, unión o salida de grupos, etc. En la mayoría de las aplicaciones, la mayoría del tráfico de mensajes serán invocaciones del método de concentrador.
Información general
Antes de pasar al tutorial detallado, aquí tiene una rápida introducción a lo que va a hacer.
Use el portal de Windows Azure para crear un nuevo espacio de nombres de Service Bus.
Agregue estos paquetes NuGet a su aplicación:
Cree una aplicación de SignalR.
Agregue el siguiente código a Global.asax para configurar el backplane:
protected void Application_Start() { string connectionString = "Service Bus connection string"; GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName"); RouteTable.Routes.MapHubs(); // ... }
Para cada aplicación, elija otro valor para "YourAppName". No use el mismo valor en varias aplicaciones.
Creación de los servicios de Azure
Cree un servicio en la nube, como se describe en Creación e implementación de un servicio en la nube. Siga los pasos descritos en la sección "Creación de un servicio en la nube mediante Creación rápida". En este tutorial, no es necesario cargar un certificado.
Cree un nuevo espacio de nombres de Service Bus, como se describe en Uso de temas o suscripciones de Service Bus. Siga los pasos de la sección "Crear un espacio de nombres de servicio".
Nota:
Asegúrese de seleccionar la misma región para el servicio en la nube y el espacio de nombres de Service Bus.
Creación del proyecto de Visual Studio
Inicie Visual Studio. En el menú Archivo, haga clic en Nuevo proyecto.
En el cuadro de diálogo Nuevo proyecto, expanda Visual C#. En Plantillas instaladas, seleccione Nube y, a continuación, seleccione Servicio en la nube de Windows Azure. Mantenga el valor predeterminado de .NET Framework 4.5. Asigne a la aplicación el nombre ChatService y haga clic en Aceptar.
En el cuadro de diálogo Nuevo servicio en la nube de Windows Azure, seleccione el rol web de ASP.NET MVC 4. Haga clic en el botón de flecha derecha (>) para agregar el rol a la solución.
Mantenga el mouse sobre el nuevo rol para que el icono de lápiz esté visible. Haga clic en este icono para cambiar el nombre del rol. Asigne al rol el nombre "SignalRChat" y haga clic en Aceptar.
En el asistente para el Nuevo proyecto de ASP.NET MVC 4, seleccione Aplicación de Internet. Haga clic en OK. El asistente para proyectos crea dos proyectos:
- ChatService: este proyecto es la aplicación de Windows Azure. Define los roles de Azure y otras opciones de configuración.
- SignalRChat: este proyecto es el proyecto de ASP.NET MVC 4.
Creación de la aplicación de chat de SignalR
Para crear la aplicación de chat, siga los pasos del tutorial Introducción a SignalR y MVC 4.
Use NuGet para instalar las bibliotecas necesarias. En el menú Herramientas, seleccione Administrador de paquetes NuGet y, a continuación, Consola del administrador de paquetes. En la ventana Consola del administrador de paquetes, escriba los comandos siguientes:
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus
Use la opción -ProjectName
para instalar los paquetes en el proyecto ASP.NET MVC, en lugar del proyecto de Windows Azure.
Configuración del backplane
En el archivo Global.asax de la aplicación, agregue el código siguiente:
protected void Application_Start()
{
string connectionString = "";
GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");
RouteTable.Routes.MapHubs();
}
Ahora debe obtener la cadena de conexión de Service Bus. En Azure Portal, seleccione el espacio de nombres de Service Bus que ha creado y haga clic en el icono Clave de acceso.
Copie la cadena de conexión en el Portapapeles y péguela en la variable connectionString.
string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";
Implementación en Azure
En el Explorador de soluciones, expanda la carpeta Roles dentro del proyecto ChatService.
Haga clic con el botón derecho en el rol SignalRChat y seleccione Propiedades. Seleccione la pestaña Configuración. En Instancias, seleccione 2. También puede establecer el tamaño de la máquina virtual en Extra pequeña.
Guarde los cambios.
En el Explorador de soluciones, haga clic con el botón derecho en el proyecto ChatService. Seleccione Publicar.
Si esta es la primera vez que publica en Windows Azure, debe descargar sus credenciales. En el asistente para Publicación, haga clic en "Iniciar sesión para descargar credenciales". Esto le pedirá que inicie sesión en el portal de Windows Azure y descargue un archivo de configuración de publicación.
Haga clic en Importar y seleccione el archivo de configuración de publicación que ha descargado.
Haga clic en Next. En el cuadro de diálogo Configuración de publicación, en Servicio en la nube, seleccione el servicio en la nube que ha creado anteriormente.
Haga clic en Publicar. La implementación de la aplicación puede tardar unos minutos en iniciar las máquinas virtuales.
Ahora, al ejecutar la aplicación de chat, las instancias de rol se comunican a través de Azure Service Bus mediante un tema de Service Bus. Un tema es una cola de mensajes que permite varios suscriptores.
El backplane crea automáticamente el tema y las suscripciones. Para ver las suscripciones y la actividad de mensajes, abra Azure Portal, seleccione el espacio de nombres de Service Bus y haga clic en "Temas".
La actividad del mensaje tarda unos minutos en aparecer en el panel.
SignalR administra la duración del tema. Siempre que se implemente la aplicación, no intente eliminar manualmente temas ni cambiar la configuración del tema.