Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 9666|Jawab: 7

[Sumber] ASP.NET Core (XV) menggunakan HttpClient untuk mengirim permintaan HTTP

[Salin tautan]
Diposting pada 14/05/2022 19.37.21 | | | |
Saat membangun aplikasi dengan ASP.NET, instance class HttpClient digunakan untuk membuat permintaan HTTP. Menggunakan HttpClient mungkin tampak sederhana. Namun, beberapa masalah potensial tidak diperhatikan sampai aplikasi berada di bawah beban berat.

Masalah yang terkait dengan kelas HttpClient asli yang disediakan dalam .NET:Login hyperlink terlihat.

HttpClient, saat mengimplementasikan IDisposable, mendeklarasikan dan membuat instance dalam pernyataan using bukanlah operasi yang disukai, karenaSaat melepaskan objek HttpClient, soket yang mendasarinya tidakseketikalepaskan, yang dapat menyebabkan masalah kelelahan soket.

Masalahnya sebenarnya bukan HttpClient itu sendiri, tetapi konstruktor default HttpClient, karena membuat instance HttpMessageHandler aktual baru dengan "kelelahan soket" dan masalah perubahan DNS yang disebutkan di atas.



Membuat HttpClient secara langsung (penggunaan yang salah)

Instans objek HttpClient secara langsung, dan tambahkan menggunakan untuk menjamin panggilan ke metode Dispose, kodenya adalah sebagai berikut:

Panggil antarmuka 5 kali, kirim permintaan HTTP menggunakan HttpClient, dan periksa koneksi jaringan dengan perintah berikut:

Anda dapat melihat bahwa ketika HttpClient dirilis, koneksi antara komputer lokal dan server target adalahTIME_WAITDalam kasus konkurensi tinggi, kesalahan akan dilaporkan sebagai berikut:

Tidak dapat terhubung ke server jarak jauh
System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.


Untuk pertanyaan, Anda juga dapat merujuk:

Menggunakan HttpClinet secara tidak benar dapat merusak perangkat lunak Anda
https://www.itsvse.com/thread-10310-1-1.html
Buat HttpClinet dengan IHttpClientFactory (penggunaan yang benar)

Menggunakan injeksi dependensi DI IHttpClientFactory sama dengan HttpLinet, yang dibuat menggunakan IHttpClientFactory.

Tambahkan layanan ke file Startup, kodenya adalah sebagai berikut:

Kode pengontrol HomeController adalah sebagai berikut:

Kami juga menggunakan HttpClinet untuk mengirim 5 permintaan melalui antarmuka panggilan, dan mesin hanya membuat koneksi dengan server target, dan koneksi digunakan kembali selama proses permintaan. Seperti yang ditunjukkan di bawah ini:



IHttpClientFactory mengumpulkan instans HttpMessageHandler yang dibuat pabrik ke dalam kumpulan untuk mengurangi konsumsi sumber daya. Saat Anda membuat instans HttpClient baru, Anda dapat menggunakan kembali instans HttpMessageHandler di kumpulan jika masa pakai belum kedaluwarsa.

{
    "Seumur hidup": "Singleton",
    "ServiceType": "System.Net.Http.IHttpClientFactory",
    "ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  },
  {
    "Seumur hidup": "Singleton",
    "ServiceType": "System.Net.Http.IHttpMessageHandlerFactory",
    "ImplementationType": "Microsoft.Extensions.Http.DefaultHttpClientFactory"
  }
IHttpClientFactory diimplementasikan secara default sebagai DefaultHttpClientFactory, dengan alamat kode sumber:Login hyperlink terlihat.

Dengan menggunakan IHttpClientFactory dalam aplikasi yang mendukung DI, Anda dapat menghindari:

  • Selesaikan masalah kelelahan sumber daya dengan membagikan instans HttpMessageHandler.
  • Selesaikan kedaluwarsa DNS dengan mengulangi instans HttpMessageHandler secara berkala.


Selain itu, ada cara lain untuk memecahkan masalah di atas menggunakan instans SocketsHttpHandler yang tahan lama.

  • Buat instans SocketsHttpHandler saat startup aplikasi dan gunakan di seluruh siklus hidup aplikasi.
  • Konfigurasikan PooledConnectionLifetime ke nilai yang sesuai berdasarkan waktu refresh DNS.
  • Buat instans HttpClient menggunakan HttpClient baru (handler, disposeHandler: false) sesuai kebutuhan.


Pendekatan di atas memecahkan masalah manajemen sumber daya dengan cara yang mirip dengan IHttpClientFactory.

  • SocketsHttpHandler antara instans HttpClientKoneksi bersama。 Berbagi ini mencegah kelelahan soket.
  • SocketsHttpHandler mengulang koneksi berdasarkan PooledConnectionLifetime untuk menghindari kedaluwarsa DNS.


Untuk penggunaan dan konfigurasi lebih lanjut, silakan lihat:

Login hyperlink terlihat.
Login hyperlink terlihat.





Mantan:Menggunakan HttpClient secara tidak benar dapat merusak perangkat lunak Anda
Depan:plugin internasionalisasi jQuery Datatables
 Tuan tanah| Diposting pada 14/05/2022 19.38.14 |
resensi

ASP.NET Core (empat belas) didasarkan pada captcha gambar SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) untuk menentukan apakah itu permintaan Ajax atau tidak
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Inti (dua belas) front-end JS, bundling CSS, dan kompresi
https://www.itsvse.com/thread-10282-1-1.html

Rute titik akhir ASP.NET Core (XI) menambahkan middleware untuk menampilkan semua layanan DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Penjelasan terperinci tentang prioritas Konfigurasi di Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Penjelasan terperinci tentang middleware Middleware dari Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Penjelasan rinci tentang Core Middleware
https://www.itsvse.com/thread-8126-1-1.html

ASP.NET lubang parameter default UI Swagger di Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Inti (7) Analisis mendalam dari kode sumber kerangka kerja
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI secara manual memperoleh metode penyuntikan objek
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (lima) didasarkan pada transaksi distribusi CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) memfilter validasi model ModelState terpadu
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Inti (iii) Membuat instans secara dinamis menggunakan ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Inti (2) Mulai ulang aplikasi dengan kode
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) menggunakan caching Redis
https://www.itsvse.com/thread-9393-1-1.html
 Tuan tanah| Diposting pada 14/05/2022 19.41.13 |
Diposting pada 14/05/2022 22.36.06 |
Belajar
Diposting pada 19/05/2022 09.45.12 |
Ini dia, lihat sekuelnya
Diposting pada 18/08/2022 16.13.45 |
Pembelajaran dan pembelajaran yang luar biasa
 Tuan tanah| Diposting pada 24/06/2023 13.07.32 |
.NET/C# HttpClient kode sumber analisis sederhana
https://www.itsvse.com/thread-10617-1-1.html
 Tuan tanah| Diposting pada 05/09/2024 14.35.55 |
Lihat kode sumber HttpClientFactoryServiceCollectionExtensions

Implementasi default IHttpClientFactory adalahDefaultHttpClientFactory, seperti yang ditunjukkan pada gambar di bawah ini:



Metode CreateClient di DefaultHttpClientFactory membuat instance objek HttpClientdisposeHandler: false, seperti yang ditunjukkan pada gambar di bawah ini:



Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com