یک برنامه Asp.Net Core با یک سرور HTTP، بصورت in-process اجرا
می شود. سرور پیاده سازی شده به درخواست های HTTP گوش داده و آن
را به عنوان مجموعه ای از ویژگی های درخواستی به برنامه می دهد. این ویژگی های
درخواست شده همان HttpContext است.
ASP.NET Core به روش های زیر میزبانی می شود:
- Kestrel به عنوان سرور پیشفرض، که یک
پیاده سازی Cross-Platform از HTTP Server است.
- IIS HTTP Server که یک سرور in-process برای IIS است.
- HTTP.sys Server که یک HTTP Server ویندوزی براساس
HTTP.sys kernel و HTTP Server API می باشد.
مدل های میزبانی (Hosting Models):
1. in-process
شکل زیر نمایش دهنده ارتباط بینIIS (ASP.NET
Core Module) و یک هاست in-process است.
درخواست ها از وب (معمولا از طریق پورت های 80 برای HTTP و یا 443 برای HTTPS) به IIS میرسد. IIS درخواست های
رسیده را به IISHttpServer جهت مدیریت آنها، ارسال می کند. پس از آنکه IISHttpServer درخواست را پردازش کرد، آن به ASP.NET Core Middleware Pipeline ارسال می شود. این Middleware Pipeline درخواست ها را پردازش می کند و آن
را به عنوان یک نمونه از HttpContext به منطق برنامه ارسال می کند. سپس برنامه
از طریق IISHttpServer به IIS پاسخ می دهد و IIS نیز به Client پاسخ می دهد.
2. Out of
Process
شکل زیر نمایش دهنده
دیاگرام ارتباط بین (IIS (ASP.NET Core Module و یک هاست بصورت out-of-process می باشد.
درخواست ها از وب (معمولا از طریق پورت های 80 برای HTTP و یا 443 برای HTTPS) به IIS میرسد. سپس ماژول درخواست ها را از طریق پورتی به غیر از 80 و 443 به Kestrel ارسال می کند. Kestrel درخواست ها را به داخل ASP.NET Core Middleware Pipeline ارسال می کند. بعد از پردازش هر درخواست، آن در
قالب یک نمونه از HttpContext به منطق برنامه ارسال می شود. درخواست مجددا
از برنامه به IIS و از آنجا به Client ارسال می شود.
Kestrel Web Server:
Kestrel وب سرور پیشفرض در پروژه های ASP.NET Core است. مهمترین علت ایجاد Kestrel، دستیابی به هدف اجرای ASP.NET Core برروی سیستم عامل های مختلف است. اکنون وظیفه میزبانی برنامه های تهیه شده توسط تکنولوژی ASP.NET Core در Linux و Mac برعهده Kestrel بوده و دیگر وابستگی ای به IIS وجود ندارد.
Kestrel به صورت زیر
قابل استفاده است:
1. خودش به عنوان وب سرور، مستقیما درخواست ها را پردازش کند.
2. با استفاده از یک reverse proxy server مثل IIS، Apache، Nginx. یک reverse
proxy server درخواست های HTTP را از اینترنت در یافت می کند و آن را به Kestrel ارسال می کند.
چرا به Reverse Proxy Server نیاز داریم؟
در Kestrel عملکرد فدای سرعت شده است و در مقایسه با IIS دارای حداقل نیازها برای میزبانی برنامه های ASP.NET Core می باشد. جدول زیر مقایسه ای بین ویژگی های Kestrel و IIS می باشد.
همانطور که در جدول مشخص است Kestrel بسیاری از ویژگی
های IIS را ندارد. اما مایکروسافت برای بهره مندی از ویژگی های موجود در IIS و
سایر وب سرورها، پیشنهاد می کند که Kestrel به همراه سایر وب سرورها بکار گرفته
شود. یعنی Kestrel به همراه یک Reverse Proxy Server استفاده شود و ابتدا درخواست های HTTP توسط این Reverse proxy server از اینترنت گرفته شده و سپس با انجام
پردازش های مورد نیاز به Kestrel ارسال شود. به این ترتیب می توان محدودیت های
موجود در Kestrel را توسط سایر وب سرورها مدیریت کرد.
منابع:
Web server implementations in ASP.NET Core
ASP.NET Core Web Servers: Kestrel vs IIS Feature Comparison and Why You Need Both
ASP.NET Core Web Server، Kestrel Web Server، Reverse Proxy Server