加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 登录后对Membership.GetAllUsers()的例外情况:“项

发布时间:2020-12-15 19:58:30 所属栏目:asp.Net 来源:网络整理
导读:我有两个共享会员提供商的网站.其中一个是ASP Playground站点,另一个是安装了ASP Playground站点集成包的站点.我们称他们为ASPPG网站和SIP网站. 我在SIP站点上运行Membership.GetAllUsers()时有时会出错. SIP拒绝此方法,因此它不是标准的ASP.NET版本. 它有时
我有两个共享会员提供商的网站.其中一个是ASP Playground站点,另一个是安装了ASP Playground站点集成包的站点.我们称他们为ASPPG网站和SIP网站.

我在SIP站点上运行Membership.GetAllUsers()时有时会出错.
SIP拒绝此方法,因此它不是标准的ASP.NET版本.

它有时只会发生.我注意到只有在其中一个成员发生某种变化时才会发生这种情况.然后它必须重新创建在调用Membership.GetAllUsers()时存储所有用户的哈希表,这就像这种娱乐在某种程度上出错了.

除了我粘贴在“administratoren”下面的例外,登录的用户名已经改变了一些信息.

通过更新web.config强制网站卸载没有帮助.
它无助于重新启动IIS或完全重新启动服务器.
异常出现后,每次调用Membership.GetAllUsers()时都会一直显示.突然之间,异常消失,并且再次可以登录并运行Membership.GetAllUsers(),没有任何异常.
它几乎看起来像错误在数据库中,并且修复错误的方法是加载ASPPG站点的任何页面.然后错误在SIP站点上得到修复.

导致异常的原因是什么?如何阻止它?

完整的例外是这样的:

Server Error in ‘/’ Application.
Item has already been added. Key in dictionary: ‘administratoren’ Key being added: ‘administratoren’
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.ArgumentException: Item has already been added. Key in dictionary: ‘administratoren’ Key being added: ‘administratoren’

Source Error:

Linje 116: MembershipUserCollection allUsers;
Linje 117: lock (objLock) {
Linje 118: allUsers = Membership.GetAllUsers();
Linje 119: }
Linje 120:

Source File: [WebsiteLocation]App_CodeMemberInfo.cs Line: 118

Stack Trace: (Please not that the line numbers of MemberInfo.cs in this stacktrace can be a bit off.

[ArgumentException: Item has already been added. Key in dictionary: ‘administratoren’ Key being added: ‘administratoren’]
System.Collections.Hashtable.Insert(Object key,Object nvalue,Boolean add) +7484392
System.Collections.Hashtable.Add(Object key,Object value) +11
System.Web.Security.MembershipUserCollection.Add(MembershipUser user) +129
ASPPG.MembershipProviders.ASPPGSqlMembershipProvider.CreateMembershipUserCollectionFromDataView(DataView dv) in H:My DocumentVisual Studio 2008ProjectsforumuMembershipProvidersASPPGSqlMembershipProvider.vb:656
ASPPG.MembershipProviders.ASPPGSqlMembershipProvider.GetAllUsers(Int32 pageIndex,Int32 pageSize,Int32& totalRecords) in H:My DocumentVisual Studio 2008ProjectsforumuMembershipProvidersASPPGSqlMembershipProvider.vb:360
System.Web.Security.Membership.GetAllUsers(Int32 pageIndex,Int32& totalRecords) +65
System.Web.Security.Membership.GetAllUsers() +26
MemberInfo.GetAllMembers() in d:FaellesSVN-exportsDFF-umbracoApp_CodeMemberInfo.cs:71
usercontrols_GetMemberTopList.LoadTopMembers() in d:FaellesSVN-exportsDFF-umbracousercontrolsGetMemberTopList.ascx.cs:16
usercontrols_GetMemberTopList.Page_Load(Object sender,EventArgs e) in d:FaellesSVN-exportsDFF-umbracousercontrolsGetMemberTopList.ascx.cs:11
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Control.LoadRecursive() +141
System.Web.UI.Control.LoadRecursive() +141
System.Web.UI.Control.LoadRecursive() +141
System.Web.UI.Control.LoadRecursive() +141
System.Web.UI.Control.LoadRecursive() +141
System.Web.UI.Control.LoadRecursive() +141
System.Web.UI.Control.LoadRecursive() +141
System.Web.UI.Control.LoadRecursive() +141
System.Web.UI.Control.LoadRecursive() +141
System.Web.UI.Control.LoadRecursive() +141
System.Web.UI.Control.LoadRecursive() +141
System.Web.UI.Control.LoadRecursive() +141
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) +627

Version Information: Microsoft .NET Framework Version:2.0.50727.3603; ASP.NET Version:2.0.50727.3618

MemberInfo.cs的内容如下:

public class MemberInfo {

