Azure CosmosClient持续抛出Socket权限异常问题求助
解决方案
1. 禁用Cosmos SDK的实例元数据查找
在CosmosClientOptions中添加DisableInstanceMetadataLookup = true,直接阻止SDK主动请求Azure实例元数据服务,这是解决该报错最直接的方法:
builder.Register( x => { var cosmosDbOptions = x.Resolve<CosmosDbOptions>(); var socketsHttpHandler = x.Resolve<SocketsHttpHandler>(); return new CosmosClient(cosmosDbOptions.ConnectionString, new CosmosClientOptions() { ConnectionMode = ConnectionMode.Direct, PortReuseMode = PortReuseMode.PrivatePortPool, IdleTcpConnectionTimeout = new TimeSpan(0, 23, 59, 59), SerializerOptions = new CosmosSerializationOptions() { PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase }, HttpClientFactory = () => new HttpClient(socketsHttpHandler, disposeHandler: false), // 禁用元数据查找 DisableInstanceMetadataLookup = true }); }) .AsSelf() .SingleInstance();
2. 调整SocketsHttpHandler配置(可选)
如果禁用元数据查找后仍有异常,可在SocketsHttpHandler中添加禁用代理、禁止自动重定向的配置,避免元数据请求被错误路由:
builder.Register(c => new SocketsHttpHandler() { PooledConnectionLifetime = TimeSpan.FromMinutes(10), MaxConnectionsPerServer = 20, // 禁用代理 UseProxy = false, // 禁止自动重定向 AllowAutoRedirect = false }).As<SocketsHttpHandler>().SingleInstance();
3. 切换连接模式(备选)
若Direct模式在Durable Function环境下存在兼容性问题,可尝试切换到Gateway模式:
// 修改ConnectionMode配置项 ConnectionMode = ConnectionMode.Gateway
内容的提问来源于stack exchange,提问作者freak_geek
相关产品推荐
相关产品推荐

