gpt4 book ai didi

c# - 在 .NET 中创建和处置 KeyVaultClient

转载 作者:行者123 更新时间:2023-12-05 06:20:28 27 4
gpt4 key购买 nike

不太清楚创建和处置 KeyVaultClient 对象的最佳做法是什么。

我目前正在通过以下方式实例化 KeyVaultClient:

var azureServiceTokenProvider = new AzureServiceTokenProvider();

_keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback), httpClient);

我目前正在使用注入(inject)的 IHttpClientFactory 创建 httpClient。如果我不提供 HttpClientKeyVaultClient 实际上会做什么?我假设它正在创建它自己的 HttpClient 实例,但它如何管理该实例?

KeyVaultClient 实现了 IDisposable。很明显,KeyVaultClient 正在使用一个 HttpClient 实例,我在很多地方都听说在每次之后处理 HttpClient 不是一个好主意用法(比如单个 GET 调用)。这是否意味着我应该避免处理 KeyVaultClient 以及它会处理我提供的 httpClient 实例?

任何对此的澄清都会很好。

最佳答案

如果 HttpClient 是使用默认构造函数创建的,它会负责保存所有资源,并在自己的处理过程中处理它们。当使用来自工厂的 HttpClient 时,它使用一个不同的构造函数来提供它自己的 HttpMessageHandler(这是将持有套接字的那个)。在这种特定情况下,实现将从工厂中的一个池中获取(仍然持有对它的引用)并且在 HttpClient 上调用 dispose 将在 HttpMessageHandler 上调用 dispose ,但这不会关闭资源,而是将其放回池中以供下一个客户端使用。从而避免打开的套接字溢出。

因此,通过从工厂提供客户端并将其注入(inject)到只有限定生命周期的 KeyVaultClient 中,将负责管理套接字,恕我直言,这是最佳使用方式。相反,将 KeyVaultClient 注册为单例会导致 HttpClientFactory 有助于避免的问题。

关于c# - 在 .NET 中创建和处置 KeyVaultClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60429744/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com