需求前言:最近會經常修改一些網站前端的內容,為了方便跟UI和產品交流,需要將自己修改過的頁面及時發布到測試機或者是本地的IIS上。而為了熟悉IIS的一些應用,所以先將項目發布在了本地IIS上,這其中遇到了一些問題,現在解決之後,就記錄下來,留待後用。
流程圖:
這裡如何啟用並配置IIS就不多說了,主要想記錄下來的是在試運行過程中所遇到的一些問題。
配置IIS的幾個關鍵點:
1.URL重寫模組,這個以前是ISAPI篩選器的功能,後來好像就改版了,都成模組化設計了。(URL rewrite 下載連結)
2.ASP.NET MVC項目有路由機制,所以不需要用到IIS中預設文件功能以及瀏覽目錄功能。
3.記得檢查應用程式集區的 .NET Framework版本,配置成v4.0版本。
4.身分識別驗證上一般不用管,IIS預設使用的是“匿名驗證”。
三大問題
1.試運行時無法正常訪問網站,報錯如下:
錯誤摘要
HTTP 錯誤 403.14 - Forbidden
Web 服務器被配置為不列出此目錄的內容。
主要原因本地項目的web.config 檔案出錯,缺少一行代碼,補上就好,代碼如下:
<system.webServer> <modules runAllManagedModulesForAllRequests="true" /> </system.webServer>
附上參考連結:點我
2.上面這個問題解決後,再次運行報CS0016未能寫入輸出檔案錯誤,這裡的問題是IIS所對應的組或使用者沒有訪問本地檔案夾C:\Windows\TEMP的許可權,進入到temp檔案夾的屬性視窗的安全選項卡,進行修改。
3.來自項目本身,這個涵蓋面就很廣了。我遇到的主要是兩個方面的問題:
3.1 來自JS檔案的邏輯判斷,用到了 documen.domain屬性,可以用該屬性獲得當前的URL中的伺服器名稱或是IP地址,以此來進行判斷,運行網站的目前使用者是否合法。
3.2 來自對網站中各個URL入口的設定。這裡有個背景交代:線上下調試時URL中的伺服器名稱一般都是 “localhost:連接埠號碼”,而線上上則會替換成相應的網域名稱,為了修改方便,有以下的設定方式:
web.config 檔案中:
<appSettings><!--網域名稱--> <add key="Domain" value="http://localhost:7676"/> <add key="Host" value="localhost"/></appSettings>
某靜態類中:
public static partial class WebUIHelper{ public static readonly string dominUrl = ConfigurationManager.AppSettings["Domain"];}
某頁面中:
@{ var hostUrl = WebUIHelper.dominUrl;}<a href="@(hostUrl)/***/">
綜上 發布到IIS上時記得 修改web.config檔案。
結語
1.全棧工程師是很厲害的。全棧工程師=基礎知識深厚+完善的機器模型+電腦網路+各種前後端語言。
2.不想瞭解產品邏輯的程式員當不了一名合格的工程師。