原架構:主站 www.main.com,分站通過二級域名 sub1.main.com、sub2.main.com 訪問。
目標:**統一域名 www.main.com 訪問所有站點**,如 www.main.com/sub1/、www.main.com/sub2/。
D:\Web\MainSite。D:\Web\SubSite1、D:\Web\SubSite2。MainSite → 右鍵 添加應用程序 (Add Application):
sub1 (URL 路徑段)。D:\Web\SubSite1。sub2 應用程序。https://www.main.com/https://www.main.com/sub1/https://www.main.com/sub2/| 項目 | 說明 |
|---|---|
| web.config 繼承 | 子應用程序會**繼承**父站點 web.config 設置 (連接字符串、模塊、處理程序等)。若衝突,在子應用 web.config 用 <clear /> 或 <remove /> 清除繼承節點,再重新添加。 |
| Session 共享 | 跨應用程序共享 Session **必須**配置 Out-of-Process 模式:<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" />或 SqlServer 模式。InProc (默認) 進程隔離無法共享。 |
| 虛擬目錄 vs 應用程序 | 必須用「添加應用程序」**,而非「添加虛擬目錄」。虛擬目錄無獨立應用程序域,無法運行獨立 ASP.NET 應用 (Global.asax、bin 目錄、web.config 不生效)。 |
| 路徑解析 | 分站代碼中用 Request.ApplicationPath (返回 /sub1) 或 ~/ (解析為 /sub1/) 獲取相對路徑,避免硬編碼根路徑。 |
| 身份驗證/授權 | 主站登錄後,子應用需識別用戶。共享機器金鑰 <machineKey> 確保 Forms 認證票據跨應用解密一致。 |
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 子應用程序 (推薦) | 零代碼改動、IIS 原生支持、隔離性好、部署獨立 | Session/機器金鑰需額外配置、靜態資源路徑需注意 | **ASP.NET WebForms/MVC 傳統架構、分站相對獨立** |
| URL Rewrite 反向代理 | 單一應用程序、Session 自然共享 | 規則複雜、靜態資源/回郵地址重寫麻煩、性能損耗 | 極簡單分站、不想動 IIS 結構 |
| 合併為單一項目 (Area/Module) | 架構最簡、Session/依賴注入天然共享 | 代碼耦合、部署綁定、團隊協作衝突 | 分站業務高度相關、團隊小 |
| 微服務/網關 (現代) | 技術先進、獨立部署擴展 | 複雜度質變、運維成本高、過度設計 | 大型系統、跨語言、獨立團隊 |
ASP.NET 統一域名訪問主站分站,標準做法:IIS 主站下「添加應用程序」,別名即為 URL 路徑段。 核心配置:**Session 共享用 StateServer/SqlServer、機器金鑰同步、清除 web.config 繼承衝突、相對路徑用 ~/**。此方案零代碼改動、隔離性好、運行穩定,是傳統 ASP.NET 架構的最佳選擇。