HttpClient как singleton в ядре dotnet
В полной структуре появился шаблон, который сделал HttpClient одиночным. Это связано с тем, что существующие соединения могут быть повторно использованы, однако в полной структуре при этом выполняются проблемы кэширования DNS. В основном, когда вы запускаете httpclient в качестве одиночного элемента в полной структуре, он будет кэшировать результаты dns, и вам придется использовать ServicePointManager, чтобы заставить его обновляться один раз в то время.
В настоящее время в ядре LTS ячеек нет ServicePointManager, поэтому мой вопрос. Можете ли вы запустить HttpClient в качестве одноэлементного ядра в ядре dotnet и учесть его обновления DNS?
Ответы
Ответ 1
Я цитирую сообщение из ссылки ниже
"К сожалению, сегодня нет способа сделать это с помощью .NET Core. Либо ServicePointManager должен быть перенесен на .NET Core, либо аналогичные эквивалентные функции должны быть включены каким-то другим способом."
Вот ссылка, которую стоит проверить: https://github.com/dotnet/corefx/issues/11224
Ответ 2
Я также использую HTTPClient как singleton и вставляю его в контроллеры в своих API-интерфейсах .NET Core.
Я могу подтвердить, что ServicePointManager существует в .NET Core Runtime 2.0.5.
Я использую следующее, после того как я создал запрос для решения проблем DNS.
Uri vRequestUri = new Uri ("https:api.example.com/....");
HttpRequestMessage vRequest = new HttpRequestMessage (HttpMethod.Post, vRequestUri);
ServicePoint vSP = ServicePointManager.FindServicePoint (vRequest.RequestUri);
vSP.ConnectionLeaseTimeout = 60 * 1000; // 1 Minute
Для тех, кто не знает проблемы DNS, следующая статья будет информативной http://byterot.blogspot.com.tr/2016/07/singleton-httpclient-dns.html