Azure Functions 的 SignalR 服务绑定
这组文章介绍如何在 Azure Functions 中使用 SignalR 服务绑定向连接到 Azure SignalR 服务 的客户端进行身份验证和发送实时消息。 Azure Functions 运行时版本 2.x 及更高版本支持 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 。 有效值 Primary 且 Secondary 不区分大小写。 |
不 | 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 开发和配置。