Escalabilidad horizontal de SignalR con SQL Server (SignalR 1.x)

por Patrick Fletcher

Advertencia

Esta documentación no se aplica a la última versión de SignalR. Eche un vistazo a SignalR de ASP.NET Core.

En este tutorial, usará SQL Server para distribuir mensajes a través de una aplicación de SignalR que está implementada en dos instancias de IIS separadas. También puede ejecutar este tutorial en una sola máquina de prueba, pero para obtener el efecto completo, debe implementar la aplicación SignalR en dos o más servidores. También debe instalar SQL Server en uno de los servidores o en un servidor dedicado independiente. Otra opción es ejecutar el tutorial mediante máquinas virtuales en Azure.

Diagram of the S Q L Server and its relationship between V Ms, computers, sending queries, and updates to the S Q L Server.

Requisitos previos

Microsoft SQL Server 2005 o posterior. El backplane admite las ediciones de escritorio y servidor de SQL Server. No admite SQL Server Compact Edition ni Azure SQL Database. (Si la aplicación está hospedada en Azure, considere el backplane de Service Bus en su lugar).

Información general

Antes de pasar al tutorial detallado, aquí tiene una rápida introducción a lo que va a hacer.

  1. Cree una base de datos vacía. El backplane creará las tablas necesarias en esta base de datos.

  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 sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

Configuración de la base de datos

Decida si la aplicación usará autenticación de Windows o la autenticación de SQL Server para acceder a la base de datos. En cualquier caso, asegúrese de que el usuario de la base de datos tenga permisos para iniciar sesión, crear esquemas y crear tablas.

Cree una nueva base de datos para que use el backplane. Puede asignar cualquier nombre a la base de datos. No es necesario crear ninguna tabla en la base de datos; el backplane creará las tablas necesarias.

Screenshot of the Object Explorer window with the Databases folder being highlighted, revealing its contained sub-folders.

Habilitación de Service Broker

Se recomienda habilitar Service Broker para la base de datos de backplane. Service Broker proporciona compatibilidad nativa con la mensajería y la puesta en cola en SQL Server, lo que permite que el backplane reciba actualizaciones de forma más eficaz. (Sin embargo, el backplane también funciona sin Service Broker).

Para comprobar si está habilitado Service Broker, consulte la columna is_broker_enabled en la vista de catálogo sys.databases.

SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]

Screenshot of the S Q L Query 1 dot S Q L tab displayed in the Service Broker, showing the Results and Messages tabs.

Para habilitar Service Broker, use la siguiente consulta SQL:

ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER

Nota:

Si parece que la consulta lleva a un interbloqueo, asegúrese de que no haya aplicaciones conectadas a la base de datos.

Si ha habilitado el seguimiento, los seguimientos también mostrarán si Service Broker está habilitado.

Creación de una aplicación de SignalR.

Cree una aplicación de SignalR siguiendo cualquiera de estos tutoriales:

A continuación, modificaremos la aplicación de chat para que sea compatible con el escalado horizontal con SQL Server. En primer lugar, agregue el paquete NuGet de SignalR.SqlServer a su proyecto. En Visual Studio, en el menú Herramientas, seleccione Administrador de paquetes NuGet, después seleccione Consola del administrador de paquetes. En la ventana Consola del Administrador de paquetas , escriba el siguiente comando:

Install-Package Microsoft.AspNet.SignalR.SqlServer

A continuación, abra el archivo Global.asax. Agregue el siguiente código al método Application_Start:

protected void Application_Start()
{
    string sqlConnectionString = "<add your SQL connection string here>";
    GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);

    RouteTable.Routes.MapHubs();
}

Implementación y ejecución de la aplicación

Prepare sus instancias de Windows Server para implementar la aplicación de SignalR.

Agregue el rol de IIS. Incluya características de "Desarrollo de aplicaciones", incluido el protocolo WebSocket.

Screenshot of the Add Roles and Features Wizard screen with the Server Roles and Web Socket Protocol options being highlighted.

Incluya también el servicio de administración (listado en "Herramientas de administración").

Screenshot of the Add Roles and Features Wizard screen with the Server Roles and I I S Management Scripts and Tools options being highlighted.

Instale Web Deploy 3.0. Cuando ejecute el Administrador de IIS, le solicitará que instale la Plataforma web de Microsoft, o bien, puede descargar el instalador. En el Instalador de plataforma, busque Web Deploy e instale Web Deploy 3.0

Screenshot of the Web Platform Installer 4 point 5 screen displaying search results with the Web Deploy 3 point 0 option being highlighted.

Compruebe que el Servicio de administración web está en funcionamiento. Si no es así, inicie el servicio. (Si no ve el Servicio de administración web en la lista de servicios de Windows, asegúrese de haber instalado el Servicio de administración cuando agregó el rol de IIS).

Por último, abra el puerto 8172 para TCP. Este es el puerto que usa la herramienta Web Deploy.

Ahora está listo para implementar el proyecto de Visual Studio desde su máquina de desarrollo al servidor. En el Explorador de soluciones, haga clic con el botón derecho en la solución y haga clic en Publicar.

Para obtener documentación más detallada sobre la implementación web, consulte Mapa de contenidos de implementación web para Visual Studio y ASP.NET.

Si implementa la aplicación en dos servidores, puede abrir cada instancia en una ventana separada del explorador y ver que cada una recibe mensajes de SignalR de la otra. (Por supuesto, en un entorno de producción, los dos servidores se situarían detrás de un equilibrador de carga).

Screenshot of the Internet Explorer browser window showing the Index screen which displays Signal R messages.

Después de ejecutar la aplicación, puede ver que SignalR ha creado automáticamente tablas en la base de datos:

Screenshot of the Object Explorer screen with the MIKE dash S Q L server being highlighted and showing its contained folders and servers.

SignalR administra las tablas. Siempre que se implemente la aplicación, no elimine filas, modifique la tabla, etc.