gpt4 book ai didi

c# - 如何在不使调用链异步的情况下调用 ApplicationTokenProvider?

转载 作者:行者123 更新时间:2023-12-03 05:48:38 25 4
gpt4 key购买 nike

我和这个问题有同样的问题:

Call to ApplicationTokenProvider never returns

解决方案是使调用方法异步,并且大概其上面的每个调用都是异步的。我已经将此方法置于调用链深处(在测试工具中工作正常),并且在 MVC Controller 中调用时无法返回。我不想让上面的每个调用都异步 - 这将需要大量的重新设计和丑陋的架构来引入对我的代码无用的异步功能。

当然有某种方法可以使其 #$(*&# 同步工作?这是我目前的代码:

public void Authenticate()
{
var serviceCreds = ApplicationTokenProvider.LoginSilentAsync(TenantId, ApplicationId, Secret).Result;
var monitorClient = new MonitorManagementClient(serviceCreds) {SubscriptionId = SubscriptionId.ToString()};

MonitorClient = monitorClient;
}

第三行对 LoginSilentAsync 的调用永远不会返回。

最佳答案

我也可以在我这边重现它。我通过实现自定义 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;
}
}

2.将验证功能更改为以下代码。

 public void Authenticate()
{
var monitorClient = new MonitorManagementClient(new CustomCredentials()) { SubscriptionId = "subscription Id" };
MonitorClient = monitorClient;
}

3.在本地测试。

enter image description here

关于c# - 如何在不使调用链异步的情况下调用 ApplicationTokenProvider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50610159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com