Nguon: Microsoft Learn · .NET 8.0

Xử lý sự cố ASP.NET Core trên Azure App Service và IIS

Nguồn: Troubleshoot ASP.NET Core on Azure App Service and IIS

Đây là hướng dẫn xử lý sự cố toàn diện để chẩn đoán và giải quyết các vấn đề khi triển khai ứng dụng ASP.NET Core lên Azure App Service hoặc IIS (Internet Information Services - Dịch vụ thông tin Internet).

Tổng quan

Hướng dẫn này bao gồm:


Lỗi khởi động ứng dụng

403.14 Forbidden (Bị cấm)

Lỗi: "The Web server is configured to not list the contents of this directory." (Máy chủ Web được cấu hình để không liệt kê nội dung của thư mục này.)

Nguyên nhân:

Giải pháp:

  1. Xóa tất cả tệp/thư mục khỏi thư mục triển khai
  2. Triển khai lại nội dung từ thư mục publish của ứng dụng
  3. Xác minh web.config có mặt và đúng
  4. Azure App Service: xác nhận triển khai đến D:\home\site\wwwroot
  5. IIS: xác nhận triển khai đến đường dẫn vật lý IIS được hiển thị trong IIS Manager
  6. So sánh các tệp đã triển khai với nội dung thư mục publish

500 Internal Server Error (Lỗi máy chủ nội bộ)

Lỗi: Ứng dụng khởi động nhưng không thể xử lý yêu cầu

Nguyên nhân:

Giải pháp:

500.0 In-Process Handler Load Failure (Lỗi tải handler trong tiến trình)

Lỗi: Worker process (tiến trình làm việc) thất bại; ứng dụng không khởi động

Giải pháp:

500.30 In-Process Startup Failure (Lỗi khởi động trong tiến trình)

Nguyên nhân: ASP.NET Core Module (mô-đun ASP.NET Core) không khởi động được .NET CLR trong tiến trình

Điều kiện lỗi phổ biến:

Giải pháp:

500.31 ANCM Failed to Find Native Dependencies (Không tìm thấy phụ thuộc gốc)

Lỗi: Không tìm thấy runtime Microsoft.NETCore.App hoặc Microsoft.AspNetCore.App

Ví dụ lỗi:

code
The specified framework 'Microsoft.NETCore.App', version '3.0.0' was not found.
  - The following frameworks were found:
      2.2.1 at [C:\Program Files\dotnet\x64\shared\Microsoft.NETCore.App]
      3.0.0-preview5-27626-15 at [...]

Giải pháp:

500.32 ANCM Failed to Load dll (Không tải được dll)

Nguyên nhân: Ứng dụng được xuất bản cho kiến trúc processor (bộ xử lý) không tương thích (không khớp 32-bit và 64-bit)

Giải pháp:

500.33 ANCM Request Handler Load Failure (Lỗi tải request handler)

Nguyên nhân: Ứng dụng không tham chiếu đến framework Microsoft.AspNetCore.App

Giải pháp:

500.34 ANCM Mixed Hosting Models Not Supported (Mô hình lưu trữ hỗn hợp không được hỗ trợ)

Nguyên nhân: Worker process không thể chạy cả ứng dụng in-process và out-of-process

Giải pháp:

500.35 ANCM Multiple In-Process Applications in same Process (Nhiều ứng dụng trong tiến trình)

Nguyên nhân: Worker process không thể chạy nhiều ứng dụng in-process

Giải pháp:

500.36 ANCM Out-Of-Process Handler Load Failure (Lỗi tải handler ngoài tiến trình)

Nguyên nhân: aspnetcorev2_outofprocess.dll bị hỏng hoặc thiếu

Giải pháp:

500.37 ANCM Failed to Start Within Startup Time Limit (Vượt quá thời gian khởi động)

Nguyên nhân: ANCM vượt quá thời gian khởi động mặc định 120 giây

Giải pháp:

500.38 ANCM Application DLL Not Found (Không tìm thấy DLL ứng dụng)

Nguyên nhân: ANCM không thể định vị DLL ứng dụng (vấn đề tệp thực thi đơn)

Giải pháp:

502.5 Process Failure (Lỗi tiến trình)

Nguyên nhân: ASP.NET Core Module không khởi động được worker process

Điều kiện phổ biến: Ứng dụng nhắm mục tiêu phiên bản shared framework ASP.NET Core bị thiếu

Giải pháp:

Lỗi khởi động ứng dụng (ErrorCode '0x800700c1')

