我正在使用 tokenProviderFunction 在依赖注入中注入 Microsoft.PowerPlatform.Dataverse.Client
sc.AddSingleton<IOrganizationServiceAsync2, ServiceClient>(provider =>
{
var config ...
var factory ...
var client = new ServiceClient(
new Uri(config....),
factory.GetTokenAsync, true, provider.GetService<ILogger<ServiceClient>>())
{
MaxRetryCount = 5
};
return client;
});
令牌工厂使用多个 ConfidentialClientApplications,每个“用户”一个,因此 ServiceClient 有一个连接池
return (await _generator
.AcquireTokenForClient(new[] { $"{resource}/.default" })
.ExecuteAsync(cancellationToken)).AccessToken;
这适用于我的本地虚拟机、本地测试以及部署在开发环境中。问题是当集成测试 (xunit) 在 Github Runner 上运行时。测试并行运行,当创建多个固定装置或测试类时,测试将挂在 _generator.AcquireTokenForClient(...).ExecuteAsync 步骤。
对于那些遇到类似问题的人,为了使其正常工作,github 工作流作业运行程序设置为 ubuntu-latest-8-cores
我们尝试使用 4 核,但发现它间歇性超时。我们可能会拆分集成测试,以便我们可以在并行作业中使用 4 核运行器