首页 > 解决方案 > Azure DB 连接错误 HRESULT E_FAIL 已从对 COM 组件的调用中返回

问题描述

我正在将 ASP.Net 网站部署到 Azure。它使用 Azure SQL 数据库。我正在尝试使用无密码连接字符串进行设置。我一直在遵循 MS Docs 教程中的步骤,标题为“教程:使用托管标识从应用服务保护 Azure SQL 数据库连接”。它适用于我连接到数据库的机器。我已经检查并仔细检查了这些步骤。唯一不同的是我正在使用的网站。

我遇到的问题是,当我将它部署到服务器并连接到数据库时,我遇到了一个神秘的错误。有谁知道这个错误信息是什么意思?

[COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component.]
Microsoft.Identity.Client.Platforms.net45.d__20.MoveNext() +692 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task ) +102
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+64
Microsoft.Identity.Client.Internal.d__6.MoveNext() +535 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+102
系统。 Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+64
Microsoft.Identity.Client.Internal.d__4.MoveNext()+230 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+102
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+64
Microsoft.Identity.Client.Internal.Requests.d__11.MoveNext()+685 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+102
System.Runtime .CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+64
Microsoft.Identity.Client.Internal.Requests.d__8.MoveNext()+453 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+102
System.Runtime.CompilerServices。 TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+64
Microsoft.Identity.Client.Internal.Requests.d__14.MoveNext()+974 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+102
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)+64
Microsoft.Identity.Client.ApiConfig.Executors.d__2.MoveNext()+372 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)+102
System.Runtime .CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +64
Microsoft.Data.SqlClient.<b__0>d.MoveNext() in H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\数据\SqlClient\ActiveDirectoryNativeAuthenticationProvider.cs:53

[AggregateException:发生一个或多个错误。]
System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) +4247326
System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) +12576612 System.Threading.Tasks.Task1.get_Result() +34
Microsoft.Data.SqlClient.<>c__DisplayClass137_1.b__1 () 在 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlInternalConnectionTds.cs:2723 System.Threading.Tasks.Task`1.InnerInvoke() +58
System.Threading.Tasks.Task.Execute() +48

[AggregateException:发生一个或多个错误。]
System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) +4247326
System.Threading.Tasks.Task.Wait(Int32 毫秒超时,CancellationToken cancelToken) +12586685
System.Threading.Tasks.Task .Wait() +16
H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlInternalConnectionTds.cs:2723 Microsoft.Data 中的 Microsoft.Data.SqlClient.SqlInternalConnectionTds.GetFedAuthToken(SqlFedAuthInfo fedAuthInfo)。 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlInternalConnectionTds.cs:2581 Microsoft.Data.SqlClient.TdsParser 中的 SqlClient.SqlInternalConnectionTds.OnFedAuthInfo(SqlFedAuthInfo fedAuthInfo)。 TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) 在 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\TdsParser。 cs:2548 Microsoft.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 在 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\TdsParser.cs:2088 Microsoft.Data.SqlClient.SqlInternalConnectionTds。 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlInternalConnectionTds.cs:1357 Microsoft.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo)中的 CompleteLogin(布尔 enlistOK) , String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover, Boolean isFirstTransparentAttempt, Boolean disableTnir) in H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\ SqlInternalConnectionTds.cs:2239 Microsoft.Data.SqlClient.SqlInternalConnectionTds。H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient 中的 LoginNoFailover(ServerInfo serverInfo、String newPassword、SecureString newSecurePassword、Boolean redirectedUserInstance、SqlConnectionString connectionOptions、SqlCredential credential、TimeoutTimer timeout) \SqlInternalConnectionTds.cs:1757 Microsoft.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer 超时,SqlConnectionString 连接选项,SqlCredential 凭据,字符串 newPassword,SecureString newSecurePassword,布尔重定向用户实例)在 H:\tsaagent1_work\5\s\src\Microsoft.Data。 SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlInternalConnectionTds.cs:1628 Microsoft.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 标识,SqlConnectionString connectionOptions,SqlCredential 凭据,对象 providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, ServerCertificateValidationCallback serverCallback, ClientCertificateRetrievalCallback clientCallback, DbConnectionPool pool, String accessToken, SqlClientOriginalNetworkAddressInfo originalNetworkAddressInfo, Boolean applyTransientFaultHandling, SqlAuthenticationProviderManager sqlAuthProviderManager) in H:\tsaagent1 \Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlInternalConnectionTds.cs:465 Microsoft.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection,DbConnectionOptions userOptions)在 H 中:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlConnectionFactory.cs:143 Microsoft.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConnectionOptions 选项,DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) 在 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionFactory.cs:167 Microsoft.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject , DbConnectionOptions userOptions, DbConnectionInternal oldConnection) 在 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionPool.cs:918 Microsoft.Data.ProviderBase.DbConnectionPool.UserCreateRequest( DbConnection owningObject, DbConnectionOptions userOptions,DbConnectionInternal oldConnection) 在 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionPool.cs:2024 Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) 在 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionPool.cs:1427 Microsoft.Data .ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSourceUInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) 在 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionPool.cs:1427 Microsoft. Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSourceUInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) 在 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionPool.cs:1427 Microsoft. Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) in H:\tsaagent1\_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionPool.cs:1310 Microsoft.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 次重试,DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) 在 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionFactory.cs:357 Microsoft.Data.ProviderBase .DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource 1 retry, DbConnectionOptions userOptions) in H:\tsaagent1\_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionInternal.cs:773 Microsoft.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions) 在 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\ProviderBase\DbConnectionClosed.cs: 72 Microsoft.Data.SqlClient.SqlConnection.TryOpenInner(任务完成源1 retry) in H:\tsaagent1\_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlConnection.cs:1860 Microsoft.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 重试)在 H:\tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlConnection.cs:1853 Microsoft.Data.SqlClient.SqlConnection.Open() 在 H: \tsaagent1_work\5\s\src\Microsoft.Data.SqlClient\netfx\src\Microsoft\Data\SqlClient\SqlConnection.cs:1421

这是 web.config 文件中的相关片段。我在连接字符串中更改了服务器和数据库的名称,因此它们保持机密。

<configSections>
  <section name="exceptionFilters" type="MGBrownWeb.Configuration.ErrorFilterSection" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" />
  <section name="SqlAuthenticationProviders" type="Microsoft.Data.SqlClient.SqlAuthenticationProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<SqlAuthenticationProviders>
  <providers>
    <add name="Active Directory Interactive" type="Microsoft.Azure.Services.AppAuthentication.SqlAppAuthenticationProvider, Microsoft.Azure.Services.AppAuthentication" />
  </providers>
</SqlAuthenticationProviders>
<connectionStrings>
  <add name="MyDB" connectionString="server=tcp:my-server-tst-sqls.database.windows.net;database=database-tst-sqldb-1;UID=AnyString;Authentication=Active Directory Interactive" />
</connectionStrings>

标签: c#azure-web-app-serviceazure-sql-database

解决方案


原来,我从我的一个项目中引用了 Microsoft.Data.SqlClient,而不是 System.Data.SqlClient。改回 System.Data.SqlClient 解决了该错误。


推荐阅读