随机WebJob将失败

时间:2017-06-15 13:28:08

标签: azure azure-webjobs

我使用Web Jobs在后台连续运行我的功能,它在本地机器和天蓝色中工作正常。但随机这个Web作业将失败,并给出如下所示的错误。

  

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标识,SqlConnectionString connectionOptions,SqlCredential凭证,Object providerInfo,String NEWPASSWORD,SecureString的newSecurePassword,布尔redirectedUserInstance,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,池类DBConnectionPool,字符串的accessToken,布尔applyTransientFaultHandling)在System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions选项,DbConnectionPoolKey poolKey,对象poolGroupProviderInfo,池类DBConnectionPool,的DbConnection owningConnection,DbConnectionOptions user.ptions在System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool池,DbConnection owningObject,DbConnectionOptions选项,DbConnectionPoolKey poolKey,DbConnectionOptions userOptions)

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

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

2 个答案:

答案 0 :(得分:0)

  

如果错误包含以下任何错误编号,则SqlAzureExecutionStrategy将重试对TimeoutException和SqlException的操作:40613,40501,40197,10929,10928,10060,10054,10053,233,64和20.({{3 }})

您获得的错误号码是Error 40。这可能是因为您使用命名管道而不是 TCP / IP 连接。我建议您切换到使用TCP / IP(通过在您的连接字符串前添加tcp:)并再试一次。

答案 1 :(得分:0)

从堆栈跟踪(如果我错了,纠正我),看起来你正在使用普通的'ADO.NET连接到Azure SQL数据库并与之交互。如果是这种情况,则SqlAzureExecutionStrategy不起作用,因为使用ADO.NET时,由于瞬态故障而没有自动重试。

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