我在代碼中有一個非常奇怪的問題,我不會指望它會失敗。它基於AspDotNetStoreFront是一個擁有一定流量但不是那麼龐大的網站。嘗試從閱讀器讀取數據庫字段時,網站會間歇性地崩潰。這發生在網站上的各個地方。這種代碼的一個例子如下:object pValue = rs [「PropertyValueString」];Intermittent System.IndexOutOfRangeException當從IDataReader中讀取一個字段時
private Dictionary<string, object> GetPropertValuePairs(string userName)
{
string query = string.Format("select PropertyName, PropertyValueString from dbo.profile with(nolock) where CustomerGUID = {0} and StoreID = {1}", DB.SQuote(userName),AppLogic.StoreID());
Dictionary<string, object> propertyValues = new Dictionary<string, object>();
using (SqlConnection conn = new SqlConnection(DB.GetDBConn()))
{
conn.Open();
using (IDataReader rs = DB.GetRS(query, conn))
{
while (rs.Read())
{
string pName = DB.RSField(rs, "PropertyName");
object pValue = rs["PropertyValueString"];
if (propertyValues.ContainsKey(pName) == false)
{
propertyValues.Add(pName, pValue);
}
}
rs.Close();
rs.Dispose();
}
conn.Close();
conn.Dispose();
}
return propertyValues;
}
這是標準使用的SqlClient的,我看不出什麼毛病。錯誤的堆棧跟蹤是這樣的:在System.Data.ProviderBase.FieldNameLookup.GetOrdinal(字符串字段名)
System.IndexOutOfRangeException在System.Data.SqlClient.SqlDataReader.GetOrdinal(字符串名稱) 在System.Data。 SqlClient.SqlDataReader.get_Item(字符串名稱) 在AspDotNetStorefront.ASPDNSFProfileProvider.GetPropertValuePairs(用戶名字符串) 在AspDotNetStorefront.ASPDNSFProfileProvider.GetPropertyValues(SettingsContext背景下,SettingsPropertyCollection settingsProperties) 在System.Configuration.SettingsBase.GetPropertiesFromProvider(SettingsProvider提供商) 在系統.Configuration.SettingsBase.GetPropertyValueByName(String propertyName) 在System.Web.Profile的System.Web.Profile.ProfileBase.get_Item(String propertyName) 上的System.Web.Profile.ProfileBase.GetInternal(String propertyName) 處的System.Configuration.SettingsBase.get_Item(String propertyName) 。 ProfileBase.GetPropertyValue(字符串propertyName的) 在AspDotNetStorefront.SkinBase.OnPreInit(EventArgs的) 在System.Web.UI.Page.PerformPreInit() 在System.Web.UI.Page.ProcessRequestMain(布爾includeStagesBeforeAsyncPoint,布爾includeStagesAfterAsyncPoint)
當站點崩潰時,需要重新啓動IIS才能重新啓動它。它在Windows Server 2008上,.NET 3.5和SQL 2008都是最新的。該機器爲64位,SQL Server啓用了32位模式,以及使用「經典流水線模式」的應用程序池。連接字符串是
<add name="PrimaryConnectionString" connectionString="data source=XXXX;database=XXXX;Integrated Security=True;Application Name=XXXX;MultipleActiveResultSets=true" />
任何幫助非常非常感謝!
在這裏看到相同的東西。我們相信*運行32位模式ASP.NET2.0 SP2的64位機器存在某種兼容性問題。如果我們找到解決方案將會更新 – 2011-03-14 20:31:11
我看到同樣的問題,你有沒有找到解決方案? @johnny g,這個問題有點不一致嗎?大衛,這是一個多線程的應用程序? – 2012-06-25 01:35:22
馬克我想,我在下面有你的答案。過去這對我們來說是一個問題。讓我知道你的想法以及我的解決方案是否有用。 – CaptainBli 2012-09-05 21:42:09