Внешние файлы конфигурации (configSource), удаленные из памяти (MVC, C#, ASP.net)

У нас периодически возникает проблема, когда файлы конфигурации или, точнее, подмножество значений в этих данных теряются в эфире. По правде говоря, я не понимаю, как к этому подойти, потому что я не уверен, проблема ли это в коде, конфигурации, машине или 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 «Найти использование» вызывает только этот единственный вызов. Никакая другая точка в программе не касается этих значений.

Проблема

Периодически будет происходить то, что выпадающие списки на нашей веб-странице внезапно будут иметь только одно значение (например, 2500 в поле цены). Обратите внимание, что он не полностью пуст, но обычно большинство значений исчезло. У нас были похожие проблемы с отбрасыванием внешних конфигураций (почти полностью), и это повсеместно вызывало ошибки с нулевыми ссылками. например он все еще ищет конфиг, который должен быть там, но он стерт с лица земли.

Остановка веб-сайта, остановка пула приложений, а затем повторный запуск всего решает проблему. Это заставило меня сначала подумать, что это может быть что-то с использованием памяти, и внешние конфигурации - это первое, что он отбрасывает, но я действительно не уверен на данный момент.

Еще одно замечание. У нас есть перезапуск пула приложений в ранние утренние часы каждый день.

Любая помощь в этом очень ценится, даже если это просто толчок в правильном направлении. Как я уже сказал, я не могу найти информацию о том, с чего начать, будь то настройки IIS или код. :)


person MindingData    schedule 29.10.2012    source источник


Ответы (1)


У меня есть предположение, что я могу ошибаться.
Строка

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

В основном ленивый перечислитель по XmlNodeList.
Из документов MSDN:

Объект XmlNodeList, возвращаемый этим методом, будет действительным, пока базовый документ остается неизменным. Если базовый документ изменится, могут быть возвращены неожиданные результаты (никаких исключений не будет).

Есть ли шанс, что the underlying document changes?
Останутся ли проблемы, если вы поместите значения, скажем, в массив? Нравится ..Select().ToArray();

person Leonid    schedule 29.10.2012