架构师_程序员_码农网

K Parolayı al
Kayıt Olun

QQ登录

Başlamak için sadece bir adım

Arama
Görüntüleme:4019|Yanıt: 7
打印 上一主题 下一主题

[Arşiv]ASP.NET Core (XV) HTTP İstekleri Göndermek için HttpClient Kullanımı

[Bağlantıyı kopyala]
D 跳转到指定楼层
sahibi
发表于 2022-5-14 19:37:21|只看该作者回帖奖励|TersGözat|Okuma Modu
ASP.NET kullanarak uygulama oluştururken, HTTP istekleri HttpClient sınıfının örnekleri kullanılarak yapılır. HttpClient'ı kullanmak basit görünebilir. Ancak, uygulama ağır yük altına girene kadar bazı potansiyel sorunlar fark edilmez.

.NET'te sağlanan orijinal HttpClient sınıfıyla ilgili sorunlar: https: //docs.microsoft.com/zh-cn/dotnet/architecture/microservices/implement-resilient-applications/use -httpclientfactory-to-implement-resilient-http-requests

HttpClient IDisposable'ı uyguluyor olsa da, HttpClient nesnesi serbestbırakıldığındaaltta yatan sokethemenserbest bırakılmadığından ve bu da soket tükenmesi sorunlarına yol açabileceğinden, using deyiminde bildirmek ve örneklemek tercih edilen bir eylem değildir.

Sorun aslında HttpClient'ın kendisinde değil, yukarıda bahsedilen "soket tükenmesi" ve DNS değişikliği sorunlarına sahip olan gerçek HttpMessageHandler'ın yeni bir örneğini oluşturduğu için HttpClient'ın varsayılan kurucusundadır.



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

HttpClient nesnesini doğrudan Instantiate edin ve Dispose yönteminin çağrılmasını sağlamak için aşağıdaki kodu kullanarak ekleyin:

Arayüzü 5 kez çağırarak, HTTP isteği göndermek için HttpClient kullanın ve aşağıdaki komutla ağ bağlantısını kontrol edin:

HttpClient serbest bırakıldığında, yerel bilgisayar ile hedef sunucu arasındaki bağlantının TIME_WAIT durumunda olduğunu ve zamanında serbest bırakılmadığını ve yüksek eşzamanlılık durumunda hatanın aşağıdaki gibi raporlanacağını görebilirsiniz:

Uzak sunucuya bağlanılamıyor
System.Net.Sockets.SocketException: Normalde her soket adresinin (protokol/ağ adresi/port) yalnızca bir kez kullanımına izin verilir.


Soru ile ilgili olarak ayrıca bkz:

[Çeviri] HttpClinet'i yanlış kullanmak yazılımınıza zarar verebilir.
h ttps:// www.itsvse.com/thread-10310-1-1.html
IHttpClientFactory ile HttpClinet Oluşturma (doğru kullanım)

DI bağımlılık enjeksiyonu kullanarak IHttpClientFactory ve HttpClinet aynıdır, bu makale HttpClinet oluşturmak için IHttpClientFactory kullanır.

Aşağıdaki kod ile Startup dosyasına servisi ekleyin:

HomeController kontrolcü kodu aşağıdaki gibidir:

Arayüzü çağırarak ve ayrıca 5 istek göndermek için HttpClinet kullanarak, yerel makine yalnızca hedef sunucu ile bir bağlantı kurar ve bağlantı istek sırasında yeniden kullanılır. Aşağıdaki diyagram, istek işlemi sırasında yeniden kullanılan bağlantıyı göstermektedir:



IHttpClientFactory, kaynak tüketimini azaltmak için fabrikada oluşturulan HttpMessageHandler örneklerini bir havuzda toplar. Havuzdaki HttpMessageHandler örnekleri, yeni HttpClient örnekleri oluşturulduğunda (hayatta kalma süresi henüz dolmamışsa) yeniden kullanılabilir.

