通常我們在項目開髮結束後向伺服器部署站點後,站點的動態頁面未能按照預期進行訪問,這很有可能是IIS沒有註冊動態頁面相應的“可執行文件”導致。這裡所說的動態頁面例如:訪問MVC視圖、WebAPI、aspx、ashx等,也就是頁面會對應有dll文件的情況。 動態頁面訪問失敗的幾種場景 ashx(一般處理 ...
通常我們在項目開髮結束後向伺服器部署站點後,站點的動態頁面未能按照預期進行訪問,這很有可能是IIS沒有註冊動態頁面相應的“可執行文件”導致。這裡所說的動態頁面例如:訪問MVC視圖、WebAPI、aspx、ashx等,也就是頁面會對應有dll文件的情況。
動態頁面訪問失敗的幾種場景
ashx(一般處理程式):
WebAPI:
問題排查
如果說在我們部署動態頁面後無法訪問,我們可以試著排查IIS。
具體步驟如下:
1.打開IIS管理器選中對應的站點,在窗體主界面找到“處理程式映射”並雙擊打開。
2.在展開的列表中查找是否有包含我們要訪問的文件類型。列表參考如圖:
如果列表沒有包含我們要訪問的文件類型,我們需要為IIS註冊安裝一些東西。
解決辦法(根據操作系統二選一):
1.win10之前的操作系統可在VS安裝目錄,例如:(\VS2013\Common7\Tools\Shortcuts
)里打開“VS2013 開發人員命令提示”,然後在命令行中輸入:aspnet_regiis -i
2.win10系統不支持使用命令行,需要打開控制面板——>程式和功能——>啟動和關閉windows功能,打開視窗後點擊 Internet Information services節點勾選“應用程式開發功能”下的所有子節點,然後點擊確定進行安裝。配置選項如圖:
問題分析
有瞭解決方案後我們可以思考下問題引發的原因。
當請求發到伺服器,IIS會先做一個處理:根據請求的文件類型進行判斷,如果發現瀏覽器請求的是動態文件,IIS會將請求的動態頁面通過一個“可執行文件”解析後轉交給.Net Framework來執行,當.NetFramework執行完後在把執行的結果由IIS在返回給瀏覽器。因為IIS自身是無法處理動態文件的,動態文件中都是程式語言寫的代碼IIS自身不具備解析能力。
上述的解決辦法就是去通過註冊安裝從而使IIS伺服器擁有這些“可執行文件”,然後根據不同的動態頁面類型自動配置處理“可執行文件”映射關係。我們可以在IIS管理器的“處理程式映射”界面查看列表中的一項,其中動態頁面類型都對應了一個“可執行文件”。如圖:
出現問題的情況:可能因為IIS安裝配置選項問題,或者先安裝.NetFramework後安裝IIS等情況,都會導致IIS沒有註冊這些“可執行文件”,從而導致無法解析相應的動態頁面。所以我們在伺服器安裝IIS時要考慮並註意這個細節。
IIS處理動態頁面的簡易交互圖:
感想:不要為瞭解決問題而忽略引發問題的原因,只有當我們深刻分析問題才能觸類旁通,達到知行合一。