Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 9666|Yanıt: 7

[Kaynak] ASP.NET Core (XV), HTTP istekleri göndermek için HttpClient kullanır

[Bağlantıyı kopyala]
Yayınlandı 14.05.2022 19:37:21 | | | |
ASP.NET ile bir uygulama oluşturulurken, HTTP isteği yapmak için HttpClient sınıfının bir örneği kullanılır. HttpClient kullanmak basit görünebilir. Ancak, bazı potansiyel sorunlar uygulama ağır yük altında olana kadar fark edilmez.

.NET içinde sağlanan orijinal HttpClient sınıfıyla ilgili sorunlar:Bağlantı girişi görünür.

HttpClient, IDisposable uygularken, using ifadesinde ilan edip örneklemek tercih edilen bir işlem değildir, çünküBir HttpClient nesnesi serbest bırakıldığında, altta yatan soket serbest bırakmazhemenserbest bırakma, bu da soket tükenme sorunlarına yol açabilir.

Sorun aslında HttpClient'ın kendisi değil, HttpClient'ın varsayılan üreticisidir; çünkü yukarıda bahsedilen "soket tükenmesi" ve DNS değişiklik sorunlarıyla yeni bir gerçek HttpMessageHandler örneği oluşturur.



Doğrudan HttpClient oluşturmak (yanlış kullanım)

HttpClient nesnesini doğrudan örnekleyin ve Dispose yöntemine çağrıyı garanti etmek için kullanma ekleyin; kod şu şekildedir:

Arayüzü 5 kez çağırın, HttpClient kullanarak HTTP isteği gönderin ve ağ bağlantısını aşağıdaki komutla kontrol edin:

HttpClient serbest bırakıldığında, yerel bilgisayar ile hedef sunucu arasındaki bağlantınınTIME_WAITYüksek eşzamanlı durumunda, hata şu şekilde bildirilecektir:

Uzak sunucuya bağlanamıyor
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


Sorularınız için ayrıca şu adreslere başvurabilirsiniz:

HttpClinet'i yanlış kullanmak yazılımınızı bozabilir
https://www.itsvse.com/thread-10310-1-1.html
IHttpClientFactory ile bir HttpClinet oluşturun (doğru kullanım)

DI bağımlılığı enjeksiyonu kullanılarak yapılan IHttpClientFactory, IHttpClientFactory kullanılarak oluşturulan HttpLinet ile aynıdır.

Hizmeti Startup dosyasına ekleyin, kod şu şekildedir:

HomeController kontrolcü kodu şöyledir:

Ayrıca HttpClinet'i çağrı arayüzü üzerinden 5 istek göndermek için kullanıyoruz ve makine sadece hedef sunucuyla bağlantı kurar, bağlantı istek sürecinde tekrar kullanılır. Aşağıda gösterildiği gibi:



IHttpClientFactory, fabrika tarafından oluşturulan HttpMessageHandler örneklerini kaynak tüketimini azaltmak için havuza biriktirir. Yeni bir HttpClient örneği oluşturduğunuzda, ömrü dolmadıysa havuzdaki HttpMessageHandler örneğini tekrar kullanabilirsiniz.

{
    "Lifetime": "Singleton",
    "ServiceType": "System.Net.Http.IHttpClientFactory",
    "ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  },
  {
    "Lifetime": "Singleton",
    "ServiceType": "System.Net.Http.IHttpMessageHandlerFactory",
    "ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  }
IHttpClientFactory varsayılan olarak DefaultHttpClientFactory olarak uygulanır ve kaynak kodu adresi şöyledir:Bağlantı girişi görünür.

DI özellikli bir uygulamada IHttpClientFactory kullanarak aşağıdakileri önleyebilirsiniz:

  • Kaynak tükenmesi sorununu HttpMessageHandler örneğini paylaşarak çözebilirsiniz.
  • DNS durantlığını HttpMessageHandler örnekleri arasında periyodik döngü yaparak çözebilirsiniz.


Ayrıca, yukarıdaki sorunları çözmenin başka yolları da uzun ömürlü SocketsHttpHandler örnekleri kullanılarak mevcuttur.

  • Uygulama başlatıldığında bir SocketsHttpHandler örneği oluşturun ve uygulamanın yaşam döngüsü boyunca kullanın.
  • PooledConnectionLifetime'ı DNS yenileme süresine göre uygun değere ayarlayın.
  • Gerekirse yeni HttpClient(handler, disposeHandler: false) kullanarak bir HttpClient örneği oluşturun.


Yukarıdaki yaklaşım, kaynak yönetimi sorunlarını IHttpClientFactory gibi benzer şekilde çözer.

  • SocketsHttpHandler arasında HttpClient örnekleriPaylaşılan bağlantılar。 Bu paylaşım, soket tükenmesini önler.
  • SocketsHttpHandler, DNS durantlığını önlemek için PooledConnectionLifetime tabanlı bağlantıları döngüye alır.


Daha fazla kullanım ve yapılandırma için lütfen şu adrese bakınız:

Bağlantı girişi görünür.
Bağlantı girişi görünür.





Önceki:HttpClient'ı yanlış kullanmak yazılımınızı bozabilir
Önümüzdeki:jQuery Datatables internationalization eklentisi
 Ev sahibi| Yayınlandı 14.05.2022 19:38:14 |
eleştiri

ASP.NET Core (on dört) SkiaSharp image captcha'sına dayanmaktadır
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) ile Ajax talebi olup olmadığını belirlemek için
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (on iki) ön uç JS, CSS paketleme ve sıkıştırma
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) uç nokta rotası, tüm DI servislerini görüntülemek için middleware ekler
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Core(10)'daki Konfigürasyon önceliklerinin ayrıntılı açıklaması.
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Core'un Middleware ara yazılımının ayrıntılı açıklaması (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Core Middleware'in ayrıntılı açıklaması
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET Core(8)'deki Swagger arayüzünün varsayılan parametrelerinin bir yuvası.
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Framework kaynak kodunun derinlemesine analizi
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI, nesneleri enjekte etme yöntemini manuel olarak elde eder
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (beş) CAP dağıtık işlemlere dayanmaktadır
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) filtresi birleşik ModelState model validasyonu
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) ActivatorUtilities kullanarak dinamik örnekler oluşturun
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Çekirdek (2) Uygulamayı kodla yeniden başlat
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) Redis önbellekleme kullanır
https://www.itsvse.com/thread-9393-1-1.html
 Ev sahibi| Yayınlandı 14.05.2022 19:41:13 |
Yayınlandı 14.05.2022 22:36:06 |
Öğren
Yayınlandı 19.05.2022 09:45:12 |
İşte geliyor, devam filmine bak
Yayınlandı 18.08.2022 16:13:45 |
Harika bir öğrenme ve öğrenme
 Ev sahibi| Yayınlandı 24.06.2023 13:07:32 |
.NET/C# HttpClient kaynak kodu basit analiz
https://www.itsvse.com/thread-10617-1-1.html
 Ev sahibi| Yayınlandı 5.09.2024 14:35:55 |
HttpClientFactoryServiceCollectionExtensions kaynak koduna göz atın

IHttpClientFactory'nin varsayılan uygulaması şudur:DefaultHttpClientFactory, aşağıdaki şekilde gösterildiği gibi:



DefaultHttpClientFactory'deki CreateClient yöntemi, HttpClient nesnesini örneklerdisposeHandler: false, aşağıdaki şekilde gösterildiği gibi:



Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com