使用Dapr C# SDK调用GetSecretAsync获取Azure Key Vault密钥失败
问题分析与解决方案
核心错误原因
从内部异常SocketException (10061): No connection could be made because the target machine actively refused it可以明确:C# SDK尝试连接的端口无法建立连接,根源是端口配置不匹配:
- Postman调用的是Dapr Sidecar的HTTP端口(默认3500),因此能正常获取密钥;
- 代码中却将Dapr Client的HTTP Endpoint设为
50001——这是Dapr Sidecar默认的gRPC端口,HTTP请求发送到gRPC端口会被直接拒绝。
同时,Dapr Client默认优先使用gRPC通信,即使指定了HTTP Endpoint,也可能存在通信协议不匹配的问题。
修复步骤
1. 修正HTTP端口配置
将代码中的UseHttpEndpoint改为Dapr Sidecar的HTTP端口(默认3500,若启动时自定义了端口则用对应值):
var daprClient = new DaprClientBuilder() .UseHttpEndpoint("http://127.0.0.1:3500") .Build();
2. 显式指定HTTP通信(可选但推荐)
为确保SDK使用HTTP协议而非默认的gRPC,添加UseHttpCommunication():
var daprClient = new DaprClientBuilder() .UseHttpEndpoint("http://127.0.0.1:3500") .UseHttpCommunication() .Build();
3. 验证Sidecar启动参数
确认启动Dapr Sidecar时的端口配置,确保HTTP端口和代码中一致,例如启动命令:
dapr run --app-id your-app-id --dapr-http-port 3500 --dapr-grpc-port 50001
其中--dapr-http-port的值要和代码中的端口完全匹配。
4. 检查代理设置
确保本地回环地址(127.0.0.1、localhost)在no_proxy环境变量中,避免请求被代理拦截:
# Windows系统 set no_proxy=127.0.0.1,localhost # Linux/macOS系统 export no_proxy=127.0.0.1,localhost
额外验证
修复连接问题后,可检查GetSecretAsync中的version_id是否正确对应Azure Key Vault中密钥的版本,避免后续出现密钥找不到的问题。
内容的提问来源于stack exchange,提问作者Neltech101
相关产品推荐
相关产品推荐

