The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

嘗試執行專案時發生錯誤: 無法在Web伺服器上啟動偵錯。

在 2011 年的今天,我們又再度接手了一個 ASP.NET 1.1 的網站維護,而在開發主機都正常運作了幾個月之後卻又再度遇到鬼打牆的問題,而且這個錯誤訊息真的會讓人丈二金剛摸不著頭緒【嘗試執行專案時發生錯誤: 無法在Web伺服器上啟動偵錯。無法啟動 ASP.NET 或 ATL Server 偵錯。 請確認該伺服器已正確安裝 ASP.NET 或 ATL Server。】,我跟他奮鬥了五個小時才弄清楚問題發生的主因。

先說明我的開發環境:

  • Windows Server 2003 SP2
  • Visual Studio .NET 2003
  • 開發的網站安裝在 IIS 6 的預設站台下
  • 該站台已經擴充了 FrontPage Server Extension
  • 網站的 .NET 版本為 ASP.NET 1.1
  • 請參考我先前的文章【安裝 Visual Studio .NET 2003 開發主機筆記

這次在 Visual Studio .NET 2003 裡直接按下 F5 進入偵錯模式,就會立即出現以下錯誤訊息���

這個問題我找了許多國內外的論壇、部落格文章、MSDN 文章等,在本文最後的「相關連結」有許多解決問題的方法說明,大部分的情況應該都能解決,不過我比較倒楣一些些,這些參考資料與文章裡,沒有一篇能夠直接解決我的問題,所以才花了五個小時研究出來真正的問題所在,我想以後在遇到這狀況應該不太會卡關,因此我建議先看完我這篇文章所提及的觀念後再進一步追查問題,相信很快就能解決這個棘手的情況。

經我研究之後發現,大多這類問題都是卡在 IIS 身上,反而 Visual Studio .NET 2003 裡的專案設定並不會有太大的問題,如果說真是在 Visual Studio .NET 2003 裡出問題,比較有可能的狀況是在你網站專案的 Web.config 如果有異常的現象,那也有可能會出現類似的錯誤,不過你只要先確認透過瀏覽器可以正常瀏覽與執行該網站,那麼問題已經解決一大半,剩下的就是來處理 IIS 的問題即可。

本篇文章就是站在「你已確認透過瀏覽器可以正常瀏覽與執行該網站」的情況下,而又無法透過 Visual Studio .NET 2003 直接進入開始偵錯模式的問題進行處理,以下我整理出幾個與 IIS 設定有關的錯誤點,也許大家看到畫面就能立刻解決問題:

1. 記得執行 配置 Server Extension 2002,已啟用 FrontPage Server Extensio 的畫面如下:

2. 記得勾選「啟用 HTTP 的持續作用」選項 ( Enable HTTP Keep-Alive )

3. 記得選對 ASP.NET 版本

4. 記得確認「驗證及存取控制」,並啟用「匿名存取」與「整合式 Windows 驗證

5. 如果你先安裝 .NET Framework 1.1 才安裝 IIS 的話,那麼你必須手動重新註冊 .NET 1.1 到 IIS 裡

c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe -i

   註冊完後記得要修改「網頁服務延伸」把 ASP.NET v1.1.4322 設為「已允許」才行!

 

6. 確認你的 應用程式設定 裡的 應用程式副檔名對應 有支援 DEBUG 指令動詞

Visual Studio .NET 2003 的除錯器 (Debugger) 由於會跟 IIS 溝通,但溝通的細節不多文件提及,後來我確認 Debugger 與 IIS 之間就是透過單純的 HTTP 做溝通而已,而溝通過程中會用到 DEBUG 這個 HTTP 指令動詞,所以必須確認你要除錯的 ASP.NET 頁面必須有支援 DEBUG 這個 HTTP 指令動詞 才行!

 

備註:有人提到如果無法進入偵錯,也有可能是因為 Windows 防火牆的關係,不過預設應該都能透過本機存取才對,如果你是透過遠端偵錯,那麼請務必開啟 HTTP Port 80 的連線才能正常開啟偵錯模式。

 

我認為若你已經確認過以上 6 點設定,應該能解決超過 99% 的問題,不過以上卻無法解決我這次遭遇的問題,因為我最後發現,我的開發環境之所以無法啟動偵錯是因為有個 ISAPI 擴充模組搞的鬼,這個模組就是知名的 UrlScan 模組,因為在 UrlScan 模組的預設設定中是不允許 DEBUG 指令動詞的,所以必須手動加上 DEBUG 才能讓 Visual Studio .NET 2003 啟動偵錯!

UrlScan 的設定檔在 C:\WINDOWS\system32\inetsrv\urlscan\UrlScan.ini

請參照下圖新增 DEBUG 上去即可:

 

我用了 5 個小時換來知道要在這個檔案輸入 5 個字元的知識,這實在太貴啦! XD

 

相關連結