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

昨天回答了博問中的一個問題 —— 「HTTP 錯誤 500.19 - Internal Server Error dotnetcore」,今天在這篇隨筆中時候過後諸葛亮地小結一下。服務器

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

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

出現這個錯誤是因爲 IIS 沒法解析 Web.config 中的 xml 配置節點 aspNetCoreide

<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)就能解決。spa

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

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

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

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

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

"HTTP Error 500.19" 的問題搞定!get

如今的錯誤變成了「HTTP 錯誤 500.21」:io

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 的安裝方面浪費了很多時間。

相關文章
相關標籤/搜索