2017-07-03 145 views
0

從本地PC我試圖連接到AzureBillingAPI使用下面的代碼:電話ApplicationTokenProvider.LoginSilentAsync永遠不會返回

var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantDomain, clientId, secret); 

此方法永遠不會返回。調試輸出顯示以下內容:


Microsoft.IdentityModel.Clients.ActiveDirectory詳細:1:2017年7月3日14時02分07秒:e608ec23-675f-4828-aa65-72479409ec63 - TokenCache:仰望緩存對於令牌...

iisexpress.exe信息:0:07/03/2017 14:02:07:e608ec23-675f-4828-aa65-72479409ec63 - 令牌緩存:查找令牌的緩存...

Microsoft.IdentityModel.Clients.ActiveDirectory信息:2:07/03/2017 14:02:07:e608ec23-675f-4828-aa65-72479409ec63 - TokenCache:在緩存中找不到匹配的令牌

iisexpress.exe信息:0:20​​17年7月3日14時02分07秒:e608ec23-675f-4828-aa65-72479409ec63 - TokenCache:沒有匹配的令牌在緩存



發現

問題:我該如何連接? 謝謝。

+0

您是否正在調用'Result'或'Wait'你的調用堆棧? –

回答

1

根據你的描述,我猜這個方法永遠不會返回的原因是你在同步控制器方法中用wait關鍵字調用異步方法。

如果調用getResultAsync如下,它永遠不會返回結果:

public ActionResult Index() 
    { 
     getResultAsync().Wait(); 
     return View(); 
    } 

    public static async Task getResultAsync() 
    { 
     string subscription = "subid"; 

     string tenantid = "tenantid "; 
     string clientId = "clientId "; 
     string key = "key"; 

     var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantDomain, clientId, key); 

     BillingManagementClient b1 = new BillingManagementClient(serviceCreds) { SubscriptionId = subscription }; 


     var result = b1.Operations.List(); 

    } 

我建議你可以改變如下索引方法,將工作做好:

public async Task<ActionResult> Index() 
     { 
      await getResultAsync(); 
      return View(); 
     } 

結果:

enter image description here

+0

超級!那就是訣竅。非常感謝你! –

+0

如果您覺得我的回答有用/有幫助,請將其標記爲答案,以便其他人可以從中受益。 –

相關問題