我的 azure 网络作业似乎正在终止,但没有抛出异常,我迷路了。
我的 Web 作业是按需(或按计划)运行的,并且依赖于我的网站 DLL(和 MVC 应用程序)。它调用它来完成大部分工作,其中包括使用 Entity Framework 数据库以及对其他几个站点进行 REST 调用。大部分工作都是异步完成的。用于完成这项工作的大部分代码也可以从网站的其他部分调用,不会出现任何问题,而且不用说,该 Web 作业在本地运行时可以完美运行。
网络作业终止,并且似乎没有抛出异常,并且似乎无法调试不属于连续运行类型的网络(?)。因此,我的调试主要是 Console.WriteLine 类型。由于这个原因和异步性,我无法准确地确定它崩溃的位置 - 我以为是在访问数据库时发生的,但是在搞砸之后,数据库访问开始工作......呃。我的下一个最佳猜测是它在等待或其他异步管道期间死亡。然而,它确实会在两个 try/catch block 内崩溃,这两个 block 最终将结果记录到 redis 和 azure 存储中。这些都没有发生。我无法弄清楚或想象这个进程如何在没有命中任何异常处理程序的情况下崩溃..?
有人在使用 azure webjob 时遇到过这个问题吗?知道我应该寻找什么或调试此问题的任何技巧吗?
谢谢!
最佳答案
我明白了!异步发生的许多事情之一就是证书的创建。我追踪到了这一点:
signedCert = new X509Certificate2(cert, "notasecret", X509KeyStorageFlags.Exportable);
当从我的 azure 网站或我的测试调用时,此代码工作正常,但会完全终止 webjob 进程而不引发异常!例如,下面的异常处理程序中的 WriteLine 永远不会被调用:
X509Certificate2 signedCert;
try
{
signedCert = new X509Certificate2(cert, "notasecret", X509KeyStorageFlags.Exportable);
}
catch (Exception ex)
{
// We never get here! Argh!
Console.WriteLine("Exception converting cert: " + ex);
throw;
}
极其耗时且令人沮丧。与诊断不同,修复很简单:
signedCert = new X509Certificate2(
cert,
"notasecret",
X509KeyStorageFlags.Exportable |
X509KeyStorageFlags.MachineKeySet |
X509KeyStorageFlags.PersistKeySet);
关于azure - 为什么我的 webjob 终止而不抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27476602/