2012-10-29 62 views
0

我們有一個間歇性問題,其中配置文件或更具體的數據子集中的數據迷失在以太網中。真相被告知我不知道如何處理它,因爲我不確定它是代碼,配置,機器還是IIS問題。爲了讓你發生了什麼事的想法....外部配置文件(configSource)從內存中丟失(MVC,C#,ASP.net)

我們正在做的

我們有一個包含一個配置文件「價格」下拉值:

<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)); 

然後,我們引用它的唯一地方就是構建viewmodel的選擇列表。它看起來有點像這樣:

SearchFormConfiguration.PriceLowerBoundValues.ToSelectList((parameters.PriceLowerBound != null) ? parameters.PriceLowerBound.Value : 0) 

沒有做名單不斷修改,並使用ReSharper的「查找用法」只帶來了這一個電話。程序中沒有其他要點觸及這些值。

的問題

什麼會間歇性地發生的是下拉框中我們的網頁上突然有隻有一個值(在價格上盒例如2500)。請注意它並非完全空白,但通常大部分值都已消失。我們有類似的外部配置丟棄(幾乎完全)的問題,並導致整個地方的空引用錯誤。例如它仍然在尋找應該在那裏的配置,但它已經從地球表面上消失了。

停止網站,停止應用程序池,然後再次把所有東西都解決了問題。這使我最初認爲它可能是內存使用情況,而外部配置是它的第一件事,但我現在確實不確定。

另一件要注意的事情。我們每天早上在清晨開始重新啓動應用程序池。

任何幫助,這是非常讚賞,即使它只是一個微調正確的方向。正如我所說,我無法找到從何處開始的任何信息,無論是IIS設置還是代碼。 :)

回答

1

我有一個想法,可能是我錯了什麼。

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

基本上懶惰枚舉過的XmlNodeList。
從MSDN文檔:當 底層文檔保持不變

此方法返回的對象的XmlNodeList將是有效的。如果底層文檔 發生更改,則可能會返回意外的結果(拋出異常將會引發 )。

the underlying document changes有沒有什麼機會?
如果你把數值放到數組中,那麼仍然會有問題嗎?像..Select().ToArray();