快速入门:使用 ASP.NET 和 SignalR 服务创建聊天室

Azure SignalR 服务基于适用于 ASP.NET Core 2.1 的 SignalR,后者与 ASP.NET SignalR 100% 并不兼容。 Azure SignalR 服务基于最新的 ASP.NET Core 技术重新实现了 ASP.NET SignalR 数据协议。 使用用于 ASP.NET SignalR 的 Azure SignalR 服务时,某些 ASP.NET SignalR 功能不再受支持,例如 Azure SignalR 在客户端重新连接时不重播消息。 另外,Forever Frame 传输和 JSONP 也不受支持。 若要使 ASP.NET SignalR 应用程序兼容 SignalR 服务,必须进行一些代码更改并确保所依赖库的版本正确。

请参阅版本差异文档,获取在 ASP.NET SignalR 和 ASP.NET Core SignalR 之间进行的功能比较的完整列表。

本快速入门介绍如何从 ASP.NET 和 Azure SignalR 服务着手来创建类似的聊天室应用程序

如果你没有 Azure 订阅,请在开始之前创建一个试用帐户

先决条件

遇到问题? 请试用故障排除指南

登录 Azure

使用 Azure 帐户登录到 Azure 门户

遇到问题? 请试用故障排除指南

在本部分中,你将创建一个基本 Azure SignalR 实例来用于你的应用。 以下步骤使用 Azure 门户创建新实例,但你也可以使用 Azure CLI。 有关详细信息,请参阅 Azure SignalR 服务 CLI 参考中的 az signalr create 命令。

  1. 登录 Azure 门户
  2. 在页面的左上角,选择“+ 创建资源” 。
  3. 在“创建资源”页上,在“搜索服务和市场”文本框中,输入“signalr”,然后从列表中选择“SignalR 服务”。
  4. 在“SignalR 服务”页上,选择“创建”。
  5. 在“基本信息”选项卡上,输入新 SignalR 服务实例的基本信息。 输入以下值:
字段 建议的值 描述
订阅 选择订阅 选择要用于创建新的 SignalR 服务实例的订阅。
资源组 创建一个名为 SignalRTestResources 的资源组 为 SignalR 资源选择或创建资源组。 对于本教程,创建新的资源组比使用现有资源组更为合适。 若要在完成本教程后释放资源,请删除资源组。

删除资源组还会删除属于该组的所有资源。 此操作不能撤消。 删除资源组之前,请确保它不包含你希望保留的资源。

有关详细信息,请参阅 Using resource groups to manage your Azure resources(使用资源组管理 Azure 资源)。
资源名称 testsignalr 输入用于 SignalR 资源的唯一资源名称。 如果你的区域中已使用了 testsignalr,请添加一个数字或字符,以将名称设为唯一。

该名称必须是包含 1 到 63 个字符的字符串,只能包含数字、字母和连字符 (-) 字符。 该名称的开头或末尾不能是连字符字符,并且连续的连字符字符无效。
区域 选择你的区域 为新的 SignalR 服务实例选择合适的区域。

Azure SignalR 服务当前并非在所有区域中都可用。 有关详细信息,请参阅 Azure SignalR 服务区域可用性
定价层 选择“更改”,然后选择“免费(仅限开发/测试)”。 选择“选择”以确认你选择的定价层。 Azure SignalR 服务有三个定价层:免费、标准和高级。 教程使用的是免费层,除非在先决条件中另行说明。

若要详细了解各个层级之间的功能差异以及定价,请参阅 Azure SignalR 服务定价
服务模式 选择适当的服务模式 在 Web 应用中托管 SignalR 中心逻辑并使用 SignalR 服务作为代理时,请使用“默认”。 使用无服务器技术(如 Azure Functions)托管 SignalR 中心逻辑时,请使用“无服务器”

“经典”模式仅用于向后兼容,不建议使用。

有关详细信息,请参阅 Azure SignalR 服务中的服务模式

对于 SignalR 教程,你不需要更改“网络”和“标记”选项卡上的设置。

  1. 选择“基本信息”选项卡底部的“查看 + 创建”按钮。
  2. 在“查看 + 创建”选项卡上检查各个值,然后选择“创建”。 部署需要几分钟时间才能完成。
  3. 在部署完成后,选择“转到资源组”按钮。
  4. 在 SignalR 资源页面上,从左侧菜单中选择“设置”下的“密钥”。
  5. 复制主密钥的连接字符串。 在本教程中,稍后你将需要使用此连接字符串来配置你的应用。

