나는 푸른 Active Directory에서 150 사용자를 가지고 있고 그들에게 이런 식으로 받고 있어요 (아마도 교착 상태) :푸른 Active Directory는 모든 사용자를 얻을 -
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 웹 응용 프로그램에 배포하고 GetUsersAAD() 메서드를 호출하는 서비스를 실행 한 후 작동하지 않으면 http 요청이 멈추고 몇 분 후에 500 오류가 발생합니다. 타임 아웃.
이것은 AspNet MVC의 WebApi2 프로젝트입니다.
저는 정말 감사드립니다. 감사합니다. 감사합니다.
Azure AD에서 1 명의 사용자 만 얻으면 어떻게 되나요? – stuartd
http 트래픽을 볼 수 있어야하고 응답에서 더 명확한 오류 메시지를 얻을 수 있어야합니다. –
@stuartd - 예 (최대 또는 100 명)가 CurrentPage 메서드를 사용하면 잘 작동합니다. 더 이상 필요하지 않으면 GetNextPageAsync()를 사용할 필요가 없습니다. –