昨天回答了博問中的一個問題 —— “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 的安裝方面浪費了不少時間。