Apa server web kestrel dan bagaimana hubungannya dengan IIS / IIS Express?
Saya berasal dari pengembangan aplikasi di IIS Express dan hosting di server web IIS. Dengan ASP.NET Core, saya memiliki ketergantungan Microsoft.AspNetCore.Server.Kestrel
dan startup saya telah .UseServer("Microsoft.AspNetCore.Server.Kestrel")
. Tetapi ketika saya menjalankan situs web saya, saya masih mendapatkan ikon IIS Express di baki sistem. Seseorang bertanya kepada saya apakah saya menggunakan IIS Express atau Kestrel dan saya tidak tahu harus berkata apa!
Saya tidak memiliki persyaratan lintas-platform seperti yang saya kembangkan di PC dan host di Azure, jadi saya bingung jika saya bahkan need
Kestrel, tetapi sepertinya tidak ada alternatif - bahkan sampel paling sederhana menggunakan Kestrel.
This document is now out of date. For up-to-date ASP.NET Core documentation go to: http://docs.asp.net
. Ups.Jawaban:
Ini adalah server web penuh sesak nafas. Anda dapat menjalankan aplikasi Core ASP.NET hanya menggunakan Kestrel.
Di aplikasi ASP.NET Anda, mungkin di
wwwroot
direktori, Anda akan melihat web.config yang berisi ini:Ini adalah HttpPlatformHandler. Pada dasarnya, yang dilakukan adalah meneruskan semua permintaan ke Kestrel. IIS Express (dan IIS dalam hal ini) tidak akan menjalankan ASP.NET sendiri lagi. Sebaliknya, mereka akan bertindak sebagai proksi yang hanya mengirimkan permintaan dan tanggapan bolak-balik dari Kestrel. Masih ada keuntungan menggunakan IIS, khususnya memberikan Anda konfigurasi keamanan, caching level kernel, dll.
sumber
Saya ingin menawarkan jawaban alternatif, dengan beberapa riwayat, sehingga Anda mungkin mengerti mengapa Kestrel datang, bahkan jika Anda hanya menggunakan Windows dan IIS.
Pada awal pengembangan ASP.NET sebelum tahun 2000, jelas Microsoft menciptakan dua bagian untuk menjadi tuan rumah aplikasi ASP.NET WebForms,
HttpListener
. Tentu saja, karena hanya untuk pengembangan, banyak fitur yang tidak pernah diterapkan. Ketika Microsoft membuat kode sumber Cassini tersedia untuk umum, ada pihak ketiga yang menggunakan basis kode dan menambahkan lebih banyak fitur, yang memulai keluarga Cassini.aspnet_wp.exe
).Jadi untuk mengembangkan aplikasi web, Anda menggunakan Cassini, dan untuk menyebarkan Anda menggunakan IIS.
Pengenalan kumpulan aplikasi di IIS 6 membutuhkan beberapa perubahan di sisi ASP.NET, sehingga
aspnet_wp.exe
menjadi usang dan digantikan olehaspnet_isapi.dll
. Itu bisa dilihat sebagai dukungan ASP.NET pada revisi IIS 2. Jadi aplikasi ASP.NET dihosting di proses pekerja IISw3wp.exe
.Pengenalan pipa terintegrasi di IIS 7 dan di atas membutuhkan perubahan lebih lanjut, yang diganti
aspnet_isapi.dll
denganwebengine4.dll
. Itu dapat dilihat sebagai dukungan ASP.NET pada revisi IIS 3. Jaringan pipa ASP.NET dan IIS disatukan.Anda dapat melihat ASP.NET telah menjadi jauh lebih kompleks dan terintegrasi dengan IIS, sehingga Cassini mulai menunjukkan usia, dan secara bertahap digantikan oleh IIS Express (mode pengguna lite IIS).
Jadi, dalam banyak kasus, ketika orang menyalahkan bahwa IIS lambat, mereka seharusnya menyalahkan ASP.NET sebenarnya. IIS sendiri tanpa ASP.NET cukup cepat dan stabil, sementara ASP.NET tidak dikembangkan dengan metrik kinerja yang cukup dalam pikiran (karena WebForms memfokuskan cukup banyak produktivitas dan RAD).
Kemudian pada November 2014, ASP.NET 5 (kemudian berganti nama menjadi ASP.NET Core) diumumkan dan menjadi teknologi lintas platform. Jelas Microsoft membutuhkan desain baru untuk mendukung Windows, macOS, dan Linux, di mana semua server web utama, nginx / Apache (atau server web lainnya) harus dipertimbangkan selain IIS.
Saya pikir banyak yang akan setuju bahwa Microsoft belajar cukup banyak dari NodeJS, dan kemudian merancang dan mengembangkan Kestrel (berdasarkan pada
libuv
awalnya tetapi mungkin akan pindah ke teknologi lain segera). Ini adalah server web ringan seperti Cassini pada awalnya, tetapi kemudian lebih banyak fitur yang ditambahkan (seperti komentar lain berkomentar, lebih banyak fitur sehingga dapat diperlakukan sebagai server web penuh). Meskipun sepenuhnya dikelola (beberapa dependensi asli ada), itu bukan lagi server web mainan seperti Cassini.Lalu mengapa kamu tidak bisa menggunakan Kestrel saja? Mengapa IIS Express dan berpotensi IIS, nginx, atau Apache masih diperlukan? Itu terutama adalah hasil dari praktik internet saat ini. Sebagian besar situs web menggunakan proksi terbalik untuk mengambil permintaan dari browser web Anda dan kemudian meneruskan ke server aplikasi di latar belakang.
Jawaban lain sudah menunjukkan tautan ke dokumentasi Microsoft, jadi Anda bisa melihatnya.
Microsoft mengembangkan HttpPlatformHandler pada awalnya untuk membuat IIS proxy terbalik yang cukup baik untuk Java / Python dan seterusnya, jadi direncanakan untuk menggunakannya untuk ASP.NET Core. Masalah mulai muncul selama pengembangan, jadi kemudian Microsoft membuat ASP.NET Core Module khusus untuk ASP.NET Core. Itulah dukungan ASP.NET pada revisi IIS 4.
Mulai dari ASP.NET Core 2.2, Modul Inti ASP.NET untuk IIS (versi 2) dapat meng-host lingkungan .NET Core di dalam proses pekerja IIS (
w3wp.exe
), sangat mirip dengan ASP.NET 2.x / 4.x. Mode ini disebut "hosting dalam proses IIS" . Ini dapat dianggap sebagai dukungan ASP.NET pada revisi IIS 5.Yah, cukup panjang, tapi saya harap saya mengumpulkan semua bagian yang diperlukan dan Anda menikmati membacanya.
sumber
Dari ms docs di: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x
UPDATE: .net core 2.1, Kestrel menggunakan soket yang dikelola sebagai gantinya jika libuv
Dari asp.net core 2.1 docs di: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1#transport-configuration
sumber