C# 如何在不使调用链异步的情况下调用ApplicationKenProvider?
我的问题和这个问题一样: 这里的解决方案是使调用方法异步,并且假定它上面的每个调用都是异步的。我已经将此方法深入到调用链中(在测试工具中工作良好),在MVC控制器中调用时无法返回。我不想让上面的每一个调用都是异步的——这将需要大量的重新设计和丑陋的体系结构来引入对我的代码毫无用处的异步功能 当然有办法让它同步工作吗?下面是我目前的代码:C# 如何在不使调用链异步的情况下调用ApplicationKenProvider?,c#,asp.net-mvc,azure,C#,Asp.net Mvc,Azure,我的问题和这个问题一样: 这里的解决方案是使调用方法异步,并且假定它上面的每个调用都是异步的。我已经将此方法深入到调用链中(在测试工具中工作良好),在MVC控制器中调用时无法返回。我不想让上面的每一个调用都是异步的——这将需要大量的重新设计和丑陋的体系结构来引入对我的代码毫无用处的异步功能 当然有办法让它同步工作吗?下面是我目前的代码: public void Authenticate() { var serviceCreds = ApplicationTokenProvider.Lo
public void Authenticate()
{
var serviceCreds = ApplicationTokenProvider.LoginSilentAsync(TenantId, ApplicationId, Secret).Result;
var monitorClient = new MonitorManagementClient(serviceCreds) {SubscriptionId = SubscriptionId.ToString()};
MonitorClient = monitorClient;
}
第三行对LoginSilentAsync的调用永远不会返回。我也可以在myside上重现它。我通过实现自定义ServiceClientCredentials解决了它。下面是演示代码
public class CustomCredentials : ServiceClientCredentials
{
private string AuthenticationToken { get; set; }
public override void InitializeServiceClient<T>(ServiceClient<T> client)
{
var authenticationContext =
new AuthenticationContext("https://login.windows.net/yourtenantId");
var credential = new ClientCredential("clientid", clientSecret: "secret key");
var result = authenticationContext.AcquireTokenAsync("https://management.azure.com/",
credential).Result;
if (result == null)
{
throw new InvalidOperationException("Failed to obtain the JWT token");
}
AuthenticationToken = result.AccessToken;
}
}
3.在本地进行测试
我也可以在myside上复制它。我通过实现自定义ServiceClientCredentials解决了它。下面是演示代码
public class CustomCredentials : ServiceClientCredentials
{
private string AuthenticationToken { get; set; }
public override void InitializeServiceClient<T>(ServiceClient<T> client)
{
var authenticationContext =
new AuthenticationContext("https://login.windows.net/yourtenantId");
var credential = new ClientCredential("clientid", clientSecret: "secret key");
var result = authenticationContext.AcquireTokenAsync("https://management.azure.com/",
credential).Result;
if (result == null)
{
throw new InvalidOperationException("Failed to obtain the JWT token");
}
AuthenticationToken = result.AccessToken;
}
}
3.在本地进行测试