.net core項目部署到本地IIS之後的各種錯誤

使用visual studio 2019創建了一個webapi項目之後,會默認生成一個帶weatherforecast 的api。項目啓動之後,調用該api可以正常返回,如下:

 

然後,博主嘗試將項目部署到本地iis上。在follow微軟官網教程以及網上的一些博客做完部署之後,卻一直報各種各樣的錯誤:

錯誤1:返回Invalid Host name

百度Google一番也沒能解決這個錯誤,最終在iis裏管理sites的頁面,將binding裏的host name去掉,解決了這個錯誤。host name應該保持爲空。

填寫上hostname錯誤的原因在於,對於windows系統來說,域名和ip地址之間的映射是需要配置的。這個配置就位於:

C:\Windows\System32\drivers\etc 這個路徑下的hosts文件當中,打開這個文件大概長下面這個樣子:

從文件的註釋我們就能理解這個文件的用途了。這個文件就是用來定義域名和ip地址間的映射關係的。

IIS的hostname(主機名)就是域名,很多教程都配置爲 www.xx.com 類似這種。我們訪問一個網站的時候可以通過域名直接訪問,原因是服務器DNS做了域名解釋。域名解釋的步驟是:

  1. 先查找本地C:\Windows\System32\drivers\etc的hosts文件有沒做域名記錄,如果有,返回;
  2. 如果沒有,就到域名網內查找DNS解釋;
  3. 如果還是沒有的話,就繼續到外網是查找DNS記錄。

因此我們本地的host文件就是域名解釋的時候查找的第一站。

例如我們在IIS裏面制定了hostname爲testwebapi對應的端口號爲5005. 但此時我們並沒有定義這個hostname對應的ip地址,因此我們要讓這個域名生效,就要在這個文件當中加入一行配置:

127.0.0.1 testwebapi

此時,我們就可以用http://testwebapi:5005/來訪問這個服務了。

錯誤2: 500 Internal Server Error

解決辦法是,在iis的sites頁面,點擊edit permission. 我們需要給自己的項目添加一個everyone的用戶

但是對於IIS上的站點來說,配置Everyone的用戶意味着任何人都可以訪問這個站點的服務,這顯然是有安全問題的。因此我們可以添加另一個叫做Users的用戶組。Users是windows中預設的一個用戶組,用於防止用戶進行有意或無意的系統範圍的更改,但是可以運行大部分應用程序。這個組的權限是受限的,但要大於Guests組。配上這個用戶組我們就可以正常訪問了。

 

錯誤3:500 Internal Server Error

在解決上述問題之後,仍然報500錯誤的話,就需要檢查一下自己安裝的.net core hosting bundle以及.net core sdk. 例如下面這個就是博主遇到的一個問題:

 

 

以前安裝了.net core版本爲2.2,和安裝的.net hosting bonlde版本不一致。將全部.net core相關的包卸載之後,重新安裝3.1.1的hosting bundle,就不再報500的錯誤了。如下:

另外,若物理路徑上沒有項目時,返回的是404 not found,那麼可以證明iis上的配置是正確的。

若返回的是could not get any reponse:

則證明是端口配置,url有沒有匹配上.

若上述問題都解決了之後還是報錯,這可以看看請求的日誌。默認情況下部署之後的請求是不記錄日誌的。要記錄日誌需要修改web.config文件的配置如下:

<aspNetCore processPath="dotnet"
      arguments=".\MyApp.dll"
      stdoutLogEnabled="true"
      stdoutLogFile=".\logs\stdout"
      hostingModel="inprocess">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
    <environmentVariable name="CONFIG_DIR" value="f:\application_config" />
  </environmentVariables>
</aspNetCore>

要讓自己的web.config在publish過程當中不被覆蓋掉,則需要修改項目文件的配置如下:

<PropertyGroup>
  <IsTransformWebConfigDisabled>true</IsTransformWebConfigDisabled>
</PropertyGroup>

 

還有一個問題是配置了ip監聽地址之後,發現iis上的website全部不能訪問,將ip監聽的刪除掉之後就可以了。使用的命令爲:

netsh http add iplisten ipaddress=172.16.47.xxx
 netsh http show iplisten
netsh http delete iplisten ipaddress=192.168.1.xxx

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章