1

我有这个简单的代码,它遍历 Azman 中的所有应用程序及其所有角色。当我没有分配给角色的用户时,它工作得很好。但是在我分配用户的那一刻(其中 2 个角色有 7000 个用户),该应用程序在 foreach(_azApp.Roles 中的 IAzRole)代码中挂起......基本上在您访问 Roles 集合的那一刻,它就挂起并且需要大约 40 分钟来出它。这是完全不能接受的。谁能指出我的解决方案?我想要的只是角色分配名称列表,为什么角色分配会减慢速度……?

PS:我所有的用户都在 ADAM 中,Azman 商店也在 ADAM 中。我也尝试过遍历 IAzTasks (roledefinition=1),但这也很慢。

    public override string[] GetAllRoles()
    {
        List<string> rolesList = new List<string>();
        foreach (IAzApplication2 _azApp in AZManStore.Applications)
        {
            foreach (IAzRole role in _azApp.Roles)
            {
                //Weird that Roles are retrieved using tasks collection
                if (!rolesList.Exists(delegate(string x) { return x == role.Name; }))
                    rolesList.Add(role.Name);
            }
        }

        return rolesList.ToArray();
    }
4

1 回答 1

1

我自己回答这个问题。我终于发现,即使 Azman 是基于文件的,也需要将句柄缓存到 Azman 以使其快速。我在我的自定义 AzmanProvider 中添加了如下所示的属性来完成此操作。这将角色分配时间缩短到了 2 秒!!

    public AzAuthorizationStoreClass AZManStore
    {
        get
        {
            if (_azManStore == null)
            {                    
                _azManStore = new AzAuthorizationStoreClass();
                _azManStore.Initialize(0, this.ConnectionStringName, null);
            }
            return _azManStore;
        }
    }
于 2012-02-16T17:04:25.703 回答