快速入门:使用 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 中的 SignalR 服务实例。

  1. 选择 Azure 门户左上角的“新建”按钮。 在“新建”屏幕中,在搜索框中键入“SignalR 服务” ,然后按 Enter。

    显示 Azure 门户中 SignalR 服务的搜索结果的屏幕截图。

  2. 从搜索结果中选择“SignalR 服务” ,然后选择“创建” 。

  3. 输入以下设置。

    设置 建议的值 说明
    资源名称 全局唯一名称 用于标识新的 SignalR 服务实例的名称。 有效的字符是 a-z0-9-
    订阅 订阅 在其下创建此新 SignalR 服务实例的订阅。
    资源组 myResourceGroup 要在其中创建 SignalR 服务实例的新资源组的名称。
    位置 中国东部 选择你附近的区域
    定价层 免费 免费试用 Azure SignalR 服务。
    单位计数 不适用 单位计数指定 SignalR 服务实例可以接受的连接数。 它只能在标准层中配置。
    服务模式 无服务器 用于 Azure Functions 或 REST API。

    显示带有值的“SignalR 基本信息”选项卡的屏幕截图。

  4. 选择“创建” 以开始部署 SignalR 服务实例。

  5. 部署该实例后,在门户中打开它并找到其“设置”页。 仅当通过 Azure Functions 绑定或 REST API 使用 Azure SignalR 服务时,才将“服务模式”设置更改为“无服务器” 。 否则,将其保留在“经典” 或“默认” 中。

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”的资源组 。 在结果列表中的资源组上,单击“...”,然后单击“删除资源组” 。

删除

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

遇到问题? 尝试使用故障排除指南通知我们

后续步骤

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