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

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

先决条件:

  • 一个 Microsoft Azure 帐户。
  • Windows Azure SDK
  • Visual Studio 2012 或 2013。
  • 服务总线底板也与 适用于 Windows Server 的服务总线 版本 1.1 兼容。 但是,它与适用于 Windows Server 的服务总线版本 1.0 不兼容。

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

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

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

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

  • Microsoft.AspNet.SignalR
  • Microsoft.AspNet.SignalR.ServiceBus3 Microsoft.AspNet.SignalR.ServiceBus
  • 创建 SignalR 应用程序。

  • 将以下代码添加到 Startup.cs 以配置底板:

    public void Configuration(IAppBuilder app)
        string connectionString = "Service Bus connection string";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "YourAppName");
        app.MapSignalR();
        // ...
    

    此代码使用 TopicCountMaxQueueLength 的默认值配置底板。 有关更改这些值的信息,请参阅 SignalR 性能:横向扩展指标

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

    创建 Azure 服务

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

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

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

    创建 Visual Studio 项目

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

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

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

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

    “新建 ASP.NET 项目 ”对话框中,选择“ MVC”,然后单击“确定”。

    项目向导创建两个项目:

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

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

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

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

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

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

    public void Configuration(IAppBuilder app)
        // Any connection or hub wire up and configuration should go here
        string connectionString = "";
        GlobalHost.DependencyResolver.UseServiceBus(connectionString, "Chat");  
        app.MapSignalR();
    

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

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

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

    部署到 Azure

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

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

    保存更改。

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

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

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

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

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

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

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

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

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

    System.InvalidOperationException“唯一支持的 IsolationLevel 是'IsolationLevel.Serializable'。”

    如果操作的事务级别设置为 以外的 Serializable值,则会发生此错误。 验证是否未对其他事务级别执行任何操作。

  •