जोड़ने हम एक ASP.NET संदर्भ में जो एक आईआईएस 7 सर्वर पर चल रहा है में कोड की निम्न ब्लॉक में इस अपवाद होते हैं देख रहे हैं।अपवाद जब शब्दकोश प्रविष्टि
1) Exception Information
*********************************************
Exception Type: System.Exception
Message: Exception Caught in Application_Error event
Error in: InitializationStatus.aspx
Error Message:An item with the same key has already been added.
Stack Trace: at
System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
at CredentialsSession.GetXmlSerializer(Type serializerType)
इस कोड है कि अपवाद में उत्पन्न किया जाता है:
[Serializable()]
public class CredentialsSession
{
private static Dictionary<string, System.Xml.Serialization.XmlSerializer> localSerializers = new Dictionary<string, XmlSerializer>();
private System.Xml.Serialization.XmlSerializer GetXmlSerializer(Type serializerType)
{
string sessionObjectName = serializerType.ToString() + ".Serializer";
if (Monitor.TryEnter(this))
{
try
{
if (!localSerializers.ContainsKey(sessionObjectName))
{
localSerializers.Add(sessionObjectName, CreateSerializer(serializerType));
}
}
finally
{
Monitor.Exit(this);
}
}
return localSerializers[sessionObjectName];
}
private System.Xml.Serialization.XmlSerializer CreateSerializer(Type serializerType)
{
XmlAttributes xmlAttributes = GetXmlOverrides();
XmlAttributeOverrides xmlOverrides = new XmlAttributeOverrides();
xmlOverrides.Add(typeof(ElementBase), "Elements", xmlAttributes);
System.Xml.Serialization.XmlSerializer serializer =
new System.Xml.Serialization.XmlSerializer(serializerType, xmlOverrides);
return serializer;
}
}
Monitor.TryEnter एक साथ ब्लॉक में प्रवेश करने से एक से अधिक थ्रेड को रोकने होना चाहिए, और कोड के लिए शब्दकोश जाँच कर रहा है सत्यापित करें कि इसमें कुंजी शामिल नहीं है।
यह कैसे हो सकता है पर कोई विचार?
+1, प्रश्न के लिए जो बताता है कि शब्दकोश में डुप्लिकेट कैसे ढूंढें। –