Nguyên nhân: Không khớp bitness giữa ứng dụng đã xuất bản và tiến trình w3wp/iisexpress

Giải pháp:

  1. Chọn app pool trong IIS Manager
  2. Chọn Advanced Settings (Cài đặt nâng cao)
  3. Đặt Enable 32-Bit Applications (Bật ứng dụng 32-Bit):
  4. True cho ứng dụng 32-bit (x86)
  5. False cho ứng dụng 64-bit (x64)
  6. Xác minh không có xung đột với thuộc tính MSBuild <Platform>

Lỗi khởi động ứng dụng (ErrorCode '0x800701b1')

Nguyên nhân: Windows Service không tải được

Ví dụ sửa lỗi: Bật null Windows Service:

cmd
sc.exe start null

Connection reset (Đặt lại kết nối)

Nguyên nhân: Lỗi xảy ra sau khi gửi headers (quá muộn để trả về lỗi 500)

Tình huống phổ biến: Lỗi trong quá trình serialization (tuần tự hóa) các đối tượng phản hồi phức tạp

Giải pháp:

Giới hạn khởi động mặc định

Mặc định: ASP.NET Core Module có startupTimeLimit là 120 giây

Vấn đề: Ứng dụng có thể mất 2 phút để khởi động trước khi ghi nhật ký lỗi

Giải pháp:


Xử lý sự cố trên Azure App Service

Lưu ý quan trọng: Phiên bản Preview của ASP.NET Core

Các phiên bản preview của ASP.NET Core không được triển khai lên Azure App Service theo mặc định. Để triển khai phiên bản preview, xem Triển khai phiên bản preview ASP.NET Core lên Azure App Service.

Log Stream của Azure App Services

Các bước:

  1. Mở ứng dụng trong App Services
  2. Điều hướng đến Monitoring > App Service Logs
  3. Chọn File System cho Web Server Logging
  4. Tùy chọn bật Application logging
  5. Điều hướng đến Monitoring > Log stream
  6. Chọn Application logs hoặc Web Server Logs

Lưu ý: Streaming logs có độ trễ và có thể không hiển thị ngay lập tức

Application Event Log (Nhật ký sự kiện ứng dụng) trên Azure App Service

Sử dụng blade Diagnose and solve problems:

  1. Mở ứng dụng trong App Services
  2. Chọn Diagnose and solve problems (Chẩn đoán và giải quyết vấn đề)
  3. Chọn tiêu đề Diagnostic Tools (Công cụ chẩn đoán)
  4. Dưới Support Tools, chọn nút Application Events
  5. Kiểm tra lỗi mới nhất từ IIS AspNetCoreModule hoặc IIS AspNetCoreModule V2

Sử dụng Kudu (phương pháp thay thế):

  1. Mở Advanced Tools trong khu vực Development Tools, chọn Go→
  2. Mở Debug console và chọn CMD
  3. Mở thư mục LogFiles
  4. Chọn biểu tượng bút chì bên cạnh eventlog.xml
  5. Kiểm tra log (cuộn xuống dưới để xem sự kiện gần đây)

Chạy ứng dụng trong Kudu console

Nhiều lỗi khởi động không tạo ra thông tin hữu ích trong Application Event Log.

Các bước:

  1. Mở Advanced Tools trong Development Tools, chọn Go→
  2. Mở Debug console và chọn CMD

Test ứng dụng 32-bit (x86) - Phiên bản hiện tại

bash
cd d:\home\site\wwwroot

Framework-dependent deployment:

dotnetcli
dotnet .\{TÊN ASSEMBLY}.dll

Self-contained deployment:

console
{TÊN ASSEMBLY}.exe

Test ứng dụng 64-bit (x64) - Phiên bản hiện tại

Framework-dependent deployment:

bash
cd D:\Program Files\dotnet
dotnet \home\site\wwwroot\{TÊN ASSEMBLY}.dll

Self-contained deployment:

bash
cd D:\home\site\wwwroot
{TÊN ASSEMBLY}.exe

Log stdout của ASP.NET Core Module trên Azure App Service

Cảnh báo: Tắt log stdout khi hoàn thành để ngăn lỗi ứng dụng/máy chủ. Không có giới hạn kích thước log. Chỉ sử dụng để xử lý sự cố khởi động.

Các bước:

  1. Trong Azure portal, điều hướng đến web app
  2. Nhập "kudu" vào hộp tìm kiếm
  3. Chọn Advanced Tools > Go
  4. Chọn Debug console > CMD
  5. Điều hướng đến site/wwwroot
  6. Chỉnh sửa tệp web.config
  7. Trong phần tử <aspNetCore />, đặt stdoutLogEnabled="true"
  8. Chọn Save

