2016-09-21 57 views
0

我正在編寫一個需要在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 –

回答

1

不要直接返回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

相關問題