我有这个简单的代码,通过Azman和他们的所有角色的所有应用程序循环。当我没有将用户分配给角色时,它工作得很好。但是当我分配用户时(其中2个角色有7000个用户),应用程序挂在foreach(IAzRole in _azApp.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();
}
我自己回答这个问题。我终于发现,缓存句柄Azman是什么需要使它快速,即使当Azman是基于文件的。我在我的自定义AzmanProvider中添加了如下属性来完成此操作。这将角色分配时间缩短到2秒!!
public AzAuthorizationStoreClass AZManStore
{
get
{
if (_azManStore == null)
{
_azManStore = new AzAuthorizationStoreClass();
_azManStore.Initialize(0, this.ConnectionStringName, null);
}
return _azManStore;
}
}