Tắt khi hoàn thành:

xml
<aspNetCore>
  stdoutLogEnabled="false"
</aspNetCore>

Log debug của ASP.NET Core Module trên Azure App Service

Hai phương pháp để bật:

Phương pháp 1: Cấu hình trước khi triển khai

Phương pháp 2: Chỉnh sửa ứng dụng trực tiếp qua Kudu

  1. Mở Advanced Tools > Go
  2. Mở Debug console > CMD
  3. Điều hướng đến site > wwwroot
  4. Chỉnh sửa web.config
  5. Thêm phần <handlerSettings> theo Enhanced diagnostic logs
  6. Chọn Save

Cảnh báo: Tắt khi hoàn thành để ngăn lỗi. Không có giới hạn kích thước log.


Xử lý sự cố trên IIS

Application Event Log (IIS)

Các bước:

  1. Mở menu Start, tìm kiếm Event Viewer (Trình xem sự kiện)
  2. Mở nút Windows Logs
  3. Chọn Application
  4. Tìm kiếm lỗi với IIS AspNetCore Module hoặc IIS Express AspNetCore Module trong cột Source (Nguồn)

Chạy ứng dụng tại command prompt

Framework-dependent deployment:

bash
dotnet .\<tên_assembly>.dll

Self-contained deployment:

bash
<tên_assembly>.exe

Kiểm tra đầu ra console để phát hiện lỗi. Test endpoint Kestrel tại http://localhost:5000/

Log stdout của ASP.NET Core Module (IIS)

Cảnh báo: Tắt khi hoàn thành. Không có giới hạn kích thước log. Không tắt có thể gây lỗi ứng dụng/máy chủ.

Các bước:

  1. Điều hướng đến thư mục triển khai
  2. Tạo thư mục logs nếu chưa có
  3. Chỉnh sửa web.config:

``xml <aspNetCore> stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" </aspNetCore> ``

Tắt:

  1. Chỉnh sửa web.config
  2. Đặt stdoutLogEnabled="false"
  3. Lưu

Log debug của ASP.NET Core Module (IIS)

Thêm cài đặt handler vào web.config:

xml
<aspNetCore ...>
  <handlerSettings>
    <handlerSetting name="debugLevel" value="file" />
    <handlerSetting name="debugFile" value="c:\temp\ancm.log" />
  </handlerSettings>
</aspNetCore>

Yêu cầu:

Bật Developer Exception Page (Trang ngoại lệ nhà phát triển)

Đặt ASPNETCORE_ENVIRONMENT trong web.config:

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

Quan trọng: Chỉ dùng cho máy chủ staging/testing KHÔNG được tiếp xúc với Internet. Xóa sau khi xử lý sự cố.

Ứng dụng chậm hoặc không phản hồi (IIS)

Crash dump - Ảnh chụp bộ nhớ hệ thống để chẩn đoán crashes, lỗi khởi động hoặc ứng dụng chậm

Ứng dụng bị crash hoặc gặp ngoại lệ

Sử dụng Windows Error Reporting (WER):

  1. Tạo thư mục c:\dumps (app pool cần quyền ghi)
  2. Chạy script PowerShell EnableDumps

In-process hosting: ``powershell .\EnableDumps w3wp.exe c:\dumps ``

Out-of-process hosting: ``powershell .\EnableDumps dotnet.exe c:\dumps ``

  1. Chạy ứng dụng trong điều kiện gây crash
  2. Chạy script PowerShell DisableDumps

In-process: ``powershell .\DisableDumps w3wp.exe ``

Out-of-process: ``powershell .\DisableDumps dotnet.exe ``

Script thu thập tối đa 5 dump mỗi ứng dụng.

Cảnh báo: Crash dump có thể rất lớn (lên đến vài GB mỗi tệp)


Xóa bộ nhớ đệm gói

Ứng dụng có thể thất bại ngay sau khi nâng cấp SDK hoặc thay đổi phiên bản gói do các gói không nhất quán.

Các bước giải quyết:

  1. Xóa thư mục binobj
  2. Xóa bộ nhớ đệm gói:

``bash dotnet nuget locals all --clear ``

HOẶC với nuget.exe: ``bash nuget locals all -clear ``

  1. Khôi phục và xây dựng lại dự án
  2. Xóa tất cả tệp trong thư mục triển khai máy chủ trước khi triển khai lại

Tài nguyên bổ sung