Thứ Ba, 22 tháng 11, 2022

[ASP.NET CORE] Các tình huống lỗi cơ bản

Support website .NET Core cơ bản

1. Lỗi không start được process .net : Mã lỗi sẽ là 502 , thường do thiếu quyền. Nếu site build dạng .exe thì cần set pool network service (do policy trên server), nếu site build file .dll thì có thể kiểm tra quyên thư mục c:/program file/dotnet , có quyền read theo user psacln và network services, nếu bị cái này thì sẽ bị toàn server.

Một nguyên nhân khác còn do source nên không start được web app. Có thể kiểm tra web app có start ok không thì check trực tiếp từ server:

- đối vói file .exe thì gọi chạy file exe đó từ CMD.

- đối với file .dll thì chạy CMD, sau chạy lênh : dotnet <đường dẫn file .dll>

Nếu start ok thì sẽ có thông tin như hình dưới , vd : Now listening on : http://localhost:xxxx



2. Các lỗi 500 chung chung, có thể bật error log trên web.config. stdoutLogEnabled="true" stdoutLogFile=".logsstdout" . lưu ý thư mục khai báo tại stdoutLogFile phải tồn tại mới ghi log được. Trường hợp này chỉ ghi log khi mà webapp chạy và IIS handle request được.

Một cách khác để check có thể chạy web app từ local như bước số 1 trên, nếu có lỗi cũng sẽ thể hiện ra màn hình

3. Trường hợp web app test chạy ok từ local server nhưng truy cập bên ngoài vẫn không được. một trong những trường hợp phổ biến là webapp Khách khai báo port cố định. phải bỏ khai báo port cố định đi để IIS lấy port random. 

HTTP Error 500.0 - ANCM In-Process Handler Load Failure :  Đây cũng là lỗi liên quan tới port. cụ thể trong web.config sẽ có khai báo hostingModel="InProcess" , khi này thì trên server sẽ chỉ chạy được 1 site có khai báo như vậy, nếu có site thứ 2 khai báo như vậy thì sẽ lỗi.

Cách khắc phục là yêu cầu KH bỏ khai báo hostingModel="InProcess" đi, hoặc set thành hostingModel="OutOfProcess". Hoặc set pool riêng cho site.


Out-of-process hosting model

For out-of-process hosting with IIS, CreateDefaultBuilder configures Kestrel server as the web server and enables IIS Integration by configuring the base path and port for the ASP.NET Core Module.

The ASP.NET Core Module generates a dynamic port to assign to the backend process.

 

4. Update các lỗi liên quan tới khai báo hostingModel mã nguồn .NET Core và hướng xử lý.  

hostingModel là 1 thông số được khai báo trong web.config thuộc thẻ <aspNetCore  ...>

hostingModel Có 2 thuộc tính như sau

  • inprocess : sẽ chạy dựa vào process w3wp.exe của IIS. đặc thù là mỗi 1 pool chỉ được phép 1 site chạy như vậy.
  • OutOfProcess : sẽ chạy dựa vào process dotnet.exe (hoặc process theo tên khách build), 1 pool có thể chạy nhiều site OutOfProcess. IIS lúc này đóng vai trò như proxy.

- HTTP Error 500.0 - ANCM In-Process Handler Load Failure

nguyên nhân : không start được dotnet core dạng inprocess, liên quan tới quyền của pool

xử lý : chuyển sang pool network services, hoặc chuyển sang OutOfProcess


- HTTP Error 500.30 - ASP.NET Core app failed to start 

Kiểm tra : chạy lệnh (CMD) vẫn hoạt động bình thường

nguyên nhân : có thể do pool đang enable 32bit. Bị với mã nguồn umbraco

xử lý : Set 32bit application fale cho pool 


- HTTP Error 500.34 - ANCM Mixed Hosting Models Not Supported

nguyên nhân : trong 1 pool vừa có site chạy inprocess vừa có site chạy outofprocess 

xử lý : tách site chạy inprocess sang pool riêng, hoặc chuyển hết sang OutOfProcess


-HTTP Error 500.35 - ANCM Multiple In-Process Applications in same Process

nguyên nhân : trong cùng 1 pool mà có 2 web dotnet core đang set inprocess

xử lý : tách site inprocess sang pool riêng, hoặc phải chuyển hết sang OutOfProcess


-HTTP Error 500.36 ANCM Out-Of-Process Handler Load Failure

nguyên nhân : không start được kestrel thường do dll bị lỗi

xử lý : cài lại .net core


-HTTP Error 502.5 Process Failure

nguyên nhân : không start được process dotnet.

xử lý : Kiểm tra quyền thực thi đối với user web cho thư mục c:/Program File/dotnet . Kiểm tra quyền thực thi đối với user web cho file .exe của .net nếu code build dạng file exe


- HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure

nguyên nhân : giống cái trên, do process donet build theo dạng file .exe chứ không phải file .dll nên không chạy được (do policy). VD khai báo trong web.config:  <aspNetCore processPath=".\Gene.exe" ...>

xử lý : Chuyển pool sang network service indentity. Nếu pool riêng và chỉ có 1 site thì có thể chuyển về hostingModel = "inprocess"

***  hostingModel = "inprocess" hay hostingModel = "OutOfProcess" có 1 số ý nghĩa khác nhau trong lập trình. Tuy nhiên phần lớn website không có yêu cầu đặc biệt thì sử dụng cái nào cũng được. Do đó đối với hosting thì hướng xử lý khi gặp các case lỗi trên là kiểm tra set hostingModel = "OutOfProcess" . Một số trường hợp phải sử dụng InProcess thì sẽ set dedicate pool cho site để chạy

 

5. Một cách đơn giản để các bạn kiểm tra khai báo hostingModel trước và sau khi cấu hình.

Nếu website đang chạy. có thể dùng trình duyệt F12 và check header thông số server. Nếu kết quả là Kestrel thì site đang chạy hostingModel là "OutOfProcess", ngược lại server là InProcess. Sau khi config cho KH xong cũng có thể dùng cách này để xác minh lại chạy đúng chưa.



Không có nhận xét nào: