使用 Azure 服务总线的 SignalR 横向扩展 (SignalR 1.x)

作者 :Patrick Fletcher

警告

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

在本教程中,你将使用服务总线底板将 SignalR 应用程序部署到 Windows Azure Web 角色,以便将消息分发到每个角色实例。

说明服务总线命名空间主题、Web 角色与可用计算机和帐户之间的关系的示意图。

先决条件:

服务总线底板还与 适用于 Windows Server 的服务总线版本 1.1 兼容。 但是,它与适用于 Windows Server 的服务总线版本 1.0 不兼容。

定价

服务总线底板使用主题发送消息。 有关最新定价信息,请参阅 服务总线。 撰写本文时,每月可以发送 1,000,000 条消息,且不超过 1 美元。 底板会针对每次调用 SignalR 中心方法发送服务总线消息。 还有一些用于连接、断开连接、加入或离开组等的控制消息。 在大多数应用程序中,大多数消息流量将是中心方法调用。

概述

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

  1. 使用 Windows Azure 门户创建新的服务总线命名空间。

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

  3. 创建 SignalR 应用程序。

  4. 将以下代码添加到 Global.asax 以配置底板:

    protected void Application_Start()
    {
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

对于每个应用程序,为“YourAppName”选择不同的值。 不要在多个应用程序中使用相同的值。

创建 Azure 服务

创建云服务,如 如何创建和部署云服务中所述。 按照“如何:使用快速创建创建云服务”部分中的步骤进行操作。 在本教程中,无需上传证书。

“新建”窗格的屏幕截图,其中“云服务”选项和图标在应用程序中突出显示,以及一个红色圆圈。

创建新的服务总线命名空间,如 如何使用服务总线主题/订阅中所述。 按照“创建服务命名空间”部分中的步骤进行操作。

“添加新命名空间”屏幕的屏幕截图,其中输入了“命名空间名称”和“区域”字段中的条目。

注意

请确保为云服务和服务总线命名空间选择同一区域。

创建 Visual Studio 项目

启动 Visual Studio。 在“ 文件 ”菜单中,单击“ 新建项目”。

在“ 新建项目 ”对话框中,展开 “Visual C#”。 在 “已安装的模板”下,选择“ ”,然后选择“ Windows Azure 云服务”。 保持默认值 .NET Framework 4.5。 将应用程序命名为 ChatService,然后单击“ 确定”。

“新建项目”屏幕的屏幕截图,其中突出显示了 Windows Azure 云服务 Visual C # 选项。

“新建 Windows Azure 云服务 ”对话框中,选择“ASP.NET MVC 4 Web 角色”。 单击) (> 右箭头按钮,将角色添加到解决方案。

将鼠标悬停在新角色上,使铅笔图标可见。 单击此图标可重命名角色。 将角色命名为“SignalRChat”,然后单击“ 确定”。

“新建 Windows Azure 云服务”屏幕的屏幕截图,其中突出显示了“Windows Azure 云服务解决方案”窗格中的“Signal R Chat”选项。

“新建 ASP.NET MVC 4 项目 向导中,选择” Internet 应用程序”。 单击 “确定” 。 项目向导创建两个项目:

  • ChatService:此项目是 Windows Azure 应用程序。 它定义 Azure 角色和其他配置选项。
  • SignalRChat:此项目是 ASP.NET MVC 4 项目。

创建 SignalR 聊天应用程序

若要创建聊天应用程序,请按照使用 SignalR 和 MVC 4 入门教程中的步骤操作。

使用 NuGet 安装所需的库。 从 “工具 ”菜单中选择“ NuGet 包管理器”,然后选择“ 包管理器控制台”。 在 “包管理器控制台” 窗口中,输入以下命令:

Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR
Install-Package -ProjectName SignalRChat Microsoft.AspNet.SignalR.ServiceBus

-ProjectName使用 选项将包安装到 ASP.NET MVC 项目,而不是 Windows Azure 项目。

配置底板

在应用程序的 Global.asax 文件中,添加以下代码:

protected void Application_Start()
{
    string connectionString = "";
    GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");  

    RouteTable.Routes.MapHubs();
}

现在需要获取服务总线连接字符串。 在Azure 门户,选择创建的服务总线命名空间,然后单击“访问密钥”图标。

服务总线命名空间中“创建”、“访问密钥”和“删除”选项和图标的屏幕截图,其中焦点位于“创建”选项上。

将连接字符串复制到剪贴板,然后将其粘贴到 connectionString 变量中。

“访问密钥连接到命名空间”屏幕的屏幕截图,其中显示了“连接字符串”、“默认颁发者”和“默认密钥”字段。

string connectionString = "Endpoint=sb://xxxx.servicebus.windows.net/;
SharedSecretIssuer=owner;SharedSecretValue=XXXXXXXX";

部署到 Azure

在解决方案资源管理器中,展开 ChatService 项目中的“角色”文件夹。

解决方案资源管理器树的屏幕截图,其中显示了“聊天服务”项目的“角色”文件夹中包含的“Signal R Chat”选项。

右键单击 SignalRChat 角色,然后选择 “属性”。 选择“ 配置 ”选项卡。在 “实例” 下,选择“2”。 还可以将 VM 大小设置为 “特小”。

“配置”选项卡的“实例”部分的屏幕截图,其中显示了在“实例计数”字段中输入了 2,并将“V M 大小”字段设置为“特小”。

保存更改。

在解决方案资源管理器中,右键单击 ChatService 项目。 选择“发布”。

解决方案资源管理器屏幕的聊天服务项目的屏幕截图,其中右键单击下拉菜单显示了“发布...”选项。

如果这是你第一次发布到 Windows Azure,则必须下载凭据。 在 “发布 ”向导中,单击“登录以下载凭据”。 这会提示登录 Windows Azure 门户并下载发布设置文件。

“发布 Windows Azure 应用程序”屏幕的“登录”选项卡的屏幕截图,其中突出显示了“登录以下载凭据”链接。

单击“ 导入 ”并选择下载的发布设置文件。

单击“下一步” 。 在 “发布设置” 对话框中的“ 云服务”下,选择之前创建的云服务。

“发布 Windows Azure 应用程序”屏幕的“设置”选项卡的屏幕截图,其中显示了“常用设置”选项卡中的“云服务”字段。

单击“发布” 。 部署应用程序和启动 VM 可能需要几分钟时间。

现在,运行聊天应用程序时,角色实例使用服务总线主题通过Azure 服务总线进行通信。 主题是允许多个订阅者的消息队列。

底板会自动创建主题和订阅。 若要查看订阅和消息活动,请打开Azure 门户,选择服务总线命名空间,然后单击“主题”。

所选的“云服务”字段的屏幕截图现在填充在Azure 门户中,其中突出显示了“云服务的名称”字段。

消息活动需要几分钟时间才能显示在仪表板中。

显示消息活动时间线Azure 门户 仪表板的屏幕截图,其中显示了一条蓝色和紫色线条,指示不同的消息历史记录。

SignalR 管理主题生存期。 只要部署了应用程序,就不要尝试手动删除主题或更改主题上的设置。