Azure Functions 的 SignalR 服务绑定

这组文章介绍如何在 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 服务注释,需要将依赖项添加到 pom.xml 文件中 azure-functions-java-library-signalr 项目(版本 1.0 或更高版本)。

<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 属性自定义前缀名称。

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

财产 环境变量模板 描述 必填 示例值
服务 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 应用配置Key Vault 提供基于标识的连接设置,将 __ 替换为设置名称中的 :,以确保正确解析名称。

例如,AzureSignalRConnectionString:serviceUri

多个终结点设置

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

在本例中,请将设置前缀为 Azure__SignalR__Endpoints__{endpointName}{endpointName} 是由你分配的任意名称,用于将一组设置关联到服务终结点。 connectionStringSetting 属性无法自定义前缀 Azure__SignalR__Endpoints__{endpointName}

财产 环境变量模板 描述 必填 示例值
服务 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

有关多个终结点的详细信息,请参阅 具有多个实例的 Scale SignalR 服务

为了获得最佳安全性,函数应用在连接到 Azure SignalR 服务时应使用托管标识符,而不是使用包含共享密钥的连接字符串。 有关详细信息,请参阅 使用 Microsoft Entra 托管标识授权对 Azure SignalR 服务资源的请求。

后续步骤

有关如何配置和使用 SignalR 服务和 Azure Functions 的详细信息,请参阅 azure SignalR 服务 Azure Functions 开发和配置。