DotNetNuke.Entities.Users.UserInfo.get_Social()中的DotNetNuke异常

时间:2014-11-12 10:57:37

标签: dotnetnuke argumentexception

刚刚开始获得" System.ArgumentException:已经添加了具有相同密钥的项目。"使用以下堆栈跟踪。

System.ArgumentException: An item with the same key has already been added
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at DotNetNuke.Entities.Users.UserInfo.get_Social()
   at DotNetNuke.Entities.Users.UserInfo.get_Roles()
   at DotNetNuke.Entities.Users.UserInfo.IsInRole(String role)
   at DotNetNuke.HttpModules.Membership.MembershipModule.AuthenticateRequest(HttpContextBase context, Boolean allowUnknownExtensinons)
   at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

我所做的只是安装和更新Extensions并回收应用程序池。它出现在不同的页面上,我有一个自定义模块,上面有一个搜索表单和一些DevExpress组件。

DNN版本是7.3.2

亲切的问候

更新 似乎是DNN https://dnntracker.atlassian.net/browse/DNN-6990

中的错误

1 个答案:

答案 0 :(得分:0)

我认为你看到一个竞争条件,其中两个线程试图访问UserInfoSocial属性:

public UserSocial Social
{
    get
    {
        if (this._social == null)
        {
            this._social = new Dictionary<int, UserSocial>();
        }
        if (!this._social.ContainsKey(this.PortalID))
        {
            this._social.Add(this.PortalID, new UserSocial(this));
        }
        return this._social[this.PortalID];
    }
}

发生错误的唯一方法是两个线程检查门户网站ID密钥是否存在,并且两个线程都试图同时将密钥添加到字典中。

Social属性在许多地方被调用(根据IL7在v7.2.2中有14个),因此很难确定问题可能来自何处;如果您注意到只有自定义模块出现问题,您可能需要调查可能调用此代码的方法