Nguon: Microsoft Learn · .NET 8.0

ASP.NET Core Module (ANCM) cho IIS

Nguồn: ASP.NET Core Module (ANCM) for IIS

ASP.NET Core Module (ANCM) là một native IIS module được tích hợp vào IIS pipeline, cho phép các ứng dụng ASP.NET Core hoạt động với IIS. Chạy các ứng dụng ASP.NET Core với IIS bằng cách:

Có sự đánh đổi giữa mỗi mô hình hosting. Theo mặc định, mô hình hosting in-process được sử dụng do hiệu suất và chẩn đoán tốt hơn.

Cài đặt ASP.NET Core Module (ANCM)

ASP.NET Core Module (ANCM) được cài đặt cùng với .NET Core Runtime từ .NET Core Hosting Bundle. ASP.NET Core Module tương thích tiến và lùi với các phiên bản .NET được hỗ trợ.

Tải xuống installer bằng liên kết sau:

Installer .NET Core Hosting Bundle hiện tại (tải trực tiếp)

Cấu hình với web.config

ASP.NET Core Module được cấu hình với section aspNetCore của node system.webServer trong file web.config của site.

File web.config sau được publish cho framework-dependent deployment và cấu hình ASP.NET Core Module để xử lý các request của site:

xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet"
                  arguments=".\MyApp.dll"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

File web.config sau được publish cho self-contained deployment:

xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\MyApp.exe"
                  stdoutLogEnabled="false"
                  stdoutLogFile=".\logs\stdout"
                  hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

Thuộc tính của phần tử aspNetCore

Thuộc tínhMô tảMặc định
argumentsThuộc tính string tùy chọn. Các đối số cho executable được chỉ định trong processPath.
disableStartUpErrorPageThuộc tính Boolean tùy chọn. Nếu true, trang 502.5 - Process Failure bị ẩn đi.false
forwardWindowsAuthTokenThuộc tính Boolean tùy chọn. Nếu true, token được chuyển tiếp đến child process.true
hostingModelThuộc tính string tùy chọn. Chỉ định mô hình hosting là in-process (InProcess/inprocess) hoặc out-of-process (OutOfProcess/outofprocess).InProcess/inprocess
processesPerApplicationThuộc tính integer tùy chọn. Chỉ định số instance của process được chỉ định trong processPath có thể được khởi tạo cho mỗi ứng dụng. Không khuyến khích đặt processesPerApplication.Mặc định: 1, Min: 1, Max: 100
processPathThuộc tính string bắt buộc. Đường dẫn đến executable khởi chạy process lắng nghe các HTTP request.
rapidFailsPerMinuteThuộc tính integer tùy chọn. Chỉ định số lần process được chỉ định trong processPath được phép crash mỗi phút.Mặc định: 10, Min: 0, Max: 100
requestTimeoutThuộc tính timespan tùy chọn. Chỉ định thời gian ASP.NET Core Module chờ phản hồi từ process lắng nghe trên %ASPNETCORE_PORT%. Không áp dụng cho in-process hosting.Mặc định: 00:02:00, Min: 00:00:00, Max: 360:00:00
shutdownTimeLimitThuộc tính integer tùy chọn. Thời gian tính bằng giây module chờ executable tắt gracefully khi phát hiện file app_offline.htm.Mặc định: 10, Min: 0, Max: 600
startupTimeLimitThuộc tính integer tùy chọn. Thời gian tính bằng giây module chờ executable khởi động process lắng nghe trên port.Mặc định: 120, Min: 0, Max: 3600
stdoutLogEnabledThuộc tính Boolean tùy chọn. Nếu true, stdoutstderr cho process được chỉ định trong processPath được chuyển hướng đến file được chỉ định trong stdoutLogFile.false
stdoutLogFileThuộc tính string tùy chọn. Chỉ định đường dẫn file tương đối hoặc tuyệt đối để stdoutstderr từ process được chỉ định trong processPath được ghi lại.aspnetcore-stdout

Đặt biến môi trường

Biến môi trường có thể được chỉ định cho process trong thuộc tính processPath. Chỉ định biến môi trường với phần tử con <environmentVariable> của phần tử collection <environmentVariables>. Biến môi trường được đặt trong section này có độ ưu tiên cao hơn biến môi trường hệ thống.

Ví dụ sau đặt hai biến môi trường trong web.config. ASPNETCORE_ENVIRONMENT cấu hình môi trường ứng dụng thành Development. Một developer có thể đặt tạm thời giá trị này trong file web.config để buộc Developer Exception Page tải khi debug exception của ứng dụng.

xml
<aspNetCore processPath="dotnet"
      arguments=".\MyApp.dll"
      stdoutLogEnabled="false"
      stdoutLogFile=".\logs\stdout"
      hostingModel="inprocess">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    <environmentVariable name="CONFIG_DIR" value="f:\application_config" />
  </environmentVariables>
