使用 SQL Server 的 SignalR 横向扩展 (SignalR 1.x)

作者 :Patrick Fletcher

警告

本文档不适用于最新版本的 SignalR。 查看 ASP.NET Core SignalR

在本教程中,你将使用 SQL Server 跨部署在两个单独的 IIS 实例中的 SignalR 应用程序分发消息。 也可以在单个测试计算机上运行本教程,但若要获得完整效果,需要将 SignalR 应用程序部署到两台或更多台服务器。 还必须在其中一台服务器上或单独的专用服务器上安装SQL Server。 另一个选项是在 Azure 上使用 VM 运行本教程。

S Q L 服务器及其在 V Ms、计算机、向 S Q L 服务器发送查询和更新之间的关系的关系图。

先决条件

Microsoft SQL Server 2005 或更高版本。 背板支持桌面版和服务器版SQL Server。 它不支持 SQL Server Compact Edition 或 Azure SQL Database。 (如果应用程序托管在 Azure 上,请考虑使用服务总线底板。)

概述

在进入详细教程之前,下面简要概述了你将执行的操作。

  1. 创建新的空数据库。 背板将在此数据库中创建必要的表。

  2. 将这些 NuGet 包添加到应用程序:

  3. 创建 SignalR 应用程序。

  4. 将以下代码添加到 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 中显示的“S Q L 查询 1 点 S Q L”选项卡的屏幕截图,其中显示了“结果”和“消息”选项卡。

若要启用 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 套接字协议”选项。

还包括“管理工具”) 下列出的管理服务 (。

“添加角色和功能向导”屏幕的屏幕截图,其中突出显示了“服务器角色”和“I S 管理脚本和工具”选项。

安装 Web 部署 3.0。 运行 IIS 管理器时,系统会提示你安装Microsoft Web 平台,也可以下载安装程序。 在平台安装程序中,搜索 Web 部署并安装 Web 部署 3.0

Web 平台安装程序 4 点 5 屏幕的屏幕截图,其中显示了搜索结果,其中突出显示了“Web 部署 3 点 0”选项。

检查 Web 管理服务是否正在运行。 如果没有,请启动服务。 (如果在 Windows 服务列表中看不到 Web 管理服务,请确保在添加 IIS 角色时安装了管理服务。)

最后,打开 TCP 端口 8172。 这是 Web 部署工具使用的端口。

现在,你已准备好将 Visual Studio 项目从开发计算机部署到服务器。 在“解决方案资源管理器”中,右键单击解决方案,然后单击“发布”。

有关 Web 部署的更详细文档,请参阅 适用于 Visual Studio 的 Web 部署内容映射和 ASP.NET

如果将应用程序部署到两个服务器,则可以在单独的浏览器窗口中打开每个实例,并看到它们都从另一个接收 SignalR 消息。 当然, (在生产环境中,这两个服务器将位于负载均衡器后面。)

Internet Explorer 浏览器窗口的屏幕截图,其中显示了显示 Signal R 消息的“索引”屏幕。

运行应用程序后,可以看到 SignalR 已在数据库中自动创建表:

对象资源管理器屏幕的屏幕截图,其中突出显示了 MIKE 短划线 S Q L 服务器并显示其包含的文件夹和服务器。

SignalR 管理表。 只要部署了应用程序,就不要删除行、修改表等。