如何在Azure Functions中修改CosmosClient的ConnectionMode为Gateway
Azure Functions Cosmos DB绑定设置ConnectionMode为Gateway的解决方案
你原来的写法不生效是因为
CosmosClient实例由Azure Functions的Cosmos DB绑定托管注入,参数后的默认赋值会被运行时注入的实例覆盖,不会生效。
可行方案如下:
- 方案1:配置重载(无代码改动,推荐)
Azure Functions Cosmos DB v4及以上版本扩展支持通过配置直接重载CosmosClient的参数,操作如下:- 本地调试时,在
local.settings.json的Values节点新增配置:"CosmosConnectionString__ConnectionMode": "Gateway" - 部署到Azure时,在对应应用服务的「配置」-「应用程序设置」中新增同名配置项,值设为
Gateway即可。
注意配置键的规则是{你的连接字符串配置名}__ConnectionMode,双下划线为固定分隔符,你当前用的连接字符串配置名是CosmosConnectionString,所以对应上述键名。
- 本地调试时,在
- 方案2:自定义构造CosmosClient实例
如果你使用的扩展版本不支持配置重载,可以手动构造CosmosClient,放弃绑定注入的实例:- 去掉函数参数中的
CosmosClient绑定声明 - 在函数类中定义静态单例的CosmosClient,避免每次调用重复初始化导致的套接字资源耗尽问题:
using Microsoft.Azure.Cosmos; public static class YourFunctionClass { // 静态单例初始化 private static readonly CosmosClient _customCosmosClient = new CosmosClient( Environment.GetEnvironmentVariable("CosmosConnectionString"), new CosmosClientOptions { ConnectionMode = ConnectionMode.Gateway }); public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "policy")] HttpRequest req, ILogger log) { // 直接使用_customCosmosClient操作数据库即可 var container = _customCosmosClient.GetContainer("AR", "Policy"); // 后续业务逻辑 } }
- 去掉函数参数中的
内容的提问来源于stack exchange,提问作者nana
相关产品推荐
相关产品推荐

