2012-07-16 72 views
1

我使用MVC4在.NET中創建業務應用程序。該應用程序將被多個公司客戶使用,每個客戶都擁有自己的品牌元素(包括樣式表和徽標圖像)。 UI爲後端平臺調用Web服務以填充應用程序的各個區域;調用這些Web服務時必須提供客戶特定的參數。NET - 動態加載基於URL的應用程序配置

我的目標是部署應用程序的單個實例,同時使應用程序根據URL本身的一部分動態加載適當的品牌方案和Web服務參數。該應用程序將是一個面向公衆的消費者應用程序(由我的組織代表公司客戶託管),因此該URL必須易於記憶(因此不會依賴查詢字符串參數進行訪問),例如https://mysite.com/companyname

意圖是提供具有單一代碼庫和功能集的產品(使產品更容易支持,而不是爲每個公司客戶提供多種不同的部署),同時支持有限度的品牌。我可以使用一小部分手動操作設置(例如爲每個客戶創建一個新的app.config,web.config或虛擬目錄)。

任何人都可以推薦一種建議的方法或最佳實踐來實現這種類型的應用程序?請注意,如果必須解析URL結構,則需要確保在開發環境,QA環境和登臺環境中可以正確複製結構。

我目前的方法需要將應用程序分別部署到不同的客戶特定環境,並且web.config文件中引用了自定義品牌和Web服務參數作爲「appsettings」鍵,這對每個客戶都是不同的。對於少量部署來說這是可以的,但是會因爲功能升級/錯誤修復推動成千上萬個客戶站點的需要而變得難以實施。謝謝!

+0

想知道您是否考慮過數十家(或數百家)公司訪問單個網站的縮放選項? – oleksii 2012-07-16 13:34:59

+0

您好Oleksii - 是的,該網站託管在一個負載平衡的平臺上,每天處理大約120萬個基於Web服務的請求,每個季度處理大約20億次批量事務(在數據庫上)。使用此應用程序的單個公司客戶在繁忙的一天可能會看到1000到5000個請求,而下降的天數大概是10個請求。如果我可以在單個負載平衡的Web /應用服務器平臺上部署25,50或100個部署之前,需要進行第二次部署代碼,我會非常高興(我主要試圖解決操作部署/版本開銷)。謝謝! – 2012-07-16 13:43:38

回答

1

最簡單的解決方案是在大多數情況下使用動態樣式表。這裏有一個好例子Dynamic CSS for ASP.NET MVC?和一個完整的源示例http://www.codeproject.com/Articles/171695/Dynamic-CSS-using-Razor-Engine

其餘的細節。你需要從url(或者cookie - 用於在dev/qa中測試它)中解析公司標識符。您需要從存儲,數據庫或配置文件中提取特定於客戶的值,無論哪種方式適合您。一個不相關的事情要考慮。 https://mysite.com/companyname。如果公司更改他們的名字怎麼辦?您可能需要一個用戶友好的外觀,但祕密的技術網址,如https://mysite.com/companyname/590。您可以顯示用戶友好的名稱,但在代碼中忽略它,並使用公司標識。那麼如果公司更改名稱,沒有biggie - https://mysite.com/somethingElse/590

+0

這非常有幫助!我會試試看,並跟進它的結果。你會建議改變MVC路線結構本身以容納公司名稱/公司ID嗎?謝謝! – 2012-07-16 14:36:27

+0

看看如何stackoverflow它:) http://stackoverflow.com/questions/11505451/net-dynamically-loading-app-configurations-based-on-url。 11505451看起來像問題區域的ID,它拉起了客戶友好的網絡動態加載應用程序配置基於URL。這取決於你首先放置哪一個,ID首先可能更容易。它可能更加用戶友好,但小企業可能不會得到它,並希望他們的名字第一 – 2012-07-16 17:13:54

+0

完美!我最終爲我的MVC路由添加了「companyid」和「companyname」參數,所以現在我有https://mysite.com/companyname/companyid。如果公司ID沒有提供,我根據名稱查找它,然後所有其他操作使用該ID。我最終爲每個客戶端創建了一個文件夾結構,因此該站點有一個客戶端/公司ID /文件夾。該文件夾包含特定於客戶端的樣式信息和圖像資源,以及特定於客戶端的Web服務參數的配置文件。像魅力一樣工作,感謝您的幫助! – 2012-07-17 12:59:52

0

實現此目的的一種方法是爲每個客戶創建一個文件夾的目錄結構。然後在每個文件夾中都有自己的客戶特定文件,例如css,模板,品牌等。 您也可以在應用程序啓動時應用共享/公用文件夾,並在所有客戶之間共享。

然後你需要從你的URL中提取的唯一東西是客戶端的名字(如果可能的話)。這將決定加載和應用哪個文件夾及其內容。

相關問題