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