Escalabilidad horizontal de SignalR con Azure Service Bus (SignalR 1.x)

de Patrick Fletcher

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.

Diagram that illustrates the relationship between the Service Bus Namespace Topic, Web Roles, and available computers and accounts.

Requisitos previos:

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.

  1. Use el portal de Windows Azure para crear un nuevo espacio de nombres de Service Bus.

  2. Agregue estos paquetes NuGet a su aplicación:

  3. Cree una aplicación de SignalR.

  4. 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.

Screenshot of the NEW pane with the Cloud Service option and icon being highlighted in the application as well as a red circle.

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".

Screenshot of the Add a new namespace screen with entries entered in the Namespace Name and Region fields.

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.

Screenshot of the New Project screen with the Windows Azure Cloud Service Visual C # option being highlighted.

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.

Screenshot of the New Windows Azure Cloud Service screen with the Signal R Chat option highlighted in the Windows Azure Cloud Service solution pane.

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.

Screenshot of the Create, Access Key, and Delete options and icons in the service bus namespace with a focus on the Create option.

Copie la cadena de conexión en el Portapapeles y péguela en la variable connectionString.

Screenshot of the Access Key Connect to your namespace screen, showing the Connection String, Default Issuer, and Default Key fields.

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.

Screenshot of the Solution Explorer tree showing the Signal R Chat option contained in the Roles folder of the Chat Service project.

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.

Screenshot of the Configuration Tab's Instances section, showing a 2 entered into the Instance count field and the V M Size field set to Extra Small.

Guarde los cambios.

En el Explorador de soluciones, haga clic con el botón derecho en el proyecto ChatService. Seleccione Publicar.

Screenshot of the Solution Explorer screen's Chat Service project, with a right-click dropdown menu showing the Publish... option.

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.

Screenshot of the Publish Windows Azure Application screen's Sign In tab with the Sign in to download credentials link being highlighted.

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.

Screenshot of hte Publish Windows Azure Application screen's Settings tab, showing the Cloud Service field in the Common Settings tab.

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".

Screenshot of the selected Cloud Service field now populating in the Azure portal, with the Cloud Service's Name field being highlighted.

La actividad del mensaje tarda unos minutos en aparecer en el panel.

Screenshot of the Azure portal dashboard displaying message activity timeline, showing a blue and purple line to indicate different message histories.

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.