Външни конфигурационни файлове (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