Я прочитал много противоречивых ответов по этому поводу, но до сих пор не совсем понял.У меня есть веб-приложение .net core 1.1, которое использует множество внешних API для различных источников данных.Моя текущая реализация использует DI для передачи пользовательского класса "webclient" каждому контроллеру, который внутренне создает и удаляет httpclient для каждого запроса (внутри блока using).Я вижу тонну неактивных соединений на сервере, поэтому я почти уверен, что это вызывает их.У меня также есть некоторые проблемы с аварийным завершением приложения ядра .net, и я больше не отвечаю, поэтому мне интересно, создает ли слишком много открытых соединений эту проблему.
Я понимаю, что httpclient может быть многократно использован для многих соединений, но я не совсем уверен в некоторых вещах.Я читал, что повторное использование одного и того же httpclient действительно более полезно для толстых клиентских приложений и не так полезно для веб-приложений из-за очень параллельного характера веб-запросов.Я также читал, что вы хотите кэшировать один и тот же httpclient для повторного использования для отдельного URL, но мой URL использует строки запросов для передачи параметров, поэтому не значит ли это, что каждый полностью квалифицированный URL уникален среди других?
Моя идея состоит в том, чтобы, возможно, кэшировать один экземпляр httpclient для каждого базового доменного имени API, к которому я обращаюсь, но я не нашел подтверждения, если бы это дало те преимущества, которые я ищу при использовании одного экземпляра httpclient.Я предполагаю, что моя цель состоит в том, чтобы повторно использовать бездействующие соединения, это достигнет этого?
Я также натолкнулся на ссылку на решение, похожее на то, что я делаю, которое будет кэшировать эти экземпляры, но затем проверять, не уничтожился ли какой-либо из них в какой-то момент, и воссоздавать их по мере необходимости.
Кажется, это должно быть легко, но есть масса противоречивой информации!