为什么我的webjob在不引发异常的情况下终止?

崩溃的戈登

我的天蓝色webjob似乎正在终止而没有引发异常,我迷路了。

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

该Web作业终止并且似乎没有引发异常,并且似乎不可能调试不是连续运行的Web(?)。因此,我的调试主要是通过Console.WriteLine进行的。由于这个原因和异步性,我无法准确确定崩溃的位置-我以为是在访问数据库时发生的,但是经过处理之后,数据库访问才开始起作用。我的下一个最佳猜测是它在等待或其他异步管道中死亡。但是,它的确会在两个try / catch块中崩溃,最终导致将结果记录到Redis和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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以尝试一下-在不引发异常的情况下捕获JS吗?

为什么在没有“自我”且装饰器没有引发异常的情况下声明Python类的方法?

如何在不引发异常的情况下执行此操作?

Delphi TField.OnValidate是否可以在不引发异常的情况下还原原始值?

如何在不引发python异常的情况下获取堆栈跟踪字符串?

如何在不引发异常的情况下退出 python 2.7 中的 for 循环

如何在不引发异常的情况下将字符串转换为URI

“新”语句在不引发异常的情况下会失败吗?

如何在不引发异常的情况下使VSTS构建任务失败

为什么不引发浮点异常(FPE)?

为什么此SQL INSERT在没有引发和异常的情况下失败?

为什么在这种情况下Mockito doThrow不会引发异常?与模拟零互动

为什么在没有引发异常的情况下杰斯特说有断言调用?

为什么在以下情况下引发了不同类型的异常?

为什么我可以在不引用任何程序集的情况下使用 System.Collections.Generic 命名空间?

在Python中,如何在不引发另一个异常的情况下构造一个异常?

为什么在这种情况下引发异常的方法的调用者不必处理该异常?

为什么data.table行过滤可以在不引发错误的情况下静默接受函数中缺少的参数?

如果不存在,如何在不引发异常的情况下获取First()?[当FirstOrDefault没有帮助时]

IMAPI:如果图像大小超出可用空间,如何在不引发异常的情况下获取图像大小?

F#/ Argu-如何在不引发异常的情况下显示两级命令树的帮助

为什么不引发ValueError?

当我们在视图中访问未定义的实例变量时,Rails为什么不引发异常?

有没有一种方法可以在不引发Java异常的情况下转储堆栈跟踪?

使用Rails的活动记录,是否有另一种方法可以在不引发异常的情况下进行回滚?

在我的情况下,为什么要创建bean?

为什么在某些情况下我的for循环不启动?

在什么情况下BlockingQueue.take将引发中断的异常?

在什么情况下C#'is'关键字可以引发异常?