你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Functions 的 SignalR Service 绑定

此系列文章介绍如何在 Azure Functions 中使用 SignalR 服务绑定进行身份验证,并向连接到 Azure SignalR 服务的客户端发送实时消息。 Azure Functions 运行时版本 2.x 和更高版本支持 SignalR 服务的输入和输出绑定。

操作 类型
处理来自 SignalR 服务的消息 触发器绑定
返回服务终结点 URL 和访问令牌 输入绑定
发送 SignalR 服务消息和管理组 输出绑定

安装扩展

你安装的扩展 NuGet 包取决于你在函数应用中使用的 C# 模式:

函数在独立的 C# 工作进程中执行。 若要了解详细信息,请参阅有关在独立工作进程中运行 C# Azure Functions 的指南

通过安装此 NuGet 包将该扩展添加到你的项目。

安装捆绑包

SignalR 服务扩展是在 host.json 项目文件中指定的扩展捆绑包的一部分。 在创建面向版本 3.x 或更高版本的项目时,应该已经安装好此捆绑包。 若要了解详细信息,请参阅扩展捆绑包

添加依赖项

若要在 Java 函数中使用 SignalR 服务注释,需将对 azure-functions-java-library-signalr 项目(1.0 或更高版本)的依赖项添加到 pom.xml 文件。

<dependency>
    <groupId>com.microsoft.azure.functions</groupId>
    <artifactId>azure-functions-java-library-signalr</artifactId>
    <version>1.0.0</version>
</dependency>

连接

可以使用连接字符串Microsoft Entra 标识连接到Azure SignalR 服务。

连接字符串

有关如何检索Azure SignalR 服务的连接字符串的说明,请参阅Azure SignalR 服务中的连接字符串

此连接字符串应存储在具有名称AzureSignalRConnectionString的应用程序设置中。 可以使用绑定配置的属性自定义应用程序设置名称 connectionStringSetting

基于标识的连接

如果使用版本 1.7.0 或更高版本,而不是将连接字符串与机密配合使用,则可以让应用使用 Microsoft Entra 标识

首先,应确保Microsoft Entra 标识具有SignalR 服务所有者的角色

然后,你将使用通用前缀 AzureSignalRConnectionString定义设置。 可以使用绑定配置的属性自定义前缀名称 connectionStringSetting

在此模式下,设置包括以下项:

properties 环境变量模板 说明 必须 示例值
服务 URI AzureSignalRConnectionString__serviceUri 服务终结点的 URI。 仅配置“服务 URI”时,扩展会尝试使用 DefaultAzureCredential 类型对服务进行身份验证。 https://mysignalrsevice.service.signalr.net
令牌凭据 AzureSignalRConnectionString__credential 定义如何为连接获取令牌。 如果部署的 Azure 函数打算使用托管标识身份验证,则此设置应设置为 managedidentity。 仅当托管标识在托管环境中可用时,此值才有效。 managedidentity
客户端 ID AzureSignalRConnectionString__clientId credential 设置为 managedidentity 时,此属性可以设为指定在获取令牌时要使用的用户分配的标识。 该属性接受与分配给应用程序的用户分配的标识对应的客户端 ID。 同时指定资源 ID 和客户端 ID 是无效的。 如果未指定,则使用系统分配的标识。 在本地开发方案中使用时,此属性的使用方式不同,且不应设置 credential 00000000-0000-0000-0000-000000000000
资源 ID AzureSignalRConnectionString__managedIdentityResourceId credential 设置为 managedidentity 时,此属性可以设为指定在获取令牌时要使用的资源标识符。 该属性接受与用户定义的托管标识的资源 ID 对应的资源标识符。 同时指定资源 ID 和客户端 ID 是无效的。 如果两者都没有指定,则会使用系统分配的标识。 在本地开发方案中使用时,此属性的使用方式不同,且不应设置 credential /subscriptions/0000000-0000-0000-0000-0000000000000/resourceGroups/mygroup/providers/Microsoft.SignalRService/SignalR/mysignalrservice

注意

使用local.settings.json本地、Azure 应用程序配置密钥库的文件提供基于标识的连接的设置时,请在设置名称中替换为__:,以确保正确解析名称。

例如,AzureSignalRConnectionString:serviceUri

多个终结点设置

还可以配置多个终结点并为每个终结点指定标识设置。

在这种情况下,请将设置作为 Azure__SignalR__Endpoints__{endpointName}前缀。 {endpointName}这是由你分配的任意名称,用于将一组设置关联到服务终结点。 不能通过connectionStringSetting属性自定义前缀Azure__SignalR__Endpoints__{endpointName}

properties 环境变量模板 说明 必须 示例值
服务 URI Azure__SignalR__Endpoints__{endpointName}__serviceUri 服务终结点的 URI。 仅配置“服务 URI”时,扩展会尝试使用 DefaultAzureCredential 类型对服务进行身份验证。 https://mysignalrsevice1.service.signalr.net
终结点类型 Azure__SignalR__Endpoints__{endpointName}__type 指示服务终结点是主要终结点还是辅助终结点。 如果未指定,则默认为 Primary。 有效值为 PrimarySecondary,不区分大小写。 Secondary
令牌凭据 Azure__SignalR__Endpoints__{endpointName}__credential 定义如何为连接获取令牌。 如果部署的 Azure 函数打算使用托管标识身份验证,则此设置应设置为 managedidentity。 仅当托管标识在托管环境中可用时,此值才有效。 managedidentity
客户端 ID Azure__SignalR__Endpoints__{endpointName}__clientId credential 设置为 managedidentity 时,此属性可以设为指定在获取令牌时要使用的用户分配的标识。 该属性接受与分配给应用程序的用户分配的标识对应的客户端 ID。 同时指定资源 ID 和客户端 ID 是无效的。 如果未指定,则使用系统分配的标识。 在本地开发方案中使用时,此属性的使用方式不同,且不应设置 credential 00000000-0000-0000-0000-000000000000
资源 ID Azure__SignalR__Endpoints__{endpointName}__managedIdentityResourceId credential 设置为 managedidentity 时,此属性可以设为指定在获取令牌时要使用的资源标识符。 该属性接受与用户定义的托管标识的资源 ID 对应的资源标识符。 同时指定资源 ID 和客户端 ID 是无效的。 如果两者都没有指定,则会使用系统分配的标识。 在本地开发方案中使用时,此属性的使用方式不同,且不应设置 credential /subscriptions/0000000-0000-0000-0000-000000000000/resourceGroups/myrg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myusermanagedidentity

有关多个终结点的详细信息,请参阅使用多个实例缩放SignalR 服务

后续步骤

若要详细了解如何配置 SignalR 服务并将其与 Azure Functions 一起使用,请参阅通过 Azure SignalR 服务进行的 Azure Functions 开发和配置