为什么我的webjob终止而没有抛出异常?

时间:2014-12-15 02:39:19

标签: azure azure-webjobssdk

我的azure webjob似乎终止而没有抛出异常,我迷失了。

我的网络作业是按需(或预定)运行的,并且依赖于我的网站DLL(和MVC应用程序)。它调用它来完成大部分工作,包括使用实体框架数据库并对其他几个站点进行REST调用。大部分工作都是异步完成的。用于完成这项工作的大多数代码也是从网站的其他部分调用的,没有问题,毫无疑问,在本地运行时,Web作业可以完美运行。

Web作业终止并且似乎不会抛出异常,并且似乎无法调试不属于连续运行类型的Web(?) 。因此,我的调试主要是Console.WriteLine。由于这一点和异步性,我还没能确切地确定崩溃的位置 - 我认为这是在访问数据库时,但是在使用它之后,数据库访问开始工作了......呃。我的下一个最好的猜测是它在await或其他异步管道中死亡。但是,它会在两个try / catch块中崩溃,这些块最终会将结果记录到redis和azure存储。这些都不会发生。我无法弄清楚或想象如果没有遇到任何异常处理程序,这个进程是如何崩溃的。?

任何人都有这个天蓝色webjob的问题?知道我应该寻找什么或任何调试的提示吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

我明白了!异步发生的许多事情之一是创建证书。我追溯到这个:

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);