{
"Ömür Boyu": "Singleton",
"ServiceType": "System.Net.Http.IHttpClientFactory",
"ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
},
{
"Lifetime": "Singleton", "ServiceType": "Microsoft.Extensions.Http.
"ServiceType": "System.Net.Http.IHttpMessageHandlerFactory", {
"ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
}
IHttpClientFactory'nin varsayılan uygulaması DefaultHttpClientFactory'dir, kaynak: https: //github.com/dotnet/runtime/blob/main/src/libraries/Microsoft. Extensions.Http/src/DefaultHttpClientFactory.cs

DI özellikli uygulamalarda IHttpClientFactory kullanılarak bu durum önlenebilir:

  • HttpMessageHandler örneklerini paylaşarak kaynak tükenmesi sorunlarını çözme.
  • HttpMessageHandler örnekleri arasında periyodik olarak geçiş yaparak DNS eskimesini çözme.


Bu sorunları gidermek için uzun ömürlü SocketsHttpHandler örneklerini kullanmanın başka yolları da vardır.

  • uygulama başlangıcında bir SocketsHttpHandler örneği oluşturur ve bunu uygulama yaşam döngüsü boyunca kullanır.
  • PooledConnectionLifetime öğesini DNS yenileme süresine göre uygun değere yapılandırın.
  • Gerektiğinde new HttpClient(handler, disposeHandler: false) kullanarak bir HttpClient örneği oluşturun.


Yukarıdaki yaklaşım, kaynak yönetimi sorununu IHttpClientFactory'nin sorunu çözmesine benzer bir şekilde çözer.

  • SocketsHttpHandler, HttpClient örnekleri arasında bağlantıları paylaşır.
  • Bu paylaşım soket tükenmesini önler. SocketsHttpHandler, DNS eskime sorunlarını önlemek için bağlantıları PooledConnectionLifetime temelinde döngüye sokar.


Daha fazla kullanım ve yapılandırma için bkz:

h ttps:// docs.microsoft.com/zh-cn/aspnet/core/fundamentals/http-requests?view=aspnetcore-6.0
h ttps:// docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=net-6.0





Önceki: [Çeviri] HttpClient'ın yanlış kullanımı yazılımınızı yok eder!
Sonraki: [Pratik] jQuery Datatables uluslararasılaştırma eklentisi
Çiftçi ağı kodu, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
Ne hakkında konuştuğumdan emin değilim, ama ne hakkında konuştuğumdan emin değilim.
sofabed
楼主| 发表于 2022-5-14 19:38:14|只看该作者
İnceleme

SkiaSharp Image CAPTCHA tabanlı ASP.NET Core (XIV)
h ttps:// www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (xiii) Bir isteğin Ajax isteği olup olmadığını belirleme
h ttps:// www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (xii) Ön Uç JS, CSS Paketlemesi ve Sıkıştırma
h ttps:// www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (xi) Uç Nokta Yönlendirme Tüm DI Hizmetlerini Göstermek için Ara Yazılım Ekleme
h ttps:// www.itsvse.com/thread-10269-1-1.html

ASP.NET Core (x) Yapılandırması Ayrıntılı olarak yapılandırma öncelikleri
h ttps:// www.itsvse.com/thread-10265-1-1.html

ASP.NET Core (IX) Ara Yazılım ara yazılım ayrıntıları
h ttps:// www.itsvse.com/thread-9647-1-1.html

ASP.NET Core ara katman yazılımı (Middleware) ayrıntılı olarak açıklandı
h ttps:// www.itsvse.com/thread-8126-1-1.html

ASP.NET Core (8) - Swagger UI Varsayılan Parametre Çukuru
h ttps:// www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (VII) - Çerçeve kaynak koduna derinlemesine bir bakış
h ttps:// www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI Enjekte Edilen Nesneleri Manuel Olarak Alma
h ttps:// www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (V) CAP Tabanlı Dağıtılmış İşlemler
h ttps:// www.itsvse.com/thread-9593-1-1.html

ASP.NET Core (IV) filtresinin birleştirilmiş ModelState model doğrulaması
h ttps:// www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (III) Örnekleri Dinamik Olarak Oluşturmak için ActivatorUtilities Kullanımı
h ttps:// www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (II) Kod Aracılığıyla Kendi Kendini Yeniden Başlatan Uygulamalar
h ttps:// www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (I) Redis Cache Kullanımı
h ttps:// www.itsvse.com/thread-9393-1-1.html
Kod Çiftçi, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
ugg bot satışı
banklar
楼主| 发表于 2022-5-14 19:41:13|只看该作者
Kod çiftçi ağı, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
nike air max 90 pas cher
döşeme
发表于 2022-5-14 22:36:06|只看该作者
Bunu yapabileceğimden emin değilim.
Çiftçi ağı kodu, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
5#
发表于 2022-5-19 09:45:12|只看该作者
İşte geliyor, işte geliyor, devam filmine bakın
Kod çiftçi ağı, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
6#
发表于 2022-8-18 16:13:45|只看该作者
Bunu yapabileceğimden emin değilim.
Kod çiftçi ağı, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
ugg bot satışı
7#
楼主| 发表于 2023-6-24 13:07:32|只看该作者
NET/C# HttpClient Kaynak Kodu Basit Analiz
h ttps:// www.itsvse.com/thread-10617-1-1.html
Kod çiftçi ağı, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
ugg bot satışı
8#
楼主| 发表于 2024-9-5 14:35:55|只看该作者
HttpClientFactoryServiceCollectionExtensions için kaynağı görüntüle

IHttpClientFactory'nin varsayılan uygulaması aşağıda gösterildiği gibi DefaultHttpClientFactory 'dir:



DefaultHttpClientFactory'deki CreateClient yöntemi, aşağıda gösterildiği gibi HttpClient nesnesini örneklerken disposeHandler: false değerini kullanır:



Kod çiftçi ağı, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
Geri gönderi yapabilmeniz için giriş yapmanız gerekmektedir Giriş Yap | Kayıt Ol

İntegral kurallarının bu versiyonu


YASAL UYARI: Code Farmer tarafından yayınlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amacıyla kullanılmak üzere sınırlandırılmıştır; yukarıdaki içerikler ticari veya yasadışı amaçlarla kullanılamaz, aksi takdirde tüm sonuçlar kullanıcıların kendileri tarafından karşılanacaktır. Bu site bilgileri ağdan alınmıştır, telif hakkı anlaşmazlığının bu site ile hiçbir ilgisi yoktur. Yukarıdaki içeriği indirdikten sonraki 24 saat içinde bilgisayarınızdan tamamen kaldırmalısınız. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kaydı satın alın ve daha iyi orijinal hizmet alın. Herhangi bir ihlal varsa, bununla ilgilenmek için lütfen bizimle e-posta yoluyla iletişime geçin.

Posta To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-18 16:44

Hızlı YanıtBaşadön Listeye dön