در asp core برای ایجاد درخواست های Http و مدیریت Responseهای وب می توان از HttpClient و IHttpClientFactory استفاده کرد.
Httpclient چیست؟
HttpClient کلاسی است که می تواند برای ایجاد درخواست های HTTP و مدیریت پاسخ های HTTP از منابع وب شناسایی شده توسط Uri در دات نت استفاده کرد. HttpClient در .NET Framework 4.5 (که در سال 2012 منتشر شد) معرفی شد و در NET Core و NET 5+ نیز موجود است. کلاس اصلی و شناخته شده HttpClient را می توان به راحتی استفاده کرد، اما در برخی موارد، بسیاری از توسعه دهندگان از آن به درستی استفاده نمی کنند.
دو روشی که معمولاً از HttpClient استفاده می شود به شرح زیر می باشد:
- ایجاد یک HttpClient جدید برای هر درخواست
- استفاده از یک HttpClient برای همه درخواست ها
مشکل ایجاد یک HttpClient برای هر درخواست، این است که یک سربار نمونه سازی وجود دارد، اگر چه این کلاس IDisposable را پیادهسازی می کند، اما نمونه سازی آن در یک عبارت using ترجیح داده نمی شود، زیرا وقتی شی HttpClient از بین می رود، سوکت بلافاصله آزاد نمیشود و این موضوع می تواند منجر به مشکل socket exhaustion شود و در صورتی که حجم بالایی از درخواست ها را ارسال کرده باشیم، با خطای SocketException مواجه می شویم (این خطا زمانی رخ می دهد که یک HttpClient جدید نمی تواند سوکتی را برای ارسال درخواست دریافت کند).
یک رویکرد بهتر برای استفاده از HttpClient نسبت به رویکرد اول این است که به جای اینکه از یک HttpClient استفاده کنیم، شی HttpClient خود را به صورت Singletone یا static ایجاد کنیم، به این ترتیب یک نمونه singletone از HttpClient برای یک endpoint معین خواهیم داشت. اما حتی با این رویکرد، بهتر است رفتار connection pooling را از طریق PooledConnectionLifetime پیکربندی کنیم(مدت زمانی که یک اتصال میتواند مجددا قابل استفاده در نظر گرفته شود را دریافت و تنظیم می کند).
این رویکرد می تواند راه حل خوبی برای برنامه های کوتاه مدت که چند بار در روز اجرا می شوند باشد.
مشکل استفاده از HttpClient به صورت Singletone یا static این است که در فرآیند های طولانی مدت نمی تواند تغییرات DNS را مدیریت کند. با این حال، مشکل واقعاً به خودی خود مربوط به HttpClient نیست، بلکه مربوط به سازنده پیشفرض HttpClient است، زیرا یک نمونه جدید از HttpMessageHandler ایجاد میکند، که دارای مشکلات socket exhaustion و تغییرات DNS که در بالا ذکر شد می باشد.
دات نت برای حل مشکلات استفاده از HttpClient اینترفیس IHttpClientFactory را معرفی کرد.
IHttpClientFactory چیست؟
IHttpClientFactory در .NET Core 2.1 (همچنین در NET 5+ موجود است) معرفی شد و رویکرد بسیار بهبود یافته ای را برای HTTPClient ارائه می دهد. IHttpClientFactory می تواند به راحتی از میان افزارهای شخص ثالث انعطاف پذیر و گذرا (transient-fault-handling) استفاده کند.
IHttpClientFactory می تواند برای پیکربندی و ایجاد نمونه های HttpClient در یک برنامه از طریق Dependency Injection (DI) استفاده شود. همچنین افزونه هایی را برای میان افزار مبتنی بر Polly فراهم میکند تا از مزیت واگذاری کنترل کننده ها در HttpClient استفاده کند.
IHttpClientFactory هر دو مشکلی ذکر شده در HttpClient را حل می کند و این کار با ادغام HttpClientHandler (که بیشتر کارهای HttpClient را انجام می دهد) و همچنین حذف HttpClientHandler ها پس از یک دوره مشخص انجام می شود. هنگامی که یک HttpClientHandler جدید برای یک endpoint ایجاد می شود، جستجوی DNS انجام می شود، با این کار سوکت ها فرسوده نمی شوند و یک آدرس IP جدید برای هر endpoint دریافت خواهد شد.
مزایای استفاده از IHttpClientFactory در asp core چیست؟
- کلاس HttpClient را به عنوان نوع آماده DI ارائه می دهد
- یک مکان مرکزی برای نامگذاری و پیکربندی نمونه های منطقی HttpClient فراهم می کند
- به خوبی با کتابخانه Polly ادغام می شود
- با مدیریت طول عمر HttpClientHandler از مشکلات رایج DNS جلوگیری می کند
ما در این دوره به آموزش استفاده از HttpClient و IHttpClientFactory در asp core خواهیم پرداخت و مزایا و معایب آن را بررسی خواهیم کرد.
دریافت سورس پروژه آموزش استفاده از HttpClient و IHttpClientFactory در asp core
برای ثبت نظر باید در سایت ثبت نام یا ورود نمایید