首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

ASP.NET 主站分站統一域名訪問:子應用程序部署方案

     編輯:程式設計疑難解答

業務場景

原架構:主站 www.main.com,分站通過二級域名 sub1.main.com、sub2.main.com 訪問。
目標:**統一域名 www.main.com 訪問所有站點**,如 www.main.com/sub1/、www.main.com/sub2/。

方案:IIS 主站目錄下建立子應用程序 (最標準、零代碼改動)

  1. 主站物理路徑:D:\Web\MainSite。
  2. 分站物理路徑:D:\Web\SubSite1、D:\Web\SubSite2。
  3. IIS 管理器 → 主站 MainSite → 右鍵 添加應用程序 (Add Application):
    • 別名 : sub1 (URL 路徑段)。
    • 物理路徑 : D:\Web\SubSite1。
    • 應用程序池 : 可選同主站池 (共享進程、Session 需配置 StateServer/SQLServer) 或獨立池 (隔離、推薦)。
  4. 同理添加 sub2 應用程序。

訪問效果

  • 主站:https://www.main.com/
  • 分站 1:https://www.main.com/sub1/
  • 分站 2: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 子應用程序部署詳解 (博客園)

總結

ASP.NET 統一域名訪問主站分站,標準做法:IIS 主站下「添加應用程序」,別名即為 URL 路徑段。 核心配置:**Session 共享用 StateServer/SqlServer、機器金鑰同步、清除 web.config 繼承衝突、相對路徑用 ~/**。此方案零代碼改動、隔離性好、運行穩定,是傳統 ASP.NET 架構的最佳選擇。

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