Создание и размещение KeyVaultClient в. NET - PullRequest
1 голос
/ 27 февраля 2020

Немного запутался, какие лучшие практики для создания и утилизации KeyVaultClient объектов.

В настоящее время я создаю экземпляр KeyVaultClient следующим образом:

var azureServiceTokenProvider = new AzureServiceTokenProvider();

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

В настоящее время я создаю httpClient с использованием введенного IHttpClientFactory. Что на самом деле делает KeyVaultClient, если я не поставляю HttpClient? Я предполагаю, что он создает свой собственный экземпляр HttpClient, но как он управляет этим экземпляром?

KeyVaultClient реализует IDisposable. Очевидно, что под капотом KeyVaultClient используется экземпляр HttpClient, и во многих местах я слышал, что не стоит выбрасывать HttpClient после каждого использования (скажем, один вызов GET). Означает ли это, что я должен избегать утилизации KeyVaultClient, а также избавиться от моего предоставленного httpClient экземпляра?

Любое разъяснение по этому поводу было бы здорово.

1 Ответ

1 голос
/ 27 февраля 2020

Если HttpClient создан с конструктором по умолчанию, он заботится о хранении всех ресурсов, а также располагает их по своему усмотрению. При использовании HttpClient от фабрики он использует другой конструктор, предоставляющий свой собственный HttpMessageHandler (это тот, который будет содержать сокет). В этом конкретном c случае реализация будет взята из пула на фабрике (которая все еще содержит ссылку на него), и вызов dispose на HttpClient вызовет dispose на HttpMessageHandler, но это не закроет ресурсы, но положить его обратно в пул как доступный для следующего клиента. Это позволит избежать переполнения открытых сокетов.

Таким образом, предоставив клиента с завода и добавив его в KeyVaultClient, который имеет только ограниченный срок службы, вы позаботитесь об управлении сокетами и, на мой взгляд, это лучший способ Применение. Вместо этого регистрация KeyVaultClient как синглтона приведет к проблемам, которых HttpClientFactory помогает избежать.

...