使用 SQL Server 的 SignalR 横向扩展 (SignalR 1.x)
警告
本文档不适用于最新版本的 SignalR。 查看 ASP.NET Core SignalR。
在本教程中,你将使用 SQL Server 跨部署在两个单独的 IIS 实例中的 SignalR 应用程序分发消息。 也可以在单个测试计算机上运行本教程,但若要获得完整效果,需要将 SignalR 应用程序部署到两台或更多台服务器。 还必须在其中一台服务器上或单独的专用服务器上安装SQL Server。 另一个选项是在 Azure 上使用 VM 运行本教程。
先决条件
Microsoft SQL Server 2005 或更高版本。 背板支持桌面版和服务器版SQL Server。 它不支持 SQL Server Compact Edition 或 Azure SQL Database。 (如果应用程序托管在 Azure 上,请考虑使用服务总线底板。)
概述
在进入详细教程之前,下面简要概述了你将执行的操作。
创建新的空数据库。 背板将在此数据库中创建必要的表。
将这些 NuGet 包添加到应用程序:
创建 SignalR 应用程序。
将以下代码添加到 Global.asax 以配置底板:
protected void Application_Start() { string sqlConnectionString = "Connecton string to your SQL DB"; GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString); RouteTable.Routes.MapHubs(); // ... }
配置数据库
确定应用程序是使用Windows 身份验证还是SQL Server身份验证来访问数据库。 无论如何,请确保数据库用户具有登录、创建架构和创建表的权限。
创建一个新数据库供底板使用。 可以为数据库指定任何名称。 无需在数据库中创建任何表;底板将创建必要的表。
启用 Service Broker
建议为背板数据库启用 Service Broker。 Service Broker 在 SQL Server 中为消息传送和排队提供本机支持,使背板可以更高效地接收更新。 (但是,背板也可在没有 Service Broker.)
若要检查 Service Broker 是否已启用,请在 sys.databases 目录视图中查询is_broker_enabled列。
SELECT [name], [service_broker_guid], [is_broker_enabled]
FROM [master].[sys].[databases]
若要启用 Service Broker,请使用以下 SQL 查询:
ALTER DATABASE YOUR_DATABASE SET ENABLE_BROKER
注意
如果此查询显示为死锁,请确保没有应用程序连接到 DB。
如果已启用跟踪,跟踪还将显示是否启用了 Service Broker。
创建 SignalR 应用程序
按照以下任一教程创建 SignalR 应用程序:
接下来,我们将修改聊天应用程序以支持使用SQL Server进行横向扩展。 首先,将 SignalR.SqlServer NuGet 包添加到项目。 在 Visual Studio 的“ 工具 ”菜单中,选择“ NuGet 包管理器”,然后选择“ 包管理器控制台”。 在“Package Manager Console”窗口中,输入以下命令:
Install-Package Microsoft.AspNet.SignalR.SqlServer
接下来,打开 Global.asax 文件。 将以下代码添加到 Application_Start 方法:
protected void Application_Start()
{
string sqlConnectionString = "<add your SQL connection string here>";
GlobalHost.DependencyResolver.UseSqlServer(sqlConnectionString);
RouteTable.Routes.MapHubs();
}
部署和运行应用程序
准备 Windows Server 实例以部署 SignalR 应用程序。
添加 IIS 角色。 包括“应用程序开发”功能,包括 WebSocket 协议。
还包括“管理工具”) 下列出的管理服务 (。
安装 Web 部署 3.0。 运行 IIS 管理器时,系统会提示你安装Microsoft Web 平台,也可以下载安装程序。 在平台安装程序中,搜索 Web 部署并安装 Web 部署 3.0
检查 Web 管理服务是否正在运行。 如果没有,请启动服务。 (如果在 Windows 服务列表中看不到 Web 管理服务,请确保在添加 IIS 角色时安装了管理服务。)
最后,打开 TCP 端口 8172。 这是 Web 部署工具使用的端口。
现在,你已准备好将 Visual Studio 项目从开发计算机部署到服务器。 在“解决方案资源管理器”中,右键单击解决方案,然后单击“发布”。
有关 Web 部署的更详细文档,请参阅 适用于 Visual Studio 的 Web 部署内容映射和 ASP.NET。
如果将应用程序部署到两个服务器,则可以在单独的浏览器窗口中打开每个实例,并看到它们都从另一个接收 SignalR 消息。 当然, (在生产环境中,这两个服务器将位于负载均衡器后面。)
运行应用程序后,可以看到 SignalR 已在数据库中自动创建表:
SignalR 管理表。 只要部署了应用程序,就不要删除行、修改表等。