【问题标题】:Single Website Directory / Multiple IIS Websites (Multiple web.config files)单个网站目录/多个 IIS 网站(多个 web.config 文件)
【发布时间】:2015-07-20 14:57:26
【问题描述】:

我继承了一些非常古老的 asp 代码。因此,我需要解决一个设计问题,如下所述。

我有 3 个客户... Foo、Bar 和 Baz。

我有一个文件夹叫...

c:\WebSites\Site.v15.07

我在 IIS 中有 3 个网站定义为...

网站.Foo

网站栏

网站.Baz

它们都指向15.07目录。

还有 3 个其他文件夹称为...

c:\WebConfigurations\Foo

c:\WebConfigurations\Bar

c:\WebConfigurations\Baz

...它们都包含三个站点中每个站点的客户特定文件。上传图片等

3 位客户中的每一位都有自己的网站所在的数据库。

我需要为 3 个站点中的每一个设置(理想情况下,使用 web.config)连接字符串。

如果我把它放在网站根目录的 web.config 中,它们将共享相同的设置。

有没有办法在“网站”级别在 IIS 中添加 settings/web.config,以便可以对每个网站进行不同的设置?

【问题讨论】:

标签: asp.net iis


【解决方案1】:

只把通用配置放在应用文件夹Web.config中。

首次加载应用程序时,以编程方式从相应文件夹加载特定于客户端的配置文件,并以编程方式将信息合并到内存中的配置信息中。

以编程方式在内存中编辑配置信息的示例:

Change a web.config programmatically with C# (.NET)

var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
section.ConnectionStrings["MyConnectionString"].ConnectionString = "Data Source=...";

在您的情况下,您需要对WebConfigurationManager.OpenWebConfiguration 进行两次调用,一次打开应用程序配置,一次加载客户端配置。然后将数据从客户端配置复制到内存应用程序配置(不要根据引用的问题调用Save()——这是一个不同的用例)。

【讨论】:

  • 我已经尝试过了,但似乎没有调用 save(),使用 ConfigurationManager 不会使用内存中的设置。这是正确的吗?
  • @Beakie, Save() 会将更改保存到磁盘。如果您只想影响内存中的设置,则不需要调用它。在我自己的使用中,我在需要时从外部源调整设置 sin 内存,但从未将更改持久化到磁盘。
  • 但是在我处理 WebConfigurationManager 变量的那一刻,设置就被遗忘了。 ConfigurationManager 也不反映通过 WebConfigurationManager 所做的更改。我做错了吗?
  • @Beakie,我没有听懂你在说什么。 WebConfigurationManager 是静态使用的,所以它永远不会被丢弃。我希望从WebConfigurationManagerConfigurationManager 独立打开配置会将配置的两个单独副本加载到内存中。对其中一项的更改不会反映在另一项中。
猜你喜欢
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
相关资源
最近更新 更多