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:
Đăng nhận xét