我有两个 Azure WebJobs。第一个接收一条传入消息,告诉它获取 PDF 并将其分解为单独的页面图像,然后将另一条消息排队供第二个 WebJob 处理单独的页面。它在我们的 QC 实例上运行良好,但是当我们尝试转移到生产环境时,我开始在第二份工作中遇到奇怪的错误,但并非始终如一。第一个作业运行并将文件分解为页面图像。那工作正常。我已经确认每个页面图像都被创建并且每个页面消息都被排队。但是,对于第二个作业,只有部分消息得到正确处理。其余在 WebJob 诊断中显示此错误:
Microsoft.Azure.WebJobs.Host.FunctionInvocationException:Microsoft.Azure.WebJobs.Host.FunctionInvocationException:执行函数时出现异常:Functions.ProcessBatchPage ---> System.Data.SqlClient.SqlException:发生与网络相关或特定于实例的错误在建立与 SQL Server 的连接时。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:SQL 网络接口,错误:52 - 无法找到本地数据库运行时安装。验证 SQL Server Express 已正确安装并且本地数据库运行时功能已启用。)---> System.ComponentModel.Win32Exception:系统找不到指定的文件
但奇怪的是,这个错误提到了本地数据库运行时和 SQL Server Express,我在代码中的任何地方都没有引用。系统指向 Azure SQL DB。这项工作是 ADO.Net,我对连接字符串进行了硬编码,以尝试消除基于配置的连接字符串的任何问题。但奇怪的是,它只发生在消息的特定部分。其他处理完美。
最后,我在本地调试工作(仍然指向 Azure 上的真实队列和数据库)并遇到了同样的问题。但是该作业会输出一个控制台行,其中作业 ID 作为代码的第一行。对于那些成功处理的作业,我看到了这个 writeline。对于那些失败的人,我什么都没看到。这几乎就像工作并没有真正正确启动。(失败的作业也有很短的运行时间 50-100 毫秒)