var client = ActiveDirectoryClientFactory.GetActiveDirectoryClient(_connector);
client.Context.MergeOption = MergeOption.AppendOnly;
_withOwnedDevices = await client.Users.Expand(d => d.OwnedDevices).ExecuteAsync();
_withMemberOf = await client.Users.Expand(d => d.MemberOf).ExecuteAsync();
运行上面的代码时,我确实得到了OwnedDevices,但是MemberOf一直都是空的。
var client = ActiveDirectoryClientFactory.GetActiveDirectoryClient(_connector);
_withOwners = await client.Devices.Expand(d => d.RegisteredOwners).ExecuteAsync();
_withUsers = await client.Devices.Expand(d => d.RegisteredUsers).ExecuteAsync();
_withMemberOf = await client.Devices.Expand(d => d.MemberOf).ExecuteAsync();
熟悉上面的网络RegisteredOwners和RegisteredUsers,但在MemberOf集合上没有任何内容。
var client = ActiveDirectoryClientFactory.GetActiveDirectoryClient(_connector);
var matches = await client.Users.Where(u => u.Mail == email).Expand(u => u.MemberOf).ExecuteAsync();
这将匹配一个匹配列表,一个,并且MemberOf集合具有结果。在所有情况下查询相同的Active Directory。
问题似乎与特殊MergeOption的需求有关。没有AppendOnly或NoTracking我在使用不同的Expand选项进行两次调用中的第二次时会遇到异常。我对设备执行类似操作,并且根本不需要设置MergeOption,并且上下文合并对象没有问题,因此两个扩展集合都显示在实体上。在用户的情况下,如果您尝试相同的事情,ActiveDirectoryClient会抛出一个"上下文已经在跟踪具有相同资源Uri的不同实体。"在使用设备进行测试时,只有在尝试对MemberOf进行扩展时才会出现问题,可以进行多次调用以扩展其他集合,但是一旦我尝试使用MemberOf,您就会获得跟踪异常。
答案 0 :(得分:0)
我测试了以下代码:
ActiveDirectoryClient client = AuthenticationHelper.GetActiveDirectoryClient();
client.Context.MergeOption = MergeOption.AppendOnly;
var _withMemberOf = await client.Users.Expand(d => d.MemberOf).ExecuteAsync();
上面的代码将返回用户的页面集合。当前页面中的最大用户数为100.每个用户都有一个MemberOf属性,显示用户的组和角色成员资格.Blow是在vs中调试时的屏幕截图:
请检查用户是否通过以下方式成功获得了MemberOf:
var client = ActiveDirectoryClientFactory.GetActiveDirectoryClient(_connector);
var matches = await client.Users.Where(u => u.Mail == email).Expand(u => u.MemberOf).ExecuteAsync();
包含在CurrentPage集合中,您可以使用下面的代码来获取用户的下一页集合来检查:
client.Context.MergeOption = MergeOption.AppendOnly;
IPagedCollection<IUser> pagedCollection = await client.Users.Expand(d => d.MemberOf).ExecuteAsync();
if (pagedCollection != null)
{
do
{
//loop the users and get the memberof information
pagedCollection = await pagedCollection.GetNextPageAsync();
} while (pagedCollection != null);
}