你当前正在访问 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/00000000-0000-0000-0000-000000000000/resourceGroups/mygroup/providers/Microsoft.SignalRService/SignalR/mysignalrservice |
注意
在本地使用 local.settings.json
文件、Azure 应用程序配置或密钥保管库为基于标识的连接提供设置时,请将设置名称中的 __
替换为 :
,以确保正确解析名称。
例如,AzureSignalRConnectionString:serviceUri
。
多个终结点设置
还可以配置多个终结点并为每个终结点指定标识设置。
在这种情况下,请在设置中添加前缀 Azure__SignalR__Endpoints__{endpointName}
。
{endpointName}
是由你分配的任意名称,用于将一组设置关联到服务终结点。 前缀 Azure__SignalR__Endpoints__{endpointName}
不能使用 connectionStringSetting
属性进行自定义。
properties | 环境变量模板 | 说明 | 必须 | 示例值 |
---|---|---|---|---|
服务 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/00000000-0000-0000-0000-000000000000/resourceGroups/myrg/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myusermanagedidentity |
有关多个终结点的详细信息,请参阅使用多个实例扩展 SignalR 服务
为了获得最佳安全性,函数应用在连接到 Azure SignalR 服务时应使用托管标识符,而不是使用包含共享密钥的 连接字符串。 有关详细信息,请参阅授权使用 Microsoft Entra 托管标识Azure SignalR 服务资源的请求。
后续步骤
若要详细了解如何配置 SignalR 服务并将其与 Azure Functions 一起使用,请参阅通过 Azure SignalR 服务进行的 Azure Functions 开发和配置。