ASP.NET SignalR 应用程序不支持无服务器模式。 对于 Azure SignalR 服务实例,请始终使用“默认”或“经典”。

也可根据创建 SignalR 服务脚本中的说明,创建在本快速入门中使用的 Azure 资源。

遇到问题? 请试用故障排除指南

克隆示例应用程序

在部署该服务时,让我们切换到使用代码。 克隆来自 GitHub 的示例应用,设置 SignalR 服务连接字符串,并在本地运行该应用程序。

  1. 打开 git 终端窗口。 切换到要克隆示例项目的文件夹。

  2. 运行下列命令,克隆示例存储库。 此命令在计算机上创建示例应用程序的副本。

    git clone https://github.com/aspnet/AzureSignalR-samples.git
    

遇到问题? 请试用故障排除指南

配置并运行聊天室 Web 应用

  1. 启动 Visual Studio,并打开所克隆存储库的 aspnet-samples/ChatRoom/ 文件夹中的解决方案。

  2. 在打开了 Azure 门户的浏览器中,查找并选择所创建的实例。

  3. 选择“密钥”以查看 SignalR 服务实例的连接字符串。

  4. 选择并复制主连接字符串。

  5. 现在请在 web.config 文件中设置连接字符串。

    <configuration>
    <connectionStrings>
        <add name="Azure:SignalR:ConnectionString" connectionString="<Replace By Your Connection String>"/>
    </connectionStrings>
    ...
    </configuration>
    
  6. 需在 Startup.cs 中调用 MapAzureSignalR({YourApplicationName}) 而不是 MapSignalR(),传入连接字符串,使应用程序连接到服务,而不是自行托管 SignalR。 将 {YourApplicationName} 替换为应用程序的名称。 此名称是独一无二的名称,可以将此应用程序与其他应用程序区别开来。 可以使用 this.GetType().FullName 作为值。

    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        app.MapAzureSignalR(this.GetType().FullName);
    }
    

    此外还需在使用这些 API 之前参考服务 SDK。 打开“工具”|“NuGet 包管理器”|“包管理器控制台”,然后运行以下命令:

    Install-Package Microsoft.Azure.SignalR.AspNet
    

    除了这些更改,所有其他功能保持不变,你仍然可以使用已经熟悉的中心界面来编写业务逻辑。

    注意

    在实现时,Azure SignalR 服务 SDK 会公开用于协商的终结点 /signalr/negotiate。 它会在客户端尝试连接时返回特殊的协商响应,将客户端重定向到连接字符串中定义的服务终结点。

  7. F5 以调试模式运行项目。 可以看到应用程序在本地运行。 它现在会连接到 Azure SignalR 服务,而不是由应用程序自身来托管 SignalR 运行时。

遇到问题? 请试用故障排除指南

清理资源

如果不打算继续使用此应用,请按照以下步骤删除本快速入门中创建的所有资源,以免产生任何费用:

  1. 在 Azure 门户的最左侧选择“资源组”,,然后选择创建的资源组。 或者,可以使用搜索框按名称查找资源组。

  2. 在打开的窗口中选择资源组,然后单击“删除资源组”。

  3. 在新窗口中键入要删除的资源组的名称,然后单击“删除”

重要

删除资源组的操作不可逆,资源组以及其中的所有资源将被永久删除。 请确保不会意外删除错误的资源组或资源。 如果在现有资源组(其中包含要保留的资源)中为托管此示例而创建了相关资源,可从各自的边栏选项卡逐个删除这些资源,而不要删除资源组。

登录到 Azure 门户,然后选择“资源组”。

在“按名称筛选...”文本框中键入资源组的名称。 本快速入门的说明使用了名为“SignalRTestResources”的资源组 。 在结果列表中的资源组上,单击“...”,然后单击“删除资源组” 。

Delete

片刻之后,将会删除该资源组及其包含的所有资源。

遇到问题? 请试用故障排除指南

后续步骤

在本快速入门中,我们创建了一个新的 Azure SignalR 服务资源,并将其与 ASP.NET Web 应用配合使用。 接下来,需了解如何将 Azure SignalR 服务与 ASP.NET Core 配合使用,以便开发实时应用程序。