我们遇到了一个间歇性问题,即配置文件,或者更具体地说,该数据中的值子集丢失到以太中。说实话,我不知道如何处理它,因为我不确定它是代码、配置、机器还是 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 设置还是代码。:)