You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建并释放Azure.Security.KeyVault.Secrets中的SecretClient

SecretClient 创建与释放正确用法(从旧版KeyVaultClient迁移适配)

新版 Azure.Security.KeyVault.Secrets 下的 SecretClient 遵循Azure新一代SDK设计规范,和旧版KeyVaultClient的使用逻辑有明显区别,具体用法如下:

实例创建

SecretClient 本身是线程安全的,官方推荐在应用生命周期内复用单例,不需要每次执行密钥操作都新建实例,重复创建会额外增加TCP连接开销、拖慢操作性能。
常见创建方式有两种:

  • 基础创建:传入密钥保管库URI、身份凭据即可
// 密钥保管库URI格式为 https://<你的保管库名称>.vault.azure.net/
var kvUri = new Uri("https://your-keyvault-name.vault.azure.net/");
var secretClient = new SecretClient(kvUri, new DefaultAzureCredential());
  • 自定义配置创建:如果需要调整重试策略、请求超时、代理规则等配置,传入SecretClientOptions参数即可
var clientOptions = new SecretClientOptions
{
    Retry = {
        MaxRetries = 3,
        BackoffMode = Azure.Core.RetryMode.Exponential,
        MaxDelay = TimeSpan.FromSeconds(10)
    }
};
var secretClient = new SecretClient(kvUri, new DefaultAzureCredential(), clientOptions);

如果是在ASP.NET Core等带依赖注入框架的项目里,直接把SecretClient注册为单例注入即可,不需要额外封装:

// Program.cs 服务注册阶段
builder.Services.AddSingleton(sp => 
    new SecretClient(
        new Uri(builder.Configuration["KeyVault:Endpoint"]),
        new DefaultAzureCredential()
    )
);

实例释放规则

SecretClient 实现了IDisposable接口,释放逻辑根据使用场景区分即可,不需要过度处理:

  • 临时创建、短期使用的场景:直接用using语句包裹实例,出作用域时会自动释放内部持有的HTTP连接等资源
using var tempClient = new SecretClient(kvUri, credential);
// 执行单次密钥操作
KeyVaultSecret secret = tempClient.GetSecret("my-secret");
// 离开当前代码块后tempClient自动释放
  • 单例复用(包括DI注册为单例)的场景:不需要手动调用Dispose()方法,SDK内部会自动管理连接池和资源占用,在应用进程退出时会自动完成资源回收;手动提前释放单例实例,会导致所有正在使用该实例的业务逻辑抛出对象已释放异常。

迁移提示:旧版KeyVaultClient因为设计缺陷,很多开发者会养成用完即释放、每次操作新建实例的习惯,新版SecretClient不需要遵循这套逻辑,单例长期复用是官方推荐的标准用法,不会出现旧版常见的连接泄漏、资源占用过高问题。

内容的提问来源于stack exchange,提问作者cherrypye_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:58:01