Bagikan melalui


Hosting di luar proses dengan IIS dan ASP.NET Core

Karena aplikasi ASP.NET Core berjalan dalam proses yang terpisah dari proses pekerja IIS, ASP.NET Core Module menangani manajemen proses. Modul memulai proses untuk aplikasi ASP.NET Core ketika permintaan pertama tiba dan memulai ulang aplikasi jika aplikasi dimatikan atau mengalami crash. Ini pada dasarnya merupakan perilaku yang sama seperti yang terlihat pada aplikasi yang berjalan dalam proses yang dikelola oleh Windows Process Activation Service (WAS).

Diagram berikut mengilustrasikan hubungan antara IIS, ASP.NET Core Module, dan aplikasi yang dihosting di luar proses:

ASP.NET Core Module in the out-of-process hosting scenario

  1. Permintaan datang dari web ke driver HTTP.sys mode kernel.
  2. Driver merutekan permintaan ke IIS di port situs web yang dikonfigurasi. Port yang dikonfigurasi biasanya 80 (HTTP) atau 443 (HTTPS).
  3. Modul meneruskan permintaan ke Kestrel pada port acak untuk aplikasi. Port acak bukan 80 atau 443.

ASP.NET Core Module menentukan port melalui variabel lingkungan saat startup. Ekstensi UseIISIntegration mengonfigurasi server yang akan didengarkan di http://localhost:{PORT}. Pemeriksaan tambahan dilakukan, dan permintaan yang tidak berasal dari modul ditolak. Modul tidak mendukung penerusan HTTPS. Permintaan diteruskan melalui HTTP meski permintaan diterima oleh IIS melalui HTTPS.

Setelah Kestrel mengambil permintaan dari modul, permintaan diteruskan ke alur middleware ASP.NET Core. Alur middleware menangani permintaan dan meneruskannya sebagai instans HttpContext ke logika aplikasi. Middleware yang ditambahkan oleh Integrasi IIS memperbarui skema, IP jarak jauh, dan basis jalur ke akun untuk meneruskan permintaan ke Kestrel. Respons aplikasi diteruskan kembali ke IIS, yang meneruskannya kembali ke klien HTTP yang menginisiasi permintaan.

Untuk panduan konfigurasi ASP.NET Core Module, lihat ASP.NET Core Module (ANCM) untuk IIS.

Untuk informasi lebih lanjut tentang hosting, lihat Menghosting di ASP.NET Core.

Konfigurasi aplikasi

Mengaktifkan komponen IISintegration

Saat membangun host di CreateHostBuilder (Program.cs), panggil CreateDefaultBuilder untuk mengaktifkan integrasi IIS:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        ...

Untuk informasi lebih lanjut tentang CreateDefaultBuilder, lihat Host Generik .NET di ASP.NET Core.

Model hosting di luar proses

Untuk mengonfigurasi opsi IIS, sertakan konfigurasi layanan untuk IISOptions di ConfigureServices. Contoh berikut mencegah aplikasi mengisi HttpContext.Connection.ClientCertificate:

services.Configure<IISOptions>(options => 
{
    options.ForwardClientCertificate = false;
});
Opsi Default Pengaturan
AutomaticAuthentication true Jika true, Middleware Integrasi IIS mengatur HttpContext.User yang diautentikasi oleh Autentikasi Windows. Jika false, middleware hanya memberikan identitas untuk HttpContext.User dan merespons tantangan saat diminta secara eksplisit oleh AuthenticationScheme. Autentikasi Windows harus diaktifkan di IIS agar AutomaticAuthentication berfungsi. Untuk informasi lebih lanjut, lihat topik Autentikasi Windows.
AuthenticationDisplayName null Mengatur nama tampilan yang ditampilkan kepada pengguna di halaman masuk.
ForwardClientCertificate true Jika true dan header permintaan MS-ASPNETCORE-CLIENTCERT ada, HttpContext.Connection.ClientCertificate akan terisi.

Skenario server proksi dan penyeimbang beban

Middleware Integrasi IIS dan ASP.NET Core Module dikonfigurasi untuk meneruskan:

  • Skema (HTTP/HTTPS).
  • Alamat IP jarak jauh tempat permintaan berasal.

Middleware Integrasi IIS mengonfigurasi Middleware Header yang Diteruskan.

Konfigurasi tambahan mungkin diperlukan untuk aplikasi yang dihosting di belakang server proksi tambahan dan penyeimbang beban. Untuk informasi selengkapnya, lihat Mengonfigurasi ASP.NET Core untuk bekerja dengan server proxy dan memuat penyeimbang.

Model hosting di luar proses

Untuk mengonfigurasi aplikasi untuk hosting di luar proses, atur nilai <AspNetCoreHostingModel> properti ke OutOfProcess dalam file proyek (.csproj):

<PropertyGroup>
  <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
</PropertyGroup>

Hosting dalam proses diatur dengan InProcess, yang merupakan nilai default.

Nilai <AspNetCoreHostingModel> tidak peka huruf besar/kecil, jadi inprocess dan outofprocess merupakan nilai yang valid.

Kestrel server digunakan alih-alih Server HTTP IIS (IISHttpServer).

Untuk di luar proses, CreateDefaultBuilder panggilan UseIISIntegration ke:

  • Konfigurasikan port dan jalur dasar yang harus didengarkan server saat berjalan di belakang Modul Inti ASP.NET.
  • Konfigurasikan host untuk menangkap kesalahan startup.

Nama proses

Process.GetCurrentProcess().ProcessNamew3wpiisexpress/laporan (dalam proses) atau dotnet (di luar proses).

Banyak modul asli, seperti Autentikasi Windows, tetap aktif. Untuk mempelajari selengkapnya tentang modul IIS yang aktif dengan modul ASP.NET Core, lihat Modul IIS dengan ASP.NET Core.

Modul ASP.NET Core juga dapat:

  • Atur variabel lingkungan untuk proses pekerja.
  • Log output stdout ke penyimpanan file untuk memecahkan masalah startup.
  • Teruskan token autentikasi Windows.