【问题标题】:External Config Files (configSource) Dropped From Memory (MVC, C#, ASP.net)外部配置文件 (configSource) 从内存中删除(MVC、C#、ASP.net)
【发布时间】:2012-10-18 08:56:01
【问题描述】:

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

我们在做什么

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

<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 “Find Usages” 只会调用这个单一的调用。程序中没有其他点触及这些值。

问题

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

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

还有一点需要注意。我们每天凌晨都会重启应用程序池。

非常感谢您对此提供的任何帮助,即使这只是朝着正确方向迈出的一步。正如我所说,我找不到任何关于从哪里开始的信息,无论是 IIS 设置还是代码。 :)

【问题讨论】:

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


    【解决方案1】:

    我知道我可能会做错什么。
    线

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

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

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

    有没有可能the underlying document changes?
    如果将值放入数组中,还会有问题吗?赞..Select().ToArray();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      相关资源
      最近更新 更多