Compartir a través de


Escalabilidad horizontal de SignalR con SQL Server

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.

Versiones de software empleadas en este tema

Versiones anteriores de este tema

Para obtener información sobre versiones anteriores de SignalR, consulte Versiones anteriores de SignalR.

Preguntas y comentarios

Deje sus comentarios sobre este tutorial y sobre lo que podríamos mejorar en los comentarios en la parte inferior de la página. Si tiene alguna pregunta que no esté directamente relacionadas con el tutorial, puede publicarla en el foro de ASP.NET SignalR o en StackOverflow.com.

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 that shows arrows going from S Q L Server to V M to computers. One arrow labeled Update starts at V M and goes to 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 Startup.cs para configurar el backplane:

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            string sqlConnectionString = "Connecton string to your SQL DB";
            GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
            app.MapSignalR();
        }
    }
    

    Este código configura el backplane con los valores predeterminados de TableCount y MaxQueueLength. Para más información sobre cómo cambiar estos valores, consulte Rendimiento de SignalR: métricas de escalabilidad horizontal.

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 dialog box. The folder labeled Databases is selected.

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 a window displaying the sys dot databases catalog view.

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 Startup.cs. Agregue el código siguiente al método Configure:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        string sqlConnectionString = "Connecton string to your SQL DB";
        GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
        app.MapSignalR();
    }
}

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 that shows the Add Roles and Features Wizard dialog box. Server Roles and WebSocket Protocol are selected.

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

Screenshot that shows the Add Roles and Features Wizard dialog box. Server Roles and Management Service are selected.

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 with web deploy 3 point 0 selected in the search results.

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 two browser windows open showing the application deployed to two servers.

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 dialog box displaying folders and files.

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