MVC应用程序内的Azure ActiveDirectoryClient永远不会返回

问题描述:

我正在编写一个需要在Azure Active Directory中创建用户的MVC应用程序。我已经将创建用户的代码封装在自己的库中,并且它在单元测试中工作正常。但是,当我的MVC控制器中调用相同的代码时,对AddUserAsync的调用永远不会返回。作为一项测试,我改变了我的控制器,以便创建一个新用户而不是创建一个用户。控制器看起来像:MVC应用程序内的Azure ActiveDirectoryClient永远不会返回

public class RegistrationController : BaseController 
    { 
     public ActionResult Index() 
     { 
      AadAccessHelper adHelper = new AadAccessHelper(); 
      var client = adHelper.AdClient; 
      AADUser aadUser = adHelper.GetUserByPrincipalName("[email protected]"); 

      return View(); 
     } 
    } 

和辅助类的东西,得到用户的样子:

private async Task<User> GetUserByUserName(ActiveDirectoryClient adClient, string userName) 
    { 
     var user = await adClient.Users.Where(u => u.UserPrincipalName == userName).ExecuteSingleAsync(); 
     return (User) user; 
    } 

     public AADUser GetUserByPrincipalName(string userName) 
     { 
        Task<User> user = GetUserByUserName(AdClient, userName); 
        user.Wait(new TimeSpan(0, 1, 0)); 
        if (true == user.IsFaulted) 
        { 
           throw user.Exception; 
        } 

        if (null == user.Result) 
        { 
           return null; 
        } 

        return MapUserToAADUser(user.Result); 
     } 

到ExecuteSingleAsync调用只是从来没有返回不管多久,我给它。我错过了什么?

测试过程是运行Chrome中出现的网站(我也用过两个IE,结果相同),我导航到注册页面(为了测试目的,我移动了代码)那就是悲伤开始的时候。

再次说明:代码在单元测试中运行时工作正常。我是否需要使用其他客户端而不是Microsoft.Azure.ActiveDirectory.GraphClient.ActiveDirectoryClient?
当我完成应用程序的目的是注册新用户,并允许指定用户管理应用程序用户(重置密码,更改用户属性,将用户分配给组等)。

我在Visual Studio 2015中,无论最新的东西是从GitHub出来。

任何帮助将不胜感激。

+0

这看起来像一个典型的僵局。看看斯蒂芬·克利里的帖子:http://blog.stephencleary.com/2012/02/async-and-await.html –

不要直接返回AADUser,我们应该使用任务< AADUser>。下面是代码很适合我:

public async Task<AADUser> GetUserByPrincipalName(string userName) 
    { 

     var user = await GetUserByUserName(activeDirectoryClient, userName); 

     return new AADUser() 
     { 
      displayName = user.DisplayName 
     }; 

    } 

控制器:

public async Task<ActionResult> test() 
      { 
      var user = await new AzureADGraphTest.Users().GetUserByPrincipalName("[email protected]"); 

      return View(); 
     } 
+0

yup - 骨头部分错误。我发布这个帖子后,我的一位朋友指出了这一点。谢谢您的帮助。 – Jake