Development

Sửa Lỗi 500.30 ASP.NET Core: Thiết Lập Phụ Thuộc IIS/SQL

By Ginbok5 min read

Nếu bạn đã gặp phải lỗi 500.30 – ANCM In-Process Start Failure khi khởi động ứng dụng ASP.NET Core của mình, bạn không đơn độc. Vấn đề này có thể gây khó chịu vì ứng dụng không thể khởi động mặc dù mọi thứ dường như đã được cấu hình chính xác.

Trong nhiều trường hợp, nguyên nhân gốc rễ là ứng dụng ASP.NET Core của bạn cố gắng kết nối với SQL Server trước khi dịch vụ cơ sở dữ liệu được khởi tạo hoàn toàn. Bài viết này giải thích lý do tại sao điều này xảy ra và đưa ra một giải pháp đơn giản, đáng tin cậy bằng cách sử dụng các phụ thuộc dịch vụ của Windows để đảm bảo SQL Server khởi động trước IIS.


Lưu ý Quan trọng: Vấn đề này xảy ra khi nào?

Vấn đề này thường chỉ xảy ra khi ứng dụng web ASP.NET Core và SQL Server của bạn được lưu trữ trên cùng một máy chủ.

Nếu ứng dụng của bạn sử dụng:

thì SQL Server thường đã chạy trước khi ứng dụng web khởi động và vấn đề này khó có thể xảy ra.

Kịch bản này phổ biến nhất trong:

Nếu cả IIS và SQL Server đều được cài đặt trên cùng một máy, thứ tự khởi động trở nên quan trọng—và đó là nơi lỗi 500.30 có thể xuất hiện.


Nguyên nhân của Lỗi 500.30

Lỗi 500.30 xảy ra khi IIS khởi động ứng dụng ASP.NET Core của bạn, nhưng SQL Server vẫn chưa được khởi tạo hoàn toàn.

Khi khởi động ứng dụng, ASP.NET Core:

  1. Tải cấu hình

  2. Khởi tạo dịch vụ

  3. Cố gắng mở kết nối cơ sở dữ liệu

Nếu SQL Server chưa sẵn sàng vào thời điểm đó, kết nối sẽ thất bại và ứng dụng bị treo, dẫn đến lỗi 500.30.

Điều thú vị là, nếu bạn thủ công tái chế Application Pool hoặc khởi động lại IIS sau khi SQL Server đã chạy hoàn toàn, ứng dụng thường khởi động thành công. Điều này xác nhận rằng vấn đề liên quan đến thời điểm khởi động dịch vụ chứ không phải mã ứng dụng.

Tuy nhiên, việc dựa vào khởi động lại thủ công không phải là một giải pháp đáng tin cậy hoặc sẵn sàng cho môi trường sản xuất.


Giải pháp: Cấu hình Phụ thuộc Dịch vụ bằng sc config

Để khắc phục vĩnh viễn sự cố này, chúng ta cần đảm bảo rằng IIS chỉ khởi động sau khi SQL Server đã chạy hoàn toàn.

Trong Windows, IIS được kiểm soát bởi Dịch vụ Xuất bản Web Toàn cầu (World Wide Web Publishing Service - w3svc). Theo mặc định, dịch vụ này không phụ thuộc vào SQL Server, điều đó có nghĩa là nó có thể khởi động quá sớm.

Chúng ta có thể khắc phục điều này bằng cách cấu hình w3svc để phụ thuộc vào:

Điều này đảm bảo rằng IIS—và do đó, ứng dụng ASP.NET Core của bạn—sẽ không khởi động cho đến khi SQL Server sẵn sàng.


Các Bước Cấu hình Phụ thuộc Dịch vụ

1. Mở Command Prompt với Quyền Quản trị


2. Cấu hình Phụ thuộc bằng sc config

Chạy lệnh sau:

 
sc config w3svc depend= http/was/mssqlserver

Giải thích:

⚠️ Quan trọng:
Phải có một khoảng trắng sau dấu =. Nếu không có, lệnh sẽ thất bại.


3. Khởi động lại Dịch vụ

Sau khi thiết lập phụ thuộc, hãy khởi động lại các dịch vụ bị ảnh hưởng:

 
net stop w3svc net start w3svc net stop mssqlserver net start mssqlserver

Sau khi khởi động lại, Windows sẽ thực thi thứ tự khởi động chính xác.


Lý do Giải pháp này Hiệu quả

Bằng cách xác định các phụ thuộc dịch vụ:

Kết quả là, ứng dụng của bạn sẽ không còn thất bại trong quá trình khởi động nữa, và lỗi 500.30 được giải quyết vĩnh viễn.


Kết luận

Lỗi 500.30 của ASP.NET Core có thể khó chẩn đoán, đặc biệt là khi nó chỉ xảy ra sau khi máy chủ được khởi động lại. Khi cả IIS và SQL Server được lưu trữ trên cùng một máy, thời điểm khởi động trở nên cực kỳ quan trọng.

Bằng cách cấu hình phụ thuộc dịch vụ bằng lệnh sc config, bạn đảm bảo rằng:

Thay đổi cấu hình đơn giản này cung cấp một giải pháp ổn định và sẵn sàng cho môi trường sản xuất, loại bỏ nhu cầu khởi động lại thủ công hoặc các biện pháp khắc phục tạm thời.

#ASPNETCore#SQLServer#Troubleshooting#ANCM#IIS#DotNet#DevOps
← Back to Articles
Sửa Lỗi 500.30 ASP.NET Core: Thiết Lập Phụ Thuộc IIS/SQL - Ginbok