通常我們在項目開發結束后向服務器部署站點后,站點的動態頁面未能按照預期進行訪問,這很有可能是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處理動態頁面的簡易交互圖:
感想:不要為了解決問題而忽略引發問題的原因,只有當我們深刻分析問題才能觸類旁通,達到知行合一。