【问题标题】:Randomly WebJob will failed随机 WebJob 会失败
【发布时间】:2017-06-15 13:28:08
【问题描述】:

我使用 Web Jobs 在后台连续运行我的功能,它在本地机器和 azure 中运行良好。但随机这个网络作业会失败,并给出如下所示的错误。

Microsoft.Azure.WebJobs.Host.FunctionInvocationException:执行函数时出现异常:Functions.ImportVehicles ---> System.Data.SqlClient.SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。 (提供者:命名管道提供者,错误:40 - 无法打开与 SQL Server 的连接)---> System.ComponentModel.Win32Exception:系统找不到指定的文件---内部异常堆栈跟踪结束---在System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity,SqlConnectionString connectionOptions,SqlCredential credential,Object providerInfo,String newPassword,SecureString newSecurePassword,Boolean redirectedUserInstance,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,DbConnectionPool 池,String accessToken,Boolean applyTransientFaultHandling)。 Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection,DbConnectionOptions userOptions)在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConne ctionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) at

上述异常是随机发生的,无法每次都获取/重现。

我知道该错误似乎表明这是 Azure 和 SQL 之间的临时连接问题。但是,我已将数据上下文配置为使用 SqlAzureExecutionStrategy,它应该处理断开的连接。

【问题讨论】:

  • 听起来像是某种连接问题。你能看到它是否从 Kudu 控制台复制吗?见this page

标签: azure azure-webjobs


【解决方案1】:

如果错误包含以下任何错误编号,SqlAzureExecutionStrategy 将重试 TimeoutException 和 SqlException 操作:40613、40501、40197、10929、10928、10060、10054、10053、233、64 和 20。(from documentation )

您得到的错误号是Error 40。这可能是因为您使用的是 Named Pipes 而不是 TCP/IP 连接。我建议你切换到使用 TCP/IP(通过在你的连接字符串前面添加tcp:)然后再试一次。

【讨论】:

  • 谢谢@Rick,我已经在连接字符串前面使用了 tcp:。这是我目前使用的连接字符串,Data Source=tcp:XXXXXX.database.windows.net,1433;Initial Catalog=XXXX-DB;User ID=XXXXXX;Password=XXXXXColumn Encryption Setting=Enabled;MultipleActiveResultSets=True;Encrypt=True ;TrustServerCertificate=False;
  • 那么您可能需要检查您的网络作业以查看是否有任何其他连接正在建立,因为您的错误明确指出 provider: Named Pipes Provider, error: 40 - 无法打开连接到SQL Server
【解决方案2】:

从堆栈跟踪(如果我错了,请纠正我),您似乎正在使用普通的 ADO.NET 连接到您的 Azure SQL 数据库并与之交互。如果是这种情况,则 SqlAzureExecutionStrategy 不会发挥作用,因为在 ADO.NET 中,不会由于暂时性故障而自动重试。

可能(并且将会)发生瞬态故障。您需要使用重试策略来确保您的应用可以处理它们。有几个选择。我个人最喜欢的只是使用实体框架。您必须检查版本号才能确定,但​​我相信 v6.0 中引入了自动重试。

【讨论】:

    猜你喜欢
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2015-08-04
    • 2017-02-07
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多