</aspNetCore>

Cảnh báo: Chỉ đặt biến môi trường ASPNETCORE_ENVIRONMENT thành Development trên staging và testing server không thể truy cập từ mạng không đáng tin cậy, chẳng hạn như Internet.

app_offline.htm

Nếu phát hiện file có tên app_offline.htm trong thư mục root của ứng dụng, ASP.NET Core Module sẽ cố gắng tắt gracefully ứng dụng và ngừng xử lý các request đến. Nếu ứng dụng vẫn đang chạy sau số giây được định nghĩa trong shutdownTimeLimit, ASP.NET Core Module sẽ kill running process.

Trong khi file app_offline.htm hiện diện, ASP.NET Core Module phản hồi các request bằng cách gửi lại nội dung của file app_offline.htm. Khi file app_offline.htm được xóa, request tiếp theo sẽ khởi động ứng dụng.

Trang lỗi khởi động

Cả in-process và out-of-process hosting đều tạo các trang lỗi tùy chỉnh khi chúng không thể khởi động ứng dụng.

Tạo và chuyển hướng log

ASP.NET Core Module chuyển hướng stdout và stderr console output đến đĩa nếu các thuộc tính stdoutLogEnabledstdoutLogFile của phần tử aspNetCore được đặt.

Chỉ khuyến khích sử dụng stdout log để khắc phục sự cố khởi động ứng dụng khi hosting trên IIS hoặc khi sử dụng development-time support cho IIS với Visual Studio.

Không sử dụng stdout log cho mục đích logging ứng dụng chung. Để logging định kỳ trong ứng dụng ASP.NET Core, hãy sử dụng thư viện logging giới hạn kích thước file log và xoay vòng log.

Enhanced diagnostic logs (Log chẩn đoán nâng cao)

ASP.NET Core Module có thể cấu hình để cung cấp enhanced diagnostic logs (log chẩn đoán nâng cao). Thêm phần tử <handlerSettings> vào phần tử <aspNetCore> trong web.config. Đặt debugLevel thành TRACE để hiển thị thông tin chẩn đoán với độ chính xác cao hơn:

xml
<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="false"
    stdoutLogFile="\\?\%home%\LogFiles\stdout"
    hostingModel="inprocess">
  <handlerSettings>
    <handlerSetting name="debugFile" value=".\logs\aspnetcore-debug.log" />
    <handlerSetting name="debugLevel" value="FILE,TRACE" />
  </handlerSettings>
</aspNetCore>

Cảnh báo: Không để debug logging được bật trong deployment lâu hơn mức cần thiết để khắc phục sự cố. Kích thước log không bị giới hạn. Để debug log được bật có thể làm cạn kiệt dung lượng đĩa và làm crash server hoặc app service.

Sửa đổi stack size

Chỉ áp dụng khi sử dụng mô hình hosting in-process.

Cấu hình managed stack size bằng cài đặt stackSize tính bằng byte trong web.config. Kích thước mặc định là 1,048,576 byte (1 MB):

xml
<aspNetCore processPath="dotnet"
    arguments=".\MyApp.dll"
    stdoutLogEnabled="false"
    stdoutLogFile="\\?\%home%\LogFiles\stdout"
    hostingModel="inprocess">
  <handlerSettings>
    <handlerSetting name="stackSize" value="2097152" />
  </handlerSettings>
</aspNetCore>

Cấu hình proxy sử dụng giao thức HTTP và pairing token

Chỉ áp dụng cho out-of-process hosting.

Proxy được tạo giữa ASP.NET Core Module và Kestrel sử dụng giao thức HTTP. Không có rủi ro nghe lén lưu lượng giữa module và Kestrel từ vị trí bên ngoài server.

Một pairing token (mã ghép cặp) được sử dụng để đảm bảo rằng IIS đã proxy các request nhận được bởi Kestrel và không đến từ nguồn khác.

ASP.NET Core Module với IIS Shared Configuration

Installer ASP.NET Core Module chạy với đặc quyền của tài khoản TrustedInstaller. Vì tài khoản hệ thống local không có quyền sửa đổi cho share path được sử dụng bởi IIS Shared Configuration, installer ném lỗi access denied khi cố gắng cấu hình module settings trong file applicationHost.config trên share.

Khi sử dụng IIS Shared Configuration trên cùng máy với cài đặt IIS, chạy ASP.NET Core Hosting Bundle installer với tham số OPT_NO_SHARED_CONFIG_CHECK được đặt thành 1:

console
dotnet-hosting-{VERSION}.exe OPT_NO_SHARED_CONFIG_CHECK=1

Vị trí file module, schema và cấu hình

Module

IIS (x86/amd64):

IIS Express (x86/amd64):

Schema

IIS

IIS Express

Cấu hình

IIS

IIS Express