Chúng tôi thấy ngoại lệ này xảy ra trong khối mã sau trong ngữ cảnh ASP.NET đang chạy trên máy chủ IIS 7.Ngoại lệ khi thêm mục nhập từ điển
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)
Đây là mã mà các ngoại lệ được xảy ra trong:
[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;
}
}
Các Monitor.TryEnter nên ngăn ngừa nhiều chủ đề từ khi vào khối cùng một lúc, và mã được kiểm tra từ điển để xác minh rằng nó không chứa khóa đang được thêm vào.
Bất kỳ ý tưởng nào về điều này có thể xảy ra như thế nào?
+1, cho câu hỏi giải thích cách tìm từ khóa trùng lặp trong Từ điển. –