2015-05-15 4 views
0

я следую примеру отсюда: Get started with Office 365 APIsOffice365 API OutlookServicesClient зависает при получении маркера

Когда мои действия контроллер выполняет, он висит на следующей строке внутри вар «нового OutlookServicesClient»

var authResult = await authContext.AcquireTokenSilentAsync(
    dcr.ServiceResourceId, 
    new ClientCredential(this.configuration.IdaClientID, this.configuration.IdaClientSecret), 
    new UserIdentifier(userObjectId, UserIdentifierType.UniqueId)); 

I не может понять, почему он висит, особенно, поскольку AcquireTokenSilentAsync работает отлично в клиенте обнаружения прямо перед этим вызовом.

Любая помощь очень ценится.

Мой контроллер Действие Метод:

[Authorize] 
public async Task<ActionResult> Index() 
{  
    var contacts = new List<ContactItem>(); 
    var signInUserId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value; 
    var userObjectId = ClaimsPrincipal.Current.FindFirst(ClaimTypesAdditions.ObjectIdentifier).Value; 

    var authContext = new AuthenticationContext(this.configuration.IdaAuthority, new AdalTokenCache(signInUserId)); 

    try 
    { 
     var discClient = new DiscoveryClient(
      new Uri(this.configuration.Office365DiscoveryServiceEndpoint), 
      async() => 
      { 
       var authResult = await authContext.AcquireTokenSilentAsync(
        this.configuration.Office365DiscoveryResourceID, 
        new ClientCredential(this.configuration.IdaClientID, this.configuration.IdaClientSecret), 
        new UserIdentifier(userObjectId, UserIdentifierType.UniqueId)); 

       return authResult.AccessToken; 
      }); 

     var dcr = await discClient.DiscoverCapabilityAsync("Contacts"); 

     var exClient = new OutlookServicesClient(
      dcr.ServiceEndpointUri, 
      async() => 
      { 
       var authResult = await authContext.AcquireTokenSilentAsync(
        dcr.ServiceResourceId, 
        new ClientCredential(this.configuration.IdaClientID, this.configuration.IdaClientSecret), 
        new UserIdentifier(userObjectId, UserIdentifierType.UniqueId)); 

       return authResult.AccessToken; 
      }); 

     var contactsResult = await exClient.Me.Contacts.ExecuteAsync(); 

     do 
     { 
      var c = contactsResult.CurrentPage; 
      contacts.AddRange(c.Select(contact => new ContactItem { FirstName = contact.GivenName })); 

      contactsResult = await contactsResult.GetNextPageAsync(); 
     } 
     while (contactsResult != null); 
    } 
    catch (AdalException exception) 
    { 
     if (exception.ErrorCode == AdalError.FailedToAcquireTokenSilently) 
     { 
      authContext.TokenCache.Clear(); 
     } 
    } 

    return this.View("Index", contacts); 
} 
+1

Я бы попробовать использовать Fiddler или какой-либо другой сети трассировку инструмент, чтобы увидеть, если запрос не только никогда возвращается. –

+0

Я ничего не вижу. Я поставил точки останова в каждой из 2-х асинхронных функций и смог увидеть исходный результат, возвращенный в первом, но ничего не происходит во втором. –

+0

Вы видите POST для входа в систему.microsoftonline.com? –

ответ

0

Существует ошибка в версии 1.0.34 Microsoft.Office365.OutlookServices.Portable, что приводит к тупиковой ситуации в OutlookServiceClient. Кажется, что работает возврат к 1.0.22.

Это описано здесь https://github.com/OfficeDev/O365-ASPNETMVC-Start/commit/b5652864756636a0b141c222e964aba953357e7a#diff-04c6e90faac2675aa89e2176d2eec7d8R139

И выглядит быть исправлено в следующей версии, как показано здесь https://github.com/Microsoft/Vipr/commit/aaeff5cb94204c23d7501be8fa74b0260ddc52d9

+0

Вы можете сделать исправление Стефана или посмотреть http://stackoverflow.com/questions/30792928/why-does-the-office-365-outlookservices-v1-0-34-net-client-library-hang-indef –