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.
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.
Cree una base de datos vacía. El backplane creará las tablas necesarias en esta base de datos.
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 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.
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]
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.
Incluya también el servicio de administración (listado en "Herramientas de administración").
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
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).
Después de ejecutar la aplicación, puede ver que SignalR ha creado automáticamente tablas en la base de datos:
SignalR administra las tablas. Siempre que se implemente la aplicación, no elimine filas, modifique la tabla, etc.