【问题标题】:System.ComponentModel.Win32Exception: The wait operation timed out from Azure VPNSystem.ComponentModel.Win32Exception:等待操作从 Azure VPN 超时
【发布时间】:2018-06-30 17:17:25
【问题描述】:

我们有一个 Azure 应用服务,它尝试使用 VPN 经典(使用 VNET 配置)。

有时我们会收到以下错误:

System.Data.SqlClient.SqlException (0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:TCP Provider,错误:0 - 等待操作超时。)---> System.ComponentModel.Win32Exception (0x80004005):等待操作超时

在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 标识、SqlConnectionString connectionOptions、SqlCredential 凭据、对象 providerInfo、String newPassword、SecureString newSecurePassword、布尔重定向用户实例、SqlConnectionString userConnectionOptions、SessionData reconnectSessionData、DbConnectionPool 池、字符串 accessToken、布尔 applyTransientFaultHandling )

在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)

在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)

在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)

在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)

在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)

在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)

在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& 连接)

在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)

在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)

在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 重试)

在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 重试)

在 System.Data.SqlClient.SqlConnection.Open()

在 Dapper.SqlMapper.d__11`1.MoveNext()

在 System.Collections.Generic.List1..ctor(IEnumerable1 集合)

在 System.Linq.Enumerable.ToList[TSource](IEnumerable`1 源)

在 Dapper.SqlMapper.Query[T](IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable1 commandTimeout, Nullable1 commandType)

在 SiSystems.ClientApp.Web.Domain.Repositories.UserRepository.FindByPrimaryEmail(字符串用户名)

在 SiSystems.ClientApp.Web.Domain.Repositories.UserRepository.FindByName(字符串用户名)

在 SiSystems.ClientApp.Web.Auth.UserStore.c__DisplayClass3_0.b__0()

在 System.Threading.Tasks.Task`1.InnerInvoke()

在 System.Threading.Tasks.Task.Execute()

--- 从先前抛出异常的位置结束堆栈跟踪---

在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

在 Microsoft.AspNet.Identity.TaskExtensions.CultureAwaiter`1.GetResult()

在 Microsoft.AspNet.Identity.UserManager`2.d__12.MoveNext()

--- 从先前抛出异常的位置结束堆栈跟踪---

在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

在 SiSystems.ClientApp.Web.Auth.ApplicationOAuthProvider.d__2.MoveNext()

--- 从先前抛出异常的位置结束堆栈跟踪---

在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

在 Microsoft.Owin.Security.OAuth.OAuthAuthorizationServerHandler.d__3f.MoveNext()

--- 从先前抛出异常的位置结束堆栈跟踪---

在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)

在 Microsoft.Owin.Security.OAuth.OAuthAuthorizationServerHandler.d__22.MoveNext()

--- 从先前抛出异常的位置结束堆栈跟踪---

在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)

在 Microsoft.Owin.Security.OAuth.OAuthAuthorizationServerHandler.d__0.MoveNext()

--- 从先前抛出异常的位置结束堆栈跟踪---

在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

在 Microsoft.Owin.Security.Infrastructure.AuthenticationMiddleware`1.d__0.MoveNext()

--- 从先前抛出异常的位置结束堆栈跟踪---

在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

在 Microsoft.Owin.Security.Infrastructure.AuthenticationMiddleware`1.d__0.MoveNext()

--- 从先前抛出异常的位置结束堆栈跟踪---

在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

在 Microsoft.Owin.Security.Infrastructure.AuthenticationMiddleware`1.d__0.MoveNext()

--- 从先前抛出异常的位置结束堆栈跟踪---

在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

在 Microsoft.AspNet.Identity.Owin.IdentityFactoryMiddleware`2.d__0.MoveNext()

--- 从先前抛出异常的位置结束堆栈跟踪---

在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

在 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContextStage.d__5.MoveNext()

--- 从先前抛出异常的位置结束堆栈跟踪---

在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)

在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)

在 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.d__2.MoveNext()

--- 从先前抛出异常的位置结束堆栈跟踪---

在 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.StageAsyncResult.End(IAsyncResult ar)

在 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.EndFinalWork(IAsyncResult ar)

在 System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()

在 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep 步骤)

在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

ClientConnectionId:00000000-0000-0000-0000-000000000000

错误号:258,状态:0,类:20

添加了我从 azure 获得的日志图像

【问题讨论】:

    标签: c# azure timeout azure-vpn


    【解决方案1】:

    1- 这可能是由于未在应用程序的连接字符串中的 db-server-name 上指定 tcp 协议造成的。

    第二种可能性:

    2- 进入 Sql Server 配置管理->SQL Server 网络配置->protocols for 'servername' 并检查命名管道是否启用。

    3- 防火墙规则:

    TCP 端口 1433 的端口例外。在“新建入站规则向导”对话框中,使用以下信息创建端口例外: 选择端口 选择 TCP 并指定端口 1433 允许连接 选择所有三个配置文件(域、私有和公共) 将规则命名为“SQL – TCP 1433” UDP 端口 1434 的端口例外。再次单击新建规则并使用以下信息创建另一个端口例外: 选择端口 选择 UDP 并指定端口 1434 允许连接 选择所有三个配置文件(域, Private & Public) 将规则命名为“SQL – UDP 1434 sqlservr.exe 的程序异常。再次单击新建规则并使用以下信息创建程序例外:选择程序单击浏览以在此位置选择“sqlservr.exe”:[C:\Program Files\Microsoft SQL Server\MSSQL11.\MSSQL\Binn\sqlservr. exe] 其中是您的 SQL 实例的名称。允许连接 选择所有三个配置文件(域、私有和公共) 将规则命名为 SQL – sqlservr.exe sqlbrowser.exe 的程序例外 再次单击新建规则并使用以下信息创建另一个程序例外: 选择程序 单击浏览以选择此位置的 sqlbrowser.exe:[C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe]。允许连接 选择所有三个配置文件(域、私有和公共) 将规则命名为 SQL - sqlbrowser.exe

    参考:SQL Connection Error: System.Data.SqlClient.SqlException (0x80131904) 还有:https://thycotic.force.com/support/s/article/System-Data-SqlClient-SqlException-0x80131904

    【讨论】:

    • 感谢您的回复,对我来说,这个问题并不是每次都会出现。它只来了几次。有没有可能偶尔出现这个问题@Adam Smith-MSFT
    • 我建议使用网络观察程序来查明此问题的原因:azure.microsoft.com/en-us/blog/… 您需要捕获流量,然后验证发生了什么问题,如果数据包被丢弃等。
    • 我的 azure 订阅不允许创建网络观察者 :( 您可以建议任何其他选项吗?
    • @shamnad 能否将您的订阅 ID 发送给我:azcommunity[AT]microsoft[DOT]com,并附上此问题发生的确切日期和时间?我想确认当时是否没有资源关闭,另外,有几个监控流量的软件,Wireshark就是其中之一,您可以尝试在问题发生时捕获流量,然后通过过滤器搜索到问题发生的地方。这需要在操作系统内完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 2017-01-03
    相关资源
    最近更新 更多