    public string Username { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public string Fullname { get; set; }
    public string AddressPrimary { get; set; }
    public string AddressSecondary { get; set; }
    public string Zip { get; set; }
    public string Country { get; set; }
    public string HomepageUrl { get; set; }
    public string Id { get; set; }
    public string MemberNo { get; set; }
    public Boolean IsApproved { get; set; }
    public string Email { get; set; }
    public Boolean IsNotMember { get; set; }
    public Boolean IsUpdated { get; set; }
    public Boolean HasReceivedWelcomeMail { get; set; }
    public int RandomNumber { get; set; }
    public int MemberType { get; set; }

    public MemberInfo() { 

    }

    public MemberInfo(string _username,string _id) {
        Username = _username;

        MembershipUser userRequested = Membership.GetUser(Username);

        ProfileBase profile = ProfileBase.Create(Username);

        IsApproved = userRequested.IsApproved;

        FirstName = profile.GetPropertyValue("Firstname").ToString();
        MiddleName = profile.GetPropertyValue("Middlename").ToString();
        LastName = profile.GetPropertyValue("Lastname").ToString();
        AddressPrimary = profile.GetPropertyValue("AddressPrimary").ToString();
        AddressSecondary = profile.GetPropertyValue("AddressSecondary").ToString();
        Zip = profile.GetPropertyValue("Zip").ToString();
        Country = profile.GetPropertyValue("Country").ToString();
        HomepageUrl = profile.GetPropertyValue("HomepageUrl").ToString();
        HasReceivedWelcomeMail = Boolean.Parse(profile.GetPropertyValue("WelcomeMailSent").ToString());

        if (FirstName.Length > 2) {
            string strFullName = FirstName + " " + MiddleName + " " + LastName;
            Fullname = strFullName.Replace("  "," ");
        }
        else {
            Fullname = Username;
        }

        MemberNo = profile.GetPropertyValue("MemberNo").ToString();
        IsNotMember = Boolean.Parse(profile.GetPropertyValue("NotMember").ToString());
        Email = userRequested.Email;
        Id = _id;

        if (profile.GetPropertyValue("Description").ToString() != "") {
            IsUpdated = true;
        }
        else {

            if (umbraco.library.GetXmlNodeById("1352").Current.SelectSingleNode("node [@nodeName='" + Username + "']/node") == null) {
                IsUpdated = false;
            }
            else {
                IsUpdated = true;
            }

        }
        RandomNumber = ss.NumberStuff.GenerateRandomNumber(0,10000000);

        MemberType = 1;

        if (IsApproved == false && HasReceivedWelcomeMail == false) { // Not yet approved
            MemberType = 1;
        }

        if (IsApproved == false && HasReceivedWelcomeMail == true) { // Deleted
            MemberType = 2;
        }

        if (IsApproved == true && IsNotMember == false) { // Members
            MemberType = 3;
        }

        if (IsApproved == true && IsNotMember == true) { // Administrators
            MemberType = 4;
        }

    }

    private static object objLock = new object();

    public List<MemberInfo> GetAllMembers() {
        return GetAllMembers(false);
    }

    public List<MemberInfo> GetAllMembers(Boolean bIncludeAdministrators) {

        MembershipUserCollection allUsers;
        lock (objLock) {
            allUsers = Membership.GetAllUsers();
        }

        List<MemberInfo> memberInfoList = new List<MemberInfo>();

        foreach (MembershipUser userCurrent in allUsers) {
            MemberInfo mInfo = new MemberInfo(userCurrent.UserName,userCurrent.ProviderUserKey.ToString());
            if (mInfo.Id == "0") {
                continue;
            }

            if (mInfo.IsNotMember == true && bIncludeAdministrators == false) {
                continue;
            }

            memberInfoList.Add(mInfo);
        }

        return memberInfoList;

    }

    public static String GetMemberTypeName(int intMemberType) {

        switch (intMemberType) {

            case 1: {
                return "Endnu ikke godkendt";
            }

            case 2: {
                return "Slettet";
            }

            case 3: {
                return "Medlem";
            }

            case 4: {
                return "Administrator";
            }

            default: {
                return "";
            }
        }

    }

}

提前致谢 :)

编辑:添加了MemberInfo.cs的新来源并更新了我收到的错误消息.
请注意,堆栈跟踪仍然是旧的,因此它所指的行号可能有点偏差.

编辑:有关错误的大量信息已更改.添加了新的MemberInfo.cs.从登录方法中删除了代码,因为我现在知道这不是错误的原因.

解决方法

[ArgumentException: Item has already been added. Key in dictionary: 'administratoren' Key being added: 'administratoren']

看来你在allUsers中有重复的用户名(var allUsers = …),但是你刚刚定义了变量,所以没有机会在其中添加另一个’administratoren’并在同一行获取异常,除非发生了某些事情.同一行.由于成员资格不允许重复的KEY(用户名),因此问题在于在单行代码结束时检索用户后发生的转换:

Line 71: var allUsers = from u in Membership.GetAllUsers().Cast() select u;

改成:

Line 71: var allUsers = from u in Membership.GetAllUsers().Cast<MembershipUser>() select u;

在一行代码中使用var或编写许多语句也不是好主意.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读