Подтвердить что ты не робот

HttpClient как singleton в ядре dotnet

В полной структуре появился шаблон, который сделал HttpClient одиночным. Это связано с тем, что существующие соединения могут быть повторно использованы, однако в полной структуре при этом выполняются проблемы кэширования DNS. В основном, когда вы запускаете httpclient в качестве одиночного элемента в полной структуре, он будет кэшировать результаты dns, и вам придется использовать ServicePointManager, чтобы заставить его обновляться один раз в то время.

В настоящее время в ядре LTS ячеек нет ServicePointManager, поэтому мой вопрос. Можете ли вы запустить HttpClient в качестве одноэлементного ядра в ядре dotnet и учесть его обновления DNS?

4b9b3361

Ответ 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