.NET Core'da HTTP istemcilerini keşfetme

Tamamlandı

Köprü Metni Aktarım Protokolü (veya HTTP), bir web sunucusundan kaynak istemek için kullanılır. Web'de birçok kaynak türü vardır ve HTTP bu kaynaklara erişmek için bir dizi istek yöntemi tanımlar. .NET Core'da bu istekler bir örneği HttpClientaracılığıyla yapılır.

Uygulamanıza uygulamak HttpClient için iki seçenek vardır ve öneri, istemcilerin yaşam süresi yönetim gereksinimlerine göre uygulamayı seçmektir:

  • Uzun ömürlü istemciler: sınıfını static kullanarak veya tekil bir örnek oluşturun HttpClient ve ayarlayınPooledConnectionLifetime
  • Kısa süreli istemciler: tarafından oluşturulan istemcileri kullanma IHttpClientFactory

sınıfıyla HttpClient uygulama

sınıfı System.Net.Http.HttpClient HTTP istekleri gönderir ve URI tarafından tanımlanan bir kaynaktan HTTP yanıtları alır. Örnek HttpClient , bu örnek tarafından yürütülen tüm isteklere uygulanan bir ayar koleksiyonudur ve her örnek, isteklerini diğerlerinden yalıtan kendi bağlantı havuzunu kullanır. .NET Core 2.1 sürümünden SocketsHttpHandler başlayarak sınıfı, tüm platformlarda davranışı tutarlı hale getirerek uygulamayı sağlar.

HttpClient yalnızca bir bağlantı oluşturulduğunda DNS girdilerini çözümler. DNS sunucusu tarafından belirtilen yaşam süresi (TTL) sürelerini izlemez. DNS girişleri düzenli olarak değişirse, istemci bu güncelleştirmelerin farkında değildir. Bu sorunu çözmek için, özelliği ayarlayarak PooledConnectionLifetime bağlantının ömrünü sınırlayabilirsiniz; böylece bağlantı değiştirildiğinde DNS araması yinelenir.

Aşağıdaki örnekte, HttpClient bağlantıları 15 dakika boyunca yeniden kullanacak şekilde yapılandırılmıştır. Geçen süre içinde TimeSpan belirtilenden PooledConnectionLifetime sonra bağlantı kapatılır ve yeni bir bağlantı oluşturulur.

var handler = new SocketsHttpHandler
{
    PooledConnectionLifetime = TimeSpan.FromMinutes(15) // Recreate every 15 minutes
};
var sharedClient = new HttpClient(handler);

ile uygulama IHttpClientFactory

, IHttpClientFactory özel yapılandırmalarla örnekler oluşturabilen HttpClient bir fabrika soyutlaması görevi görür. IHttpClientFactory .NET Core 2.1'de kullanıma sunulmuştur. Yaygın HTTP tabanlı .NET iş yükleri, ara yazılımdan kolayca yararlanabilir.

AddHttpClient uzantı yöntemlerinden herhangi birini çağırdığınızda, IHttpClientFactory ve ilgili hizmetleri IServiceCollection öğesine eklersiniz. IHttpClientFactory türü aşağıdaki avantajları sunar:

  • sınıfını bağımlılık eklemeye HttpClient hazır bir tür olarak kullanıma sunar.
  • Mantıksal HttpClient örneklerini adlandırmak ve yapılandırmak için merkezi bir konum sağlar.
  • içindeki işleyicileri temsilci olarak atama yoluyla giden ara yazılım kavramını uyumlu hale getirir HttpClient.
  • içinde işleyicileri HttpClienttemsilci seçme avantajından yararlanmak için Polly tabanlı ara yazılım için uzantı yöntemleri sağlar.
  • Altta yatan HttpClientHandler örneklerinin önbelleğe alınmasını ve ömrünü yönetir. Otomatik yönetim, yaşam süreleri el ile yönetildiğinde HttpClient oluşan yaygın Etki Alanı Adı Sistemi (DNS) sorunlarını önler.
  • Fabrika tarafından oluşturulan istemciler aracılığıyla gönderilen tüm istekler için yapılandırılabilir bir günlük deneyimi ekler.

Örneklerin yaşam ömrünü ve örneklemesini çerçevenin HttpClientFactory yönetmesine izin vermelisinizHttpClient. Yaşam süresi yönetimi, yaşam süreleri el ile yönetildiğinde oluşabilecek DNS (Etki Alanı Adı Sistemi) sorunları gibi yaygın sorunların önlenmesine HttpClient yardımcı olur.

Bir uygulamada kullanılabilecek çeşitli yollar vardır IHttpClientFactory :

En iyi yaklaşım, uygulamanın gereksinimlerine bağlıdır.