You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XAF 24.1.6 WinForms升级中间层连接Azure数据库遇认证异常

XAF 24.1.6 WinForms应用升级中间层架构连接Azure数据库时出现Azure.Identity.CredentialUnavailableException

我正尝试将XAF 24.1.6 WinForms应用升级为使用中间层安全架构并连接Azure数据库。已成功搭建可连接数据库的“Hello Middle Tier”示例,但完整应用包含更多功能。将可用的中间层代码复制到完整应用中后,运行时抛出Azure.Identity.CredentialUnavailableException。注意到触发错误时中间层URL尚未完全加载,怀疑是时序问题。

调用栈信息

System.Private.CoreLib.dll!System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
Azure.Identity.dll!Azure.Identity.CredentialDiagnosticScope.FailWrapAndThrow(System.Exception ex, string additionalMessage, bool isCredentialUnavailable) Line 45
    at Azure.Identity\CredentialDiagnosticScope.cs(45)
Azure.Identity.dll!Azure.Identity.EnvironmentCredential.GetTokenImplAsync(bool async, Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken) Line 87
    at Azure.Identity\EnvironmentCredential.cs(87)
Azure.Identity.dll!Azure.Identity.EnvironmentCredential.GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken) Line 79
    at Azure.Identity\EnvironmentCredential.cs(79)
Azure.Identity.dll!Azure.Identity.DefaultAzureCredential.GetTokenFromSourcesAsync(Azure.Core.TokenCredential[] sources, Azure.Core.TokenRequestContext requestContext, bool async, System.Threading.CancellationToken cancellationToken) Line 107
    at Azure.Identity\DefaultAzureCredential.cs(107)
Azure.Identity.dll!Azure.Identity.DefaultAzureCredential.GetTokenImplAsync(bool async, Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken) Line 73
    at Azure.Identity\DefaultAzureCredential.cs(73)
Azure.Identity.dll!Azure.Identity.DefaultAzureCredential.GetTokenAsync(Azure.Core.TokenRequestContext requestContext, System.Threading.CancellationToken cancellationToken) Line 56
    at Azure.Identity\DefaultAzureCredential.cs(56)
Microsoft.Data.SqlClient.dll!Microsoft.Data.SqlClient.ActiveDirectoryAuthenticationProvider.AcquireTokenAsync(Microsoft.Data.SqlClient.SqlAuthenticationParameters parameters)
Microsoft.Data.SqlClient.dll!Microsoft.Data.SqlClient.SqlInternalConnectionTds.GetFedAuthToken.AnonymousMethod__1()
System.Private.CoreLib.dll!System.Threading.Tasks.Task<System.Threading.Tasks.Task<Microsoft.Data.SqlClient.SqlAuthenticationToken>>.InnerInvoke()
System.Private.CoreLib.dll!System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(System.Threading.Thread threadPoolThread, System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state)
System.Private.CoreLib.dll!System.Threading.Tasks.Task.ExecuteWithThreadLocal(ref System.Threading.Tasks.Task currentTaskSlot, System.Threading.Thread threadPoolThread)
System.Private.CoreLib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch()
System.Private.CoreLib.dll!System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()

排查进展

最初研究相关帮助文档后,推测代码尝试使用中间层配置的JWT令牌对服务主体进行认证。中间层代码已从可用应用复制到问题应用,并针对不同模块项目做了调整,Azure密钥保持一致。目前不确定如何继续排查,计划逐步迁移代码定位问题。

更新

研究中间层安全文档后了解到,中间层安全服务器充当客户端应用与数据库服务器之间的WebSocket服务,之前关于服务主体的推测有误,中间层仅用于保护连接字符串。

内容的提问来源于stack exchange,提问作者Kirsten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:02:06