Çoklu API Hizmetleri için .Net Core HttpClientFactory

Sep 10 2020

Yaklaşık 4 farklı API hizmetine bağlanması gereken bir .Net Core projem var, HttpClient kodlarının hiçbirinde uzman değilim, ancak bulduğuma göre, genellikle yalnızca bir örneği yeniden kullanmak isteyeceksiniz HttpClient. Genel fikir birliğine göre HttpClientFactory'yi .Net Core'da Startup sınıfınıza kaydedip DI kullanarak talep ederek kullanmaktır.

Şimdi varsayılan üstbilgilerimin çoğu ve bunlar genellikle BaseAddress url'si dışında aynı, 4 farklı API hizmetine bağlanırken bunu nasıl yapmalıyım? 4 farklı adlandırılmış istemciyi kaydetmeli miyim yoksa tüm varsayılan bilgileri önceden ayarlanmış bir istemciye mi sahip olmalıyım ve ardından gerektiğinde manuel olarak yapılandırmalı mıyım, örneğin adresi yapılandırma?

Bu konuda oldukça yeni olduğum için genel sorular olacaktır, HttpClient'in bir örneğini yeniden kullanmam gerektiği söyleniyor.

  1. Her API hizmeti için 4 farklı adlandırılmış istemci oluşturursam, .CreateClient () yöntemini çağırdığımda bu HttpClient'in 4 örneğini oluşturmaz mı?
  2. .CreateClient (), her çağrıldığında yeni bir örnek oluşturur, bu, bir API hizmetine 3 farklı çağrı yapmam gerektiğini söylerse, HttpClient'in bir örneğine sahip olma amacını bozmaz, bu çağrıların her biri bir. Bir tür bağlantı kurmak için CreateClient () ve bu HttpClient'in 3 örneğini oluşturacak mı?

Netlik için herhangi bir yardım memnuniyetle karşılanacaktır,

Teşekkürler!

Yanıtlar

2 scharnyw Sep 10 2020 at 14:01

Kullanmanın amacı, IHttpClientFactoryörneklerini yeniden kullanmak değildir HttpClient. Bunun yerine, HTTP bağlantılarını ve soketlerini yöneten temel nesne olan HttpMessageHandler(aslında HttpClientHandlersoyuttan türetilen ) örneklerini yeniden kullanmaktır (havuzlayarak) HttpMessageHandler. Microsoft Docs'tan alınan bu şema bunu iyi gösteriyor.

Sık yapılan aramaların, sık yapılan aramalarla IHttpClientFactory.CreateClient()aynı sorunu yaratacağından endişelendiniz new HttpClient(). Ancak durum böyle değil. Microsoft docs tarafından açıklandığı gibi , sık yapılan çağrıların new HttpClient()yuva tükenmesine neden olmasının nedeni , bu kurucunun yeni bir örnek oluşturmasıdır HttpMessageHandler:

Bununla birlikte, sorun aslında HttpClient ile değil, HttpClient için varsayılan yapıcıyla değil, çünkü yukarıda belirtilen yuva tükenmesi ve DNS değişiklikleri sorunları olan HttpMessageHandler'ın yeni bir somut örneğini oluşturduğu için.

Sen de görebileceğiniz kaynak kodunun ait IHttpClientFactorybunun parametresiz yapıcı kullanmadığını HttpClientiçinde CreateClient(). Bunun yerine, HttpMessageHandlerbir havuzdan alır ve onu yaratılana enjekte eder HttpClient.

Yazılı veya adlandırılmış istemciler kullanıyor olsanız da, HttpClient örneğini geçici bir nesne gibi kullanmalısınız: oluşturmak ucuzdur ve uzun süre önbelleğe almanıza gerek yoktur.