2014-01-09 38 views
0

動態設置的Web.Config我有內置的ASP.NET MVC的Web應用程序將幾個客戶端使用。每個客戶端都有自己的數據庫來存儲信息,但每個實例都具有相同的功能。我正在使用此問題的提示/回答How can I host multiple websites in IIS 7 and use the same MVC application for all them?合併到一個應用程序文件夾以便於維護。在應用程序啓動的MVC

現在,我設置每個客戶在自己的文件夾,每個都有自己的web.config文件。有幾個appConfig設置以及該客戶端獨有的connectionStrings。

我想要做的是有一個包含MVC項目的應用程序文件夾,但應用程序然後動態拉動正確的web.config文件夾(存儲在另一個文件夾中)。我將選擇可能基於web.config在主機上設置(即www.domain.com加載domain.web.config文件。)

我想這個更新ConfigurationManagement對象的行爲。我已經看過幾篇關於如何加載配置文件的文章(大多數是關於app.config的桌面應用程序),但沒有看到如何使它成爲ASP.NET MVC和web.config的半全局變化或獨特特性。

我該如何做到這一點?

回答

0

您要做的就是所謂的多租戶。這是一項相當複雜的任務。

你不能真正發揮有關與web.config替代和一個請求給一個文件和另一個請求給另一個配置。如果來自不同租戶的2個請求會在同一時間完成?

在我們爲我們的應用程序轉換爲多租戶的時刻,這是非常複雜的任務,所以不能真正在一個答案的SO描述。

你可以看看這篇文章http://www.scribd.com/doc/140181293/setting-up-an-mvc4-multi-tenant-site-v1-1 另外,如果你是谷歌的「多租戶MVC」,你會得到很多文章。

我們的多租戶的基本原則是這樣的:DI容器知道不同的租戶,並且知道tenant1.site.com的請求應該使用配置集1並且對於請求tenant2.site.com應該使用配置集2。 除了DI容器,其他組件都不知道租戶。 DI容器編排配置。連接字符串坐在配置對象中,這些對象在被創建之前被賦予EF上下文...有點複雜。

如果你的情況很簡單,你不使用緩存,替換連接字符串,我會將它們保存在web.config之外,並根據租戶請求提供它們。沒有複雜的DI設置,你可能就會離開。

0

維護多個配置文件的開銷,如果你使用外部配置文件來隔離連接字符串所特有的客戶留下了大部分的配置文件不變的是小的。

<?xml version='1.0' encoding='utf-8'?> 
<configuration> 
<connectionStrings configSource="connections.config"/> 
</configuration> 

有關內部文件在運行時看看 http://msdn.microsoft.com/en-us/library/ms254494(v=vs.110).aspx

解決的配置信息對於應用程序設置更多的選擇看Moving Settings to another config file