2014-01-27 76 views
1

我正在嘗試創建一個多租戶SaaS站點,並且已經閱讀了許多有關該主題的主題,但仍然存在一些我不確定的事情。使用.NET和IIS的多租戶SaaS

  1. 大多數示例使用Request.Url.Host來確定租戶。問題是哪裏是檢查租戶的最佳地點,這是Controller constructor還是global.asax?由於這需要檢查每個請求,我猜測租戶/主機映射應該存儲在散列表某處?

  2. IIS和應用程序池如何適應所有這些,我是否還需要爲每個租戶提供IIS站點+應用程序池,但是指向同一位置的物理路徑?或者我會只需要一個站點+應用程序池?

  3. 對於每個租戶網站的身份驗證,我猜我們只需要將Cookie設置爲租戶域/子域?

    HttpCookie cookie = FormsAuthentication.GetAuthCookie(username, true); cookie.Domain = "subdomain.domain.com"

  4. 你怎麼會去緩存數據特定租戶? HttpRuntime.Cache["CacheData"]這個緩存不可用於每個租戶嗎?

+0

4.什麼數據,我們在談論什麼? – Alexander

+0

@Alexander一個模板文件(大多隻是HTML)與文件相關性高速緩存 – kiwijus

回答

0

只是一些有關thougts都在這裏:

  1. Request.Url.Host是罰款。您可以使用Global.asax或自己的(抽象)基本控制器(我總是將其稱爲ControllerBase)。我不建議你在你編寫的每一個控制器中都使用它 - 嘗試把所有必要的東西放在某種配置中 - Class並將它加載到BaseController的應用程序Start或on Demand中 - 你可以改變這樣一個基類的構造函數類爲租戶提供標識符。

  2. 您可以同時執行這兩個操作 - 如果您只是將綁定添加到單個站點和應用程序池,它可能會最簡單。

  3. 這是一個方法,它,但你也可以做一些基礎要求的認證,其中包含目標租客(S)

  4. 您可以創建一個高速緩存,這取決於你的租戶(如您可以定義緩存這取決於登錄的用戶。

+0

是否有作爲單個應用程序池的優點/缺點?對於基於聲明的身份驗證會像WIF的工作? – kiwijus

+0

WIF應該工作,並不關心(2)。如果您擁有數據庫級別的訪問權限併爲數據庫服務器使用Windows身份驗證,則可能需要多個AppPools。其他資源也一樣。 – TGlatzer

0
  1. 我寧願寫一個自定義HTTP Module
  2. 更好地使用一個應用程序池,因爲您不想爲每個新客戶進入您的配置。
  3. 是的。
  4. 是的。
+0

有什麼優勢通過使用基本控制器使用自定義HTTP模塊? – kiwijus

+0

我不知道。你在使用MVC嗎?請更新您的標籤。 – Alexander

+0

是的,我正在使用MVC,只是更新了標籤。點2的 – kiwijus