2
私はAzureのActive Directory内の150人のユーザーがいると私は彼らにこのようになっています(おそらくデッドロック):のAzure 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 Web AppにデプロイしてGetUsersAAD()メソッドを呼び出すサービスを実行すると動作しません.HTTP要求がフリーズし、数分後に500エラーが発生します。タイムアウト。
これは、AspNet MVC上のWebApi2プロジェクトです。
私は本当にありがとうございます。ありがとうございます。
Azure ADから1人のユーザーしかいない場合はどうなりますか? – stuartd
httpトラフィックを監視し、応答からより明確なエラーメッセージを得ることができるはずです。 –
@stuartd - はい、100人以上のユーザーが、CurrentPageメソッドを使用するだけでうまくいきます。それ以上のものを必要としない場合は、GetNextPageAsync()は必要ありません。 –