關於 IIS 上運行 ASP.NET Core 站點的“HTTP 錯誤 500.19”錯誤


昨天回答了博問中的一個問題 —— “HTTP 錯誤 500.19 - Internal Server Error dotnetcore”,今天在這篇隨筆中時候事后諸葛亮地小結一下。

服務器是 Windows Server 2008 R2 ,ASP.NET Core 版本是 2.1 ,錯誤信息如下:

HTTP 錯誤 500.19 - Internal Server Error
無法訪問請求的頁面,因為該頁的相關配置數據無效。

出現這個錯誤是由於 IIS 無法解析 Web.config 中的 xml 配置節點 aspNetCore

<aspNetCore processPath="dotnet" arguments=".\Cnblogs.WebApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />

出現這個問題通常是由於沒有安裝 ASP.NET Core Module ,只要下載安裝 Hosting Bundle (比如 Microsoft .NET Core 2.1.6 - Windows Server Hosting)就能解決。

博問中的這個問題奇怪之處是已經安裝了 Hosting Bundle ,%windir%\System32\inetsrv 文件中也有 aspnetcore.dll 這個文件,可能是安裝過程中出了什么差錯,沒有成功配置 IIS 。而且卸載並重新安裝 Hosting Bundle 也不能解決問題,可能是安裝程序認為 IIS 已經配置好,安裝時沒有重新配置 IIS 。 

只能目測檢查並手動修復 IIS 的相關配置文件。

對於 HTTP Error 500.19 ,先檢查 %windir%\System32\inetsrv\config\schema 文件夾中有沒有 aspnetcore_schema.xml 文件,有。

再檢查 %windir%\System32\inetsrv\config\applicationHost.config 中有沒有 aspNetCore section ,沒有,加上:

<section name="aspNetCore" overrideModeDefault="Allow" />

"HTTP Error 500.19" 的問題搞定!

現在的錯誤變成了“HTTP 錯誤 500.21”:

HTTP 錯誤 500.21 - Internal Server Error
處理程序“aspNetCore”在其模塊列表中有一個錯誤模塊“AspNetCoreModule"

這是由於 Web.config 中配置了 AspNetCoreModule ,但無法加載

<handlers>
  <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>

也需要手工修改 IIS 的配置文件來解決。

在 %windir%\System32\inetsrv\config\applicationHost.config 中添加2個配置

1)在 globalModules 中添加

<add name="AspNetCoreModule" image="%SystemRoot%\system32\inetsrv\aspnetcore.dll" />

2)在 modules 在添加

<add name="AspNetCoreModule" />

如果添加上面2個配置后還沒解決,在 IIS 站點的“模塊”中,點擊“配置本機模塊”,然后選中 AspNetCoreModule 。

就這樣搞定了這個問題!

小結寫起來容易沉着冷靜,但排查問題時容易急於求成,昨天在折騰 ASP.NET Core 與 Hosting Bundle 的安裝方面浪費了不少時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM