首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> .NET 實例教學

首次部署 ASP.NET 至 Windows Server 2003:從 ASP 遷移的關鍵踩坑記錄

     編輯:.NET 實例教學

記錄首次將 ASP.NET 應用程式部署至 Windows Server 2003 (IIS 6.0) 的真實經驗:從傳統 ASP 遷移、挑選 CMS、上線後遭遇「找不到檔案」錯誤,最終發現是 **ISAPI 擴展對應未啟用 .NET 版本** 的經典問題。

背景與選型

  • 伺服器:Windows Server 2003 (內建 IIS 6.0),完整支援 .NET Framework。
  • 現有環境:全 ASP (Classic ASP) 網站運行中。
  • 目標:部署一套 .NET 文章發布系統 (CMS)。
  • 嘗試 1:「荒野文章系統」——介面不錯,但標題寫死在 DLL,無法修改,作者失聯,放棄。
  • 嘗試 2:「網奇新聞系統」——功能強、介面佳、可正常修改設定,決定採用。

本機開發一切正常

  • Visual Studio 內建 Web Server (Cassini) 執行無誤。
  • 資料庫連線、後台發文、前台瀏覽皆正常。

上線伺服器:錯誤「找不到檔案」

  • 發布至 IIS 虛擬目錄,設定 `web.config`、資料庫連線字串。
  • 瀏覽首頁 → **HTTP 404 / 「找不到檔案」** (非 ASP.NET 黃色錯誤頁,而是 IIS 原生 404)。
  • 檢查:實體檔案存在、權限正確、虛擬目錄指向正確、預設文件 `Default.aspx` 已加入。
  • 直接瀏覽圖片 (靜態檔案) → **正常顯示**,證明 IIS 靜態內容服務正常。
  • 應用程式集區:.NET 版本、管線模式設定無誤。

關鍵發現:ISAPI 與 CGI 限制 / Web 服務擴展

在 IIS 6.0 管理員中:

  1. 展開本機電腦 → **Web 服務擴展 (Web Service Extensions)**。
  2. 發現兩個關鍵項目:**「ASP.NET v2.0.50727」** 與 **「ASP.NET v1.1.4322」** 狀態皆為 **「禁止」**。
  3. 預設 IIS 6.0 安全性鎖定:**所有未知的 ISAPI 擴展預設禁止執行**。

解決:啟用 ASP.NET ISAPI 擴展

  1. 在「Web 服務擴展」中,選取 **ASP.NET v2.0.50727** (或專案所需版本)。
  2. 點擊 **「允許」** 按鈕 (或右鍵 → 允許)。
  3. 同理啟用 **ASP.NET v1.1.4322** (若有舊版相容需求)。
  4. 重新整理瀏覽器,**網站正常顯示**!
IIS 6 Web Service Extensions 啟用 ASP.NET
IIS 6.0 Web 服務擴展:必須將 ASP.NET 版本設為「允許」

根因分析

  • IIS 6.0 採用「預設拒絕」安全模型:安裝 .NET Framework 會註冊 ISAPI 對應 (`aspnet_isapi.dll`),但 **Web 服務擴展預設為禁止**,需管理員明確允許。
  • 靜態檔案 (圖片、CSS、JS) 由 IIS 核心直接服務,**不經過 ASP.NET ISAPI**,故正常。
  • .aspx、.asmx、.ashx 等動態副檔名對應至 `aspnet_isapi.dll`,**被 Web 服務擴展攔截拒絕**,回傳 404 (而非 500),極易誤導開發者以為檔案遺失。

延伸檢查清單 (避坑指南)

項目檢查點
ASP.NET 註冊`aspnet_regiis -i -enable` (確認 ISAPI 對應已註冊)
Web 服務擴展目標 .NET 版本狀態 = **允許**
應用程式集區.NET 版本正確、Managed Pipeline Mode (整合/經典)、Identity 權限
虛擬目錄/應用程式已轉換為應用程式、預設文件含 Default.aspx、執行權限 = 腳本
web.config、 (除錯期)
資料庫連線連線字串正確、防火牆開放 1433、SQL Server 允許遠端連線
檔案系統權限應用程式集區身分 (Network Service / 自訂帳戶) 對網站目錄有讀/寫 (App_Data、Log)

後記

這個「Web 服務擴展未啟用」是 IIS 6.0 時代最經典的部署坑,無數開發者 (含筆者) 曾在深夜對著 404 頁面抓狂。記住:**IIS 6.0 靜態檔案正常 ≠ ASP.NET 正常**,動態副檔名需通過 ISAPI 擴展許可清單。雖然 IIS 7+ 已改用模組化管線不再有此設定,但理解「預設拒絕、顯式允許」的安全哲學,對所有伺服器部署依然適用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved