換新系統了!! CS 2.0 Beta 3
問題與答案 (FAQ)
Q&A 類別 A: 概念理解類
A-Q1: 什麼是 Community Server(CS)?
- A簡: Community Server 是基於 .NET 的社群平台,提供部落格、討論區、相簿等功能,支援擴充與客製。
- A詳: Community Server(CS)是 Telligent 推出的 ASP.NET 架構社群平台,整合部落格、討論區、相簿、標籤與權限管理等模組。其特色是元件化與可擴充性,能透過設定或自訂程式碼擴充功能;常用於公司內部知識社群或公開社群網站。CS 1.0 建置於 .NET Framework 1.1,CS 2.0 起支援 .NET 2.0 與較新作業環境。在升級與維運上,CS 提供資料庫升級腳本與主題、模板機制,方便在官方版本演進中保留品牌風格與部分客製。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q2, A-Q14, B-Q7
A-Q2: 什麼是 CS 2.0 Beta 3?
- A簡: CS 2.0 Beta 3 為官方測試版,改進核心架構與功能,可運行於 ASP.NET 2.0 與 x64。
- A詳: CS 2.0 Beta 3 是 Community Server 2.0 的公開測試版本,將平台升級至 .NET 2.0 之上,帶來整體效能、擴充模型與管理介面的改進。較 1.0 版更符合新一代 ASP.NET 功能(如會員、主題、控件架構),並能在 64 位元作業系統上以 32 或 64 位元 CLR 運行(依組態)。作為 Beta 版,雖功能更完整,仍可能存在相容性與穩定性風險,實務上需搭配充分測試與回滾機制再行導入。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q5, B-Q8, C-Q3
A-Q3: 什麼是 IIS 6.0 的 32/64 位元模式?
- A簡: IIS 6 可在 x64 系統以 32 或 64 位元模式執行,但同時只能選一種。
- A詳: 在 Windows Server 2003 x64 上,IIS 6.0 的工作行程(w3wp.exe)可設定為 32 位元或 64 位元模式。此設定影響整個 Web 伺服器上所有應用程式集區的位元性,因此載入的 ISAPI、Managed 模組與 ASP.NET 執行階段也必須符合該位元模式。IIS 6 不支援同時跑 32 與 64 位元工作行程,需透過全域屬性 Enable32BitAppOnWin64 切換,切換將重啟工作行程並影響所有站台。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q7, B-Q1, B-Q6
A-Q4: 什麼是 ASP.NET 1.1 與 2.0?
- A簡: ASP.NET 1.1 與 2.0 為 .NET Web 框架版本,2.0 引入大量新功能並可支援 x64。
- A詳: ASP.NET 1.1(隸屬於 .NET Framework 1.1)是早期 Web 應用框架版本,提供 WebForm、基本控件與配置機制。ASP.NET 2.0(屬 .NET 2.0)帶來 Master Page、SiteMap、Login 控件、Provider 模型、編譯與部署改進與整體效能提升。在位元支援上,ASP.NET 1.1 在一般 x64 平台僅有 32 位元執行環境,而 ASP.NET 2.0 提供 32 與 64 位元執行體,能更好發揮 x64 環境效能。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q8, B-Q3, B-Q4
A-Q5: 為什麼作者從 CS 1.0 升級到 CS 2.0 Beta 3?
- A簡: 因升級至 64 位元 Windows 與 IIS 限制,CS 1.0 僅支援 ASP.NET 1.1,故改升級。
- A詳: 作者將伺服器與作業系統升級至 64 位元 Windows Server 2003。IIS 6 在 x64 僅能擇一使用 32 或 64 位元模式,且 ASP.NET 1.1 只能以 32 位元運行,2.0 可 32/64 位元。若要同時跑 1.1 與 2.0,只能讓 IIS 全部以 32 位元模式運作,等於放棄 x64 優勢。由於 CS 1.0 僅支援 ASP.NET 1.1,為取得新環境相容與改進,作者選擇升級至支援 ASP.NET 2.0 的 CS 2.0 Beta 3。
- 難度: 初級
- 學習階段: 核心
- 關聯概念: A-Q3, A-Q7, B-Q6, C-Q3
A-Q6: 為什麼 64 位元 Windows 需要考慮 ASP.NET 位元模式?
- A簡: 位元模式決定可載入的 CLR 與模組,影響相容性、效能與能否共存多版本。
- A詳: 在 x64 Windows 上,IIS 的位元模式決定工作行程與 ASP.NET 執行階段的位元性。32 位元模式可相容舊版 ASP.NET 1.1 與僅有 x86 的元件,但無法載入僅 64 位元的元件,也受限於 32 位元記憶體空間。64 位元模式可獲得較大記憶體與部分效能優勢,但 ASP.NET 1.1 與 32 位元 ISAPI 無法載入。選擇何種模式直接影響系統能否共存不同框架版本與應用。
- 難度: 初級
- 學習階段: 核心
- 關聯概念: A-Q8, B-Q1, B-Q4
A-Q7: IIS 6.0 是否能同時跑 32 與 64 位元模式?
- A簡: 不行。IIS 6 在 x64 僅能擇一運行 32 或 64 位元工作行程。
- A詳: 依 Microsoft KB 894435,IIS 6.0 在 64 位元 Windows 上可支援 32 與 64 位元模式,但不能同時啟用。其架構使所有應用程式集區共用相同位元性設定,切換 Enable32BitAppOnWin64 為全域操作。結果是:ASP.NET 1.1 只能在 32 位元模式下運行;ASP.NET 2.0 可在兩種模式下運行,但無法與 1.1 同時分別以 64 與 32 位元並行。
- 難度: 初級
- 學習階段: 核心
- 關聯概念: A-Q3, B-Q2, C-Q1
A-Q8: ASP.NET 1.1 與 2.0 在位元支援上的差異是什麼?
- A簡: 1.1 僅有 32 位元(一般 x64),2.0 同時支援 32 與 64 位元。
- A詳: 在常見 x64 平台上,ASP.NET 1.1 沒有對等的 64 位元 CLR 執行體,因此只能以 32 位元在 WOW64 上運行;而 ASP.NET 2.0 提供 32 與 64 位元版本,可依 IIS 模式選用。這使 2.0 應用能利用更大記憶體與 x64 原生優勢,而 1.1 應用受限於 32 位元。此差異是規劃共存、升級與效能調校時的關鍵考量。
- 難度: 初級
- 學習階段: 核心
- 關聯概念: A-Q4, B-Q4, B-Q5
A-Q9: 微軟是否提供 64 位元 .NET 1.1 Runtime?
- A簡: 一般 x64 平台無提供 .NET 1.1 x64 Runtime,因此僅能以 32 位元運行。
- A詳: 對於主流 x64(AMD64/Intel 64)Windows 平台,Microsoft 並未提供 .NET Framework 1.1 的 64 位元執行階段,導致 ASP.NET 1.1 應用在 x64 僅能依賴 32 位元模式。這限制了與 64 位元模組的相容性與可用記憶體空間,也是舊版應用在新環境部署的主要阻礙,常見解法為將 IIS 切至 32 位元模式或升級至支援 64 位元的 .NET 2.0 以上。
- 難度: 初級
- 學習階段: 核心
- 關聯概念: A-Q7, B-Q1, C-Q1
A-Q10: 在 64 位元 Windows 上同時跑 ASP.NET 1.1 與 2.0 的前提是什麼?
- A簡: 必須讓 IIS 6 以 32 位元模式運作,兩者皆以 32 位元並存。
- A詳: 由於 IIS 6 無法同時啟用 32 與 64 位元工作行程,若需同機並跑 ASP.NET 1.1 與 2.0 應用,唯一前提是將 IIS 設為 32 位元模式。其後使用 aspnet_regiis 對不同站台或應用設定對應的 ASP.NET 版本(皆為 32 位元)。代價是失去 64 位元原生優勢,且不得載入僅 64 位元的元件。另一路徑是將 1.1 升級至 2.0 或搬移至其他主機。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q6, C-Q2, D-Q7
A-Q11: 升級官方版與維持自訂的取捨是什麼?
- A簡: 官方版有核心改進與相容性,自訂保留需求但增加維護負擔。
- A詳: 維持自訂可快速滿足在地需求與介面偏好,但常修改核心或模板,升級時相容性風險高、維護成本重。官方版(如 CS 2.0)帶來底層架構與效能的整體改良,對新平台相容性更好,且具持續更新支持。取捨在於短期功能完整與長期可維護性、效能與安全性之間,實務上建議將自訂模組化、減少核心入侵,以兼顧升級路徑。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q10, C-Q7, D-Q5
A-Q12: 為什麼官方版本更能做根本改進?
- A簡: 官方掌握核心架構與路線,能從底層優化效能、相容性與擴充性。
- A詳: 根本改進通常涉及核心模組重構、資料模型調整、編譯目標升級與平台相容性調校。這些變更需掌握全局影響與回溯相容,唯有官方維護者能完整評估與執行。例如 CS 2.0 轉向 .NET 2.0,即可採用 Provider 模型、改良管線與控件,並支援 x64。相較自訂修補 UI 或小功能,官方改動更能解決長期痛點。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q11, B-Q8, C-Q10
A-Q13: 什麼是 Blog 編輯器改造與其價值?
- A簡: 針對編輯介面與流程客製,提升寫作體驗與效率。
- A詳: Blog 編輯器改造是對發文介面、格式化工具、媒體插入與草稿流程等進行客製,以貼近作者工作習慣與需求。其價值在於降低內容生產阻力、修補官方缺陷、加入在地化功能。然而此類改造若直接修改核心檔或控件,升級時易因 API/標記變更而失效,故建議以外掛式擴充或主題層覆寫來降低耦合。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q12, C-Q7, D-Q5
A-Q14: Photo Gallery 功能在 CS 的定位是什麼?
- A簡: 相簿模組,整合影像上傳、瀏覽與管理,強化多媒體內容。
- A詳: CS 的 Photo Gallery 是內建相簿模組,提供圖片上傳、縮圖、分類、權限與相簿頁面整合,便於部落格與社群內容加入視覺素材。作為官方模組,其與平台權限、主題與資源管理一致,升級時相容性較佳。若曾用第三方相簿,升級時需評估資料搬遷與連結相容。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q1, C-Q8, D-Q5
A-Q15: 在升級決策中核心價值是什麼?
- A簡: 相容性、穩定性、可維護性與未來擴充性,優先於短期客製便利。
- A詳: 升級牽涉平台支援、效能、安全與長期維護成本。核心價值應聚焦於:對新環境(x64、新版框架)的相容、穩定運作;減少核心入侵以利未來升級;透過官方改進獲得效能與功能提升;保留必要客製但模組化,確保可測試與可回滾。當二者衝突時,優先選擇長期可持續的路徑。
- 難度: 初級
- 學習階段: 核心
- 關聯概念: A-Q11, C-Q4, C-Q10
Q&A 類別 B: 技術原理類
B-Q1: IIS 6.0 在 x64 系統的位元模式如何運作?
- A簡: 由 Enable32BitAppOnWin64 控制工作行程位元性,影響整站模組載入。
- A詳: 原理說明:IIS 6 的工作行程 w3wp.exe 在 x64 可為 32 或 64 位元,由 metabase 旗標 Enable32BitAppOnWin64 控制。關鍵步驟:切換旗標、重啟服務、重註冊對應位元的 ASP.NET ISAPI。核心組件:w3wp、ISAPI(aspnet_isapi.dll)、Web Service Extensions、.NET CLR。切換為 32 位元時,所有站台與 ISAPI 必須為 x86;64 位元時則需 x64 相容,無法混跑。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q3, A-Q7, C-Q1
B-Q2: 為何 IIS 6 不能同時啟用 32 與 64 位元工作行程?
- A簡: 因全域位元性設定與 ISAPI 相依,單機僅能選擇一種工作行程架構。
- A詳: 原理說明:IIS 6 採 ISAPI 擴充與工作行程隔離,但在 x64 上工作行程的位元性為全域設定,ISAPI 與 CLR 必須與之相符。關鍵原因:同一台機器的 HTTP.sys 與 Metabase 設定在 IIS 6 不支援混合位元工作行程。流程:切換位元性會強制所有 app pool 重啟。核心組件:HTTP.sys、w3wp、ISAPI。此限制在較新 IIS 版本才有細粒度緩解。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q7, B-Q1, D-Q7
B-Q3: ASP.NET 版本與 IIS 的註冊/映射機制是什麼?
- A簡: 透過 aspnet_regiis 更新 Script Maps,映射至對應位元的 ISAPI。
- A詳: 原理說明:IIS 以 Script Map 將副檔名(如 .aspx)映射至 aspnet_isapi.dll。aspnet_regiis 工具會為指定網站/目錄註冊對應版本與位元的 ISAPI。關鍵步驟:選擇適當 Framework 路徑(Framework 或 Framework64)、執行 aspnet_regiis -i/-s 更新映射。核心組件:aspnet_regiis、aspnet_isapi.dll、Metabase。錯誤映射會導致 404/500 或處理管線錯誤。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: C-Q5, D-Q8, B-Q1
B-Q4: .NET CLR 位元性如何影響應用執行?
- A簡: CLR 位元性決定 JIT 目標與可載入元件,關係到效能與相容性。
- A詳: 原理說明:AnyCPU 組件在 32 位元 CLR 下以 x86 JIT,在 64 位元 CLR 下以 x64 JIT。關鍵差異:P/Invoke、COM Interop 與原生相依 DLL 必須匹配位元;64 位元可用較大記憶體但需相容元件。流程:w3wp 啟動→載入 CLR→JIT→執行。核心組件:mscorwks/clr、JIT、Loader。若位元不匹配,會拋出 BadImageFormatException 或載入失敗。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q8, B-Q14, D-Q3
B-Q5: WOW64 如何讓 32 位元應用在 x64 上運作?
- A簡: WOW64 提供 32 位元相容層,使 x86 應用在 x64 上隔離執行。
- A詳: 原理說明:WOW64 是 Windows 的 x86 模擬與轉譯層,讓 32 位元程式於 x64 核心上執行。關鍵步驟:系統建立獨立檔案與登錄視圖(SysWOW64、Wow6432Node),以隔離 32/64 位元資源。核心組件:wow64.dll、wow64win.dll。IIS 切到 32 位元模式時,w3wp 透過 WOW64 載入 x86 ISAPI 與 CLR。缺點是無法同時載入 x64 元件與受限記憶體空間。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q6, B-Q1, D-Q2
B-Q6: 在 x64 的 IIS 6 切換 32 位元模式的流程與影響是什麼?
- A簡: 設定 Enable32BitAppOnWin64、重啟 IIS、重註冊相符 ISAPI,所有站台受影響。
- A詳: 原理說明:以 Metabase 旗標切換全域位元性。關鍵步驟:1) 設 W3SVC/AppPools/Enable32BitAppOnWin64=1;2) iisreset;3) 用 32 位元 aspnet_regiis 註冊;4) 確認 Web Service Extensions 啟用對應 ISAPI。核心組件:adsutil.vbs、aspnet_regiis、IIS Admin Service。影響:所有 app pool 轉為 x86,需確保無 x64 專用元件,並規劃維護時段。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: C-Q1, C-Q5, D-Q2
B-Q7: 為何 CS 1.0 只能在 ASP.NET 1.1 正常運作?
- A簡: 因建立於 .NET 1.1 API 與設計假設,與 2.0 在相容性與依賴上有差異。
- A詳: 原理說明:CS 1.0 使用 .NET 1.1 的 API、編譯目標與配置模型,並未針對 2.0 的變更(如設定架構、控件、Provider)調整。關鍵影響:在 2.0 環境可能遇到行為差異或廢止 API。核心組件:System.Web 1.1、舊式控件、配置節。故 CS 1.0 在 2.0 環境下不保證可用,官方建議以原生 1.1 環境或升級至 2.0 版。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q5, B-Q8, D-Q1
B-Q8: CS 2.0 為何可於 ASP.NET 2.0 與 x64 執行?
- A簡: 其目標框架轉為 .NET 2.0,採用新架構並提供對 x64 的良好相容性。
- A詳: 原理說明:CS 2.0 以 .NET 2.0 為目標,重構資料提供者、控件與模組。關鍵步驟:改用 Provider 模型、強化配置、支援新編譯與部署。核心組件:System.Web 2.0、Membership/Role Provider、主題皮膚。多為 AnyCPU 組件,可在 32/64 位元 CLR 運作,因此能在 x64 發揮優勢並改善效能與延展性。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q2, A-Q8, C-Q3
B-Q9: 升級 CS 的資料與架構相容性如何處理?
- A簡: 透過官方資料庫升級腳本與遷移工具調整 Schema 與資料。
- A詳: 原理說明:版本升級通常附帶 Schema 變更。官方提供 SQL 腳本或遷移程式,將資料表、索引與資料進行轉換。關鍵步驟:備份→離線升級→資料驗證→應用程式配置更新。核心組件:SQL Server、升級腳本、Release Notes。遵循順序可降低資料不一致風險,並保留原內容與權限設定。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: C-Q3, C-Q4, D-Q5
B-Q10: 自訂擴充與官方升級間的耦合機制是什麼?
- A簡: 直接修改核心耦合高,外掛式擴充耦合低,升級相容性較佳。
- A詳: 原理說明:耦合來自程式相依與檔案覆寫。直接改動核心檔一旦版本升級,變更點易衝突。關鍵策略:以外掛、事件、Provider 或主題模板擴充,降低對核心程式的直接依賴。核心組件:擴充點 API、配置注入、樣板覆寫。這能讓升級時僅需重新編譯或輕量調整掛接點,避免大規模合併。
- 難度: 中級
- 學習階段: 進階
- 關聯概念: A-Q11, C-Q7, D-Q5
B-Q11: Beta 軟體的風險控制原理是什麼?
- A簡: 以隔離、充分測試與回滾策略,降低 Beta 不穩定性帶來的影響。
- A詳: 原理說明:Beta 版未完全驗證,可能含 Bug 或相容性議題。關鍵步驟:建立測試環境、資料與檔案完整備份、版本標記、灰度發布、監控回報。核心組件:版本控制、備援架構、監控告警。透過可回滾部署(藍綠、影子站台)與明確驗收清單,可在享受新功能的同時控制風險。
- 難度: 初級
- 學習階段: 核心
- 關聯概念: C-Q4, D-Q9, A-Q15
B-Q12: 編輯器客製對升級的影響機制是什麼?
- A簡: 客製若覆寫核心檔,升級易衝突;以插件化降低衝擊。
- A詳: 原理說明:編輯器常涉及控件、腳本與樣板。直接改檔會與新版結構差異產生衝突。關鍵步驟:抽離客製為獨立資源、以配置掛載、用事件或 Provider 注入。核心組件:使用者控制項、主題、資源檔。如此升級時僅需調整掛載點,避免逐檔合併與未知相依破壞。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q13, C-Q7, D-Q5
B-Q13: ISAPI 與 Managed 管線在 IIS 6 的角色與位元限制?
- A簡: IIS 6 透過 ISAPI 處理,位元需與工作行程一致,否則無法載入。
- A詳: 原理說明:IIS 6 採 ISAPI 擴展(如 aspnet_isapi.dll)橋接至 .NET 管線。關鍵步驟:擴展註冊、請求映射、ISAPI 載入。核心組件:ISAPI、aspnet_isapi.dll、腳本對應。位元限制在於 ISAPI 為原生 DLL,必須與 w3wp 位元一致,不符會報錯(如 Cannot load 32-bit ISAPI)。因此切換模式後需重註冊相符 ISAPI。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q1, B-Q3, D-Q2
B-Q14: BadImageFormatException 的位元性機制是什麼?
- A簡: 組件位元與行程不匹配時拋出,常見於 x86 DLL 載入 x64 行程。
- A詳: 原理說明:CLR 在載入組件時檢查 PE 標頭(x86/x64/AnyCPU)。關鍵情境:在 x64 行程載入 x86 原生 DLL 或標記為 x86 的 .NET 程式集會造成 BadImageFormatException。關鍵步驟:確認組件平台目標、行程位元、相依 DLL。核心組件:Loader、PE Header、JIT。解法是統一位元或改為 AnyCPU 並確保相依原生 DLL 可用對應版本。
- 難度: 中級
- 學習階段: 進階
- 關聯概念: B-Q4, D-Q3, C-Q9
B-Q15: 在同機併存多 .NET 版本的技術策略是什麼?
- A簡: IIS 6 受限可全站 32 位元並行 1.1/2.0,或以分流與虛擬化隔離。
- A詳: 原理說明:.NET 版本可並存安裝,但 IIS 6 位元性限制導致混跑受限。關鍵策略:1) 全站 32 位元,使用 aspnet_regiis 對不同站台映射 1.1 與 2.0;2) 分機部署或反向代理分流;3) 虛擬化/容器隔離不同位元與版本;4) 升級舊應用。核心組件:IIS、反向代理、虛擬化平台。選擇依維運成本與效能需求而定。
- 難度: 中級
- 學習階段: 進階
- 關聯概念: A-Q10, C-Q2, D-Q7
Q&A 類別 C: 實作應用類
C-Q1: 如何在 Win2003 x64 切換 IIS 6 至 32 位元模式?
- A簡: 設定 Enable32BitAppOnWin64=1,重啟 IIS,重註冊 32 位元 ASP.NET。
- A詳: 實作步驟:1) 以系統管理員執行命令:
cscript %SystemDrive%\Inetpub\AdminScripts\adsutil.vbs set W3SVC/AppPools/Enable32BitAppOnWin64 1;2)iisreset;3) 使用 32 位元框架路徑註冊 ASP.NET:%windir%\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis -i或 v2.0;4) 在 IIS 管理員啟用對應 Web Service Extensions。注意事項:此為全域切換,會中斷所有站台;確保無 x64 專用元件。最佳實踐:維護時段執行並預備回滾。 - 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q6, C-Q5, D-Q2
C-Q2: 如何在同台 x64 主機同時跑 ASP.NET 1.1 與 2.0?
- A簡: 將 IIS 設為 32 位元,分別用 aspnet_regiis 映射 1.1 與 2.0。
- A詳: 實作步驟:1) 依 C-Q1 切換 IIS 至 32 位元;2) 安裝 .NET 1.1 與 2.0(x86);3) 用 1.1 的
aspnet_regiis -s W3SVC/1/ROOT為站台1註冊;4) 用 2.0 的aspnet_regiis -s W3SVC/2/ROOT為站台2註冊。注意事項:兩者皆為 32 位元;無法讓 2.0 使用 x64。最佳實踐:清楚標記站台對應版本,避免後續維護混淆。 - 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q10, B-Q3, D-Q7
C-Q3: 如何將 CS 1.0 升級到 CS 2.0 Beta 3?
- A簡: 先完整備份,依官方步驟升級程式與資料庫,最後驗證功能。
- A詳: 實作步驟:1) 備份網站檔案與資料庫;2) 下載 CS 2.0 Beta 3 與 Release Notes;3) 於測試環境解壓新版本,配置 web.config 至 .NET 2.0;4) 依文件執行 SQL 升級腳本;5) 部署至測試站台,逐項驗證(文章、相簿、編輯器);6) 規劃停機,切換正式站。注意事項:Beta 風險,保留回滾;客製減少侵入。最佳實踐:先影子部署,切換 DNS/反向代理。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q9, B-Q11, C-Q4
C-Q4: 升級前如何備份與建立回滾方案?
- A簡: 完整備份檔案與資料庫,做版本標記與影子站台,預備快速回切。
- A詳: 實作步驟:1) 資料庫完整備份與驗證還原;2) 網站檔案、web.config 與資源打包;3) 標記版本與變更清單;4) 建立影子站台跑新版本;5) 預先演練回滾(還原 DB、切換站台)。關鍵設定:連線字串、機密金鑰。注意事項:停機窗口、快照一致性。最佳實踐:自動化備份與健康檢查腳本。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q11, D-Q9, A-Q15
C-Q5: 如何重新註冊 ASP.NET 版本給特定網站?
- A簡: 用對應版本與位元的 aspnet_regiis,針對站台路徑執行 -s。
- A詳: 實作步驟:1) 找到正確路徑:
%windir%\Microsoft.NET\Framework\v1.1.4322或v2.0.50727;2) 以系統管理員執行:aspnet_regiis -s W3SVC/<SiteId>/ROOT;3) 驗證 IIS 中 Web Service Extensions 啟用;4) 測試簡單 .aspx。注意事項:位元要與 IIS 模式一致;若全站切到 32 位元,需用 Framework(非 Framework64)。最佳實踐:記錄站台與版本對應表。 - 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q3, C-Q1, D-Q8
C-Q6: 如何驗證 IIS 位元模式與 ASP.NET 映射是否正確?
- A簡: 檢查 Enable32BitAppOnWin64、w3wp 位元與 Script Maps 設定。
- A詳: 實作步驟:1) 查詢位元旗標:
cscript adsutil.vbs GET W3SVC/AppPools/Enable32BitAppOnWin64;2) 以 Process Explorer 檢視 w3wp 是否為 x86;3) 在 IIS Manager 查看 Web Service Extensions 是否啟用對應 ASP.NET;4) 執行aspnet_regiis -lv檢視已註冊版本。注意事項:不同站台可映射不同版本但同位元。最佳實踐:建立自動化健康檢查脚本。 - 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q1, B-Q3, D-Q8
C-Q7: 如何將自訂功能模組化以利未來升級?
- A簡: 以外掛、Provider、主題覆寫實作,避免直接改核心檔案。
- A詳: 實作步驟:1) 抽出客製程式至獨立 Class Library;2) 以事件或 Provider 掛點注入;3) 使用主題/模板覆寫 UI;4) 配置式開關控制功能;5) 加入自動化測試。關鍵設定:組件部署、配置節。注意事項:勿修改核心 DLL 與共用檔。最佳實踐:版本化擴充、寫升級指引,升級時僅重建與重新掛接。
- 難度: 中級
- 學習階段: 進階
- 關聯概念: B-Q10, B-Q12, D-Q5
C-Q8: 升級 CS 後如何測試關鍵功能?
- A簡: 依清單驗證文章、上傳、相簿、編輯器與權限,並檢查日誌無錯。
- A詳: 實作步驟:1) 用測試帳號驗證登入、發文、編輯、刪除;2) 上傳圖片與相簿瀏覽;3) 測試編輯器格式、媒體插入;4) 檢查主題樣式;5) 驗證搜尋、RSS、權限與後台設定;6) 監看事件與應用程式日誌。注意事項:涵蓋自訂功能與邊界情境。最佳實踐:自動化 E2E 測試與回歸測試清單。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q14, B-Q11, D-Q9
C-Q9: 如何處理 x64 環境下的相依元件與第三方 DLL?
- A簡: 統一位元性,優先 AnyCPU,必要時提供對應 x86/x64 原生 DLL。
- A詳: 實作步驟:1) 盤點相依元件位元;2) 將自家程式編譯為 AnyCPU;3) 若 IIS 為 x86 模式,確保原生 DLL 提供 x86 版本;4) 移除或替換僅 x64 的元件;5) 以 Fusion Log 檢查載入問題。注意事項:混用位元會導致載入失敗。最佳實踐:建立相依表與 CI 檢查目標平台。
- 難度: 中級
- 學習階段: 進階
- 關聯概念: B-Q4, B-Q14, D-Q3
C-Q10: 如何逐步取代舊客製功能為官方功能?
- A簡: 盤點重疊、以設定替代、封存 legacy,保留必要差異化為插件。
- A詳: 實作步驟:1) 列出客製與官方新功能對照;2) 能設定達成者改用官方;3) 其餘重構為插件;4) 定義淘汰計畫與時間表;5) 加上遷移導引與文件。注意事項:避免一次性大改,降低風險。最佳實踐:觀察使用數據,優先替換高維護低價值項。
- 難度: 中級
- 學習階段: 進階
- 關聯概念: A-Q12, B-Q10, D-Q5
Q&A 類別 D: 問題解決類
D-Q1: 64 位元 IIS 6 執行 CS 1.0 出現錯誤怎麼辦?
- A簡: CS 1.0 需 ASP.NET 1.1。將 IIS 切為 32 位元或升級至 CS 2.0。
- A詳: 症狀:部署 CS 1.0 於 x64 IIS 6 但以 64 位元或 ASP.NET 2.0 執行時,可能無法啟動、拋解析錯誤或 500。原因:CS 1.0 依賴 .NET 1.1,且 1.1 在 x64 僅有 32 位元。解決:依 C-Q1 將 IIS 切為 32 位元並註冊 1.1;或依 C-Q3 升級至 CS 2.0。預防:升級前先驗證位元模式與框架版本相容性。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q5, B-Q7, C-Q1
D-Q2: 遇到「Cannot load 32-bit ISAPI on 64-bit worker process」怎麼辦?
- A簡: 代表位元不匹配。切換 IIS 至 32 位元或改用相符 ISAPI。
- A詳: 症狀:IIS 事件檢視器記錄無法載入 32 位元 ISAPI。原因:w3wp 為 64 位元,但映射至 x86 的 aspnet_isapi.dll。解決:1) 依 C-Q1 切換 IIS 至 32 位元並重註冊;或 2) 改註冊 x64 版 ASP.NET 2.0 ISAPI。預防:部署前檢查位元模式、Script Maps 與 Web Service Extensions。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q13, C-Q5, B-Q1
D-Q3: ASP.NET 1.1 應用在 x64 出現 BadImageFormatException?
- A簡: 位元不匹配或原生 DLL 衝突,統一位元並使用相容組件。
- A詳: 症狀:載入組件時拋 BadImageFormatException。原因:x64 行程載入 x86 組件或反之,或相依原生 DLL 位元不符。解決:在 x64 上將 IIS 切為 32 位元(供 1.1),或確保所有組件與原生 DLL 一致為 x86;避免 x64 專用相依。預防:建置時使用 AnyCPU,並建立相依位元檢查清單。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q14, C-Q9, B-Q4
D-Q4: 升級後站台顯示「Service Unavailable」怎麼辦?
- A簡: 多源於 ISAPI/應用程式集區異常。檢查位元、映射與 App Pool。
- A詳: 症狀:站台 503,事件記錄應用程式集區停止。可能原因:位元切換後 ISAPI 不符、App Pool 身分無權限、升級後組態錯誤。解決:1) 重註冊正確 ASP.NET;2) 檢查 Web Service Extensions;3) 重建 App Pool 與權限;4) 查看日誌詳細錯誤。預防:升級前壓力測試、部署自動健康檢查。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q6, C-Q6, D-Q8
D-Q5: 升級 CS 後客製功能失效如何處理?
- A簡: 以外掛化重構,調整掛點與樣板,避免直接改核心。
- A詳: 症狀:編輯器強化、相簿整合等客製在新版本失效。原因:API/模板變更導致舊改動不相容。解決:1) 依 B-Q10 將客製模組化;2) 更新至新版事件/Provider 掛點;3) 以主題覆寫 UI;4) 保留必要功能為外掛。預防:制定客製準則、升級前完成差異盤點與 PoC。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q11, B-Q12, C-Q7
D-Q6: 切換 IIS 為 32 位元後 .NET 2.0 應用異常?
- A簡: 2.0 可跑 32 位元,但需確保相依元件非僅 x64 並重註冊映射。
- A詳: 症狀:2.0 應用拋載入錯、功能失效。原因:相依 x64 原生 DLL 無法在 x86 行程載入,或映射仍指向 x64 ISAPI。解決:1) 用 x86
aspnet_regiis重註冊;2) 替換相依為 x86 或 AnyCPU;3) 檢查 Web Service Extensions。預防:盤點相依與位元,保持一致。 - 難度: 中級
- 學習階段: 核心
- 關聯概念: C-Q5, C-Q9, B-Q4
D-Q7: 無法同時跑 1.1 與 2.0 有何替代方案?
- A簡: 採分流:另一台伺服器、虛擬化或反向代理,或升級舊應用。
- A詳: 症狀:業務需兩版本並行且要求 x64 效能。原因:IIS 6 位元限制。解決:1) 以第二台主機或 VM 跑 1.1;2) 反向代理分流不同應用;3) 容器/隔離環境;4) 逐步升級 1.1 應用至 2.0。預防:早期規劃版本淘汰與平台演進路徑。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q10, B-Q15, C-Q2
D-Q8: ASP.NET 版本映射錯誤導致 404/500 如何診斷?
- A簡: 檢查 Script Maps、Web Service Extensions 與 aspnet_regiis 註冊。
- A詳: 症狀:.aspx 下載為純文字或回 404/500。原因:未註冊或註冊至錯誤版本/位元的 ISAPI。解決:1)
aspnet_regiis -lv查看註冊狀態;2) 用正確路徑aspnet_regiis -i/-s;3) 啟用 Web Service Extensions;4) 驗證位元模式。預防:部署流程納入版本/位元自檢腳本。 - 難度: 初級
- 學習階段: 核心
- 關聯概念: B-Q3, C-Q6, C-Q5
D-Q9: 使用 Beta 版本的不穩定風險如何緩解?
- A簡: 測試隔離、灰度發布與完整回滾,建立監控與快速修復。
- A詳: 症狀:隨機錯誤、相容性問題。原因:Beta 尚未充分驗證。解決:1) 測試環境完整驗證;2) 影子站台或藍綠部署;3) 完整備份與回滾腳本;4) 監控與告警快速反應。預防:明確驗收門檻、限制 Beta 使用範圍與時間。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q11, C-Q4, C-Q8
D-Q10: 以 32 位元模式運作造成記憶體限制,效能不佳怎麼辦?
- A簡: 降低單體負載、分散流量、調整回收與考慮升級至 x64 版本。
- A詳: 症狀:高併發下記憶體不足、回收頻繁。原因:x86 行程可用記憶體較小。解決:1) 分片站台或反向代理分流;2) 調整 App Pool 回收、Caching 策略;3) 優化 SQL 與資源;4) 規劃升級至支援 x64 的應用(如改用 CS 2.0 於 x64)。預防:容量規劃與壓力測試。
- 難度: 中級
- 學習階段: 進階
- 關聯概念: A-Q6, B-Q4, A-Q5
學習路徑索引
- 初學者:建議先學習哪 15 題
- A-Q1: 什麼是 Community Server(CS)?
- A-Q2: 什麼是 CS 2.0 Beta 3?
- A-Q3: 什麼是 IIS 6.0 的 32/64 位元模式?
- A-Q4: 什麼是 ASP.NET 1.1 與 2.0?
- A-Q5: 為什麼作者從 CS 1.0 升級到 CS 2.0 Beta 3?
- A-Q6: 為什麼 64 位元 Windows 需要考慮 ASP.NET 位元模式?
- A-Q7: IIS 6.0 是否能同時跑 32 與 64 位元模式?
- A-Q8: ASP.NET 1.1 與 2.0 的位元差異?
- A-Q9: 微軟是否提供 64 位元 .NET 1.1 Runtime?
- A-Q14: Photo Gallery 功能在 CS 的定位是什麼?
- A-Q15: 升級決策的核心價值是什麼?
- D-Q1: 64 位元 IIS 6 執行 CS 1.0 出錯怎麼辦?
- D-Q7: 無法同時跑 1.1 與 2.0 的替代方案?
- D-Q8: ASP.NET 版本映射錯誤如何診斷?
- C-Q4: 升級前如何備份與回滾?
- 中級者:建議學習哪 20 題
- B-Q1: IIS 6.0 在 x64 的位元模式如何運作?
- B-Q2: 為何 IIS 6 不能同時啟用 32 與 64 位元?
- B-Q3: ASP.NET 版本與 IIS 映射機制?
- B-Q4: CLR 位元性如何影響應用執行?
- B-Q5: WOW64 如何工作?
- B-Q6: 切換 32 位元模式的流程與影響?
- B-Q7: CS 1.0 為何只能在 1.1 運作?
- B-Q8: CS 2.0 為何可於 2.0 與 x64 執行?
- B-Q9: 升級 CS 的資料相容原理?
- B-Q13: ISAPI 與位元限制?
- C-Q1: 切換 IIS 至 32 位元模式
- C-Q2: 同機跑 1.1 與 2.0 的做法
- C-Q5: 重新註冊 ASP.NET 版本
- C-Q6: 驗證位元模式與映射
- C-Q8: 升級後測試方法
- D-Q2: 32 位元 ISAPI 載入錯誤
- D-Q3: BadImageFormatException
- D-Q4: Service Unavailable
- D-Q6: 切換後 2.0 應用異常
- D-Q10: 32 位元模式效能不佳
- 高級者:建議關注哪 15 題
- A-Q10: 在 x64 同時跑 1.1 與 2.0 的前提
- A-Q11: 升級官方版與自訂取捨
- A-Q12: 為何官方更能做根本改進
- B-Q10: 自訂擴充與升級的耦合機制
- B-Q11: Beta 風險控制原理
- B-Q12: 編輯器客製對升級影響
- B-Q14: BadImageFormatException 機制
- B-Q15: 併存多 .NET 版本策略
- C-Q3: 升級 CS 1.0 到 CS 2.0 Beta 3
- C-Q7: 自訂功能模組化
- C-Q9: 相依元件與 DLL 位元處理
- C-Q10: 逐步用官方功能取代客製
- D-Q5: 升級後客製失效處理
- D-Q9: Beta 不穩定風險緩解
- D-Q10: 32 位元模式下的效能治理