【发布时间】:2016-09-27 17:08:20
【问题描述】:
我在 Azure Active Directory 中有 150 个用户,我是这样获取他们的:
public List<Generic.UserAAD> GetUsersAAD()
{
ActiveDirectoryClient activeDirectoryClient = AuthenticationHelper.GetActiveDirectoryClientAsApplication();
IPagedCollection<IUser> usersA = activeDirectoryClient.Users.ExecuteAsync().Result;
List<IUser> queryUsers = new List<IUser>();
List<Generic.UserAAD> listUsers = new List<Generic.UserAAD>();
do
{
List<IUser> queryUsersList = usersA.CurrentPage.ToList();
queryUsers.AddRange(queryUsersList);
usersA = usersA.MorePagesAvailable ? usersA = usersA.GetNextPageAsync().Result : null;
} while (usersA != null);
if (queryUsers.Count > 0)
{
listUsers = queryUsers.Select(u => new Generic.UserAAD { DName = u.DisplayName, UName= u.UserPrincipalName }).ToList();
}
return listUsers;
}
这是 AuthenticationHelper 类:
public class AuthenticationHelper
{
public static async Task<string> AcquireTokenAsyncForApplication()
{
return await GetTokenForApplication().ConfigureAwait(false);
}
public static ActiveDirectoryClient GetActiveDirectoryClientAsApplication()
{
Uri servicePointUri = new Uri(Constantes.graphUrl);
Uri serviceRoot = new Uri(servicePointUri, Constantes.tenantId);
ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot,
async () => await AcquireTokenAsyncForApplication().ConfigureAwait(false));
return activeDirectoryClient;
}
public static async Task<string> GetTokenForApplication()
{
AuthenticationContext authContext = new AuthenticationContext(Constantes.authority, false);
ClientCredential clientCred = new ClientCredential(Constantes.clientId, Constantes.appKey);
AuthenticationResult authenticationResult = authContext.AcquireTokenAsync(Constantes.graphUrl,
clientCred).Result;
var token = authenticationResult.AccessToken;
return token;
}
}
所以问题是它在本地运行完美,但是在 Azure Web App 上部署它并执行调用 GetUsersAAD() 方法的服务后,它不起作用,http 请求冻结,几分钟后我收到 500 错误超时。
这是一个基于 AspNet MVC 的 WebApi2 项目。
所以我真的很感激你能给我的任何帮助,谢谢。
【问题讨论】:
-
如果您只从 Azure AD 获得 1 个用户怎么办?
-
您应该能够看到 http 流量并从响应中获得更清晰的错误消息。
-
@stuartd - 是的,1 或最多 100 个用户仅使用 CurrentPage 方法就可以很好地工作,如果我不想要更多,则不需要 GetNextPageAsync()。
-
@CBauer,是的,细节是超时。
标签: c# asp.net-mvc-4 azure asp.net-web-api azure-active-directory