外部配置文件(configSource)从内存中删除(MVC,C#,ASP.net)

时间:2012-10-29 01:38:07

标签: c# asp.net asp.net-mvc configuration web-config

我们遇到一个间歇性的问题,即配置文件,或者更具体地说,该数据中的值子集会丢失到以太网中。说实话,我不知道如何处理它,因为我不确定它是代码,配置,机器还是IIS问题。让你知道发生了什么......

我们正在做什么

我们有一个包含“price”下拉值的配置文件:

<searchForm>
<priceLowerBoundValues>
<priceLowerBoundValue>2500</priceLowerBoundValue>
<priceLowerBoundValue>5000</priceLowerBoundValue>
....
</priceLowerBoundValues>
....
</searchForm>

这些包含在名为searchForm.config的文件中。在web.config中,它们被引用为外部文件,如此。

<searchForm configSource="Config\searchForm.config" />

我们有一个继承自IConfigurationSectionHandler的自定义配置处理程序。这里的代码的要点是获取值。

var priceLowerBoundValueXPath = "/searchForm/priceLowerBoundValues/priceLowerBoundValue/text()";
searchFormLookups.PriceLowerBoundValues = section.SelectNodes(priceLowerBoundValueXPath).Cast<XmlNode>().Select(x => int.Parse(x.Value));

然后我们引用它的唯一位置是构建视图模型的选择列表。它看起来有点像这样:

SearchFormConfiguration.PriceLowerBoundValues.ToSelectList((parameters.PriceLowerBound != null) ? parameters.PriceLowerBound.Value : 0)

列表中没有对列表进行任何修改,使用resharper“查找用法”只会调出此单个调用。程序中没有其他任何一点可以触及这些值。

问题

间歇性地发生的是我们网页上的下拉框突然只有一个值(例如价格框中的2500)。请注意它不是完全空的,但通常大多数值都消失了。我们有类似的外部配置问题(几乎完全)丢失,并导致整个地方出现空引用错误。例如它仍然在寻找应该存在的配置,但它已经从地球上消失了。

停止网站,停止应用程序池,然后重新启动所有内容可以解决问题。这让我最初认为它可能是内存使用的东西,而外部配置是它丢弃的第一件事,但我现在真的不确定。

另一件需要注意的事情。我们每天凌晨都会重新启动应用池。

对此的任何帮助都非常感谢,即使它只是向正确的方向推进。正如我所说的,我找不到任何关于从哪里开始的信息,无论是IIS设置还是代码。 :)

1 个答案:

答案 0 :(得分:1)

我知道我的错误。
线

x.PriceLowerBoundValues = section.SelectNodes(...).Cast<XmlNode>().Select(...);

基本上是XmlNodeList上的惰性枚举器 来自MSDN文档:

  

此方法返回的XmlNodeList对象有效   基础文件保持不变。如果是基础文件   更改,可能会返回意外结果(没有例外   抛出)。

the underlying document changes是否有机会? 如果你把数值放到数组中会有问题吗?与..Select().ToArray();

一样
相关问题