【问题标题】:Why does a large amount of AppSettings calls to a none existent key cause application crashes?为什么大量 AppSettings 调用不存在的键会导致应用程序崩溃?
【发布时间】:2012-05-23 10:12:39
【问题描述】:

我正在处理的 Windows 服务存在一个非常奇怪的问题,我想了解它发生的原因。

该服务每 5 分钟循环一次,然后在该循​​环内循环遍历包含编号的 Web 服务 URL 的键,例如:

<add key="URL.1" value="http://dummy1.com/Service.asmx"/>
<add key="URL.2" value="http://dummy2.com/Service.asmx"/>
<add key="URL.3" value="http://dummy3.com/Service.asmx"/>

执行此检查的代码是:

If String.IsNullOrEmpty(AppSettings("OM." & intCount & ".Name").ToString) Then

当它点击一个不存在的键时,将引发异常,服务停止并等待 5 分钟,直到下一个循环。

这通常效果很好,但每隔一两周,Windows 服务就会在该行崩溃,没有任何异常。应用程序日志在该行之前有一行,但之后没有任何内容,没有一个 Try Catches 被命中(主要是捕获基本的“Exception”类)。

在 Windows 的事件日志中如下:

Faulting application name: MyService.exe, version: 1.1.2.0, time stamp: 0x4fa22a24
Faulting module name: KERNELBASE.dll, version: 6.1.7601.17651, time stamp: 0x4e211319
Exception code: 0xe053534f
Fault offset: 0x0000b9bc
Faulting process id: 0x%9
Faulting application start time: 0x%10
Faulting application path: %11
Faulting module path: %12
Report Id: %13

奇怪的是,这行代码每天至少执行 300 次,持续至少一周,大约是 2000 次,然后有一次导致应用程序完全崩溃。

任何想法为什么会发生这种情况?我已将那行代码更改为不依赖异常,并且它已经运行了一周没有崩溃,所以可能与太多异常有关 - 可能导致堆栈溢出?

【问题讨论】:

    标签: .net vb.net exception windows-services crash


    【解决方案1】:

    异常代码:0xe053534f

    您的程序因使用此站点的名称而崩溃。异常代码的最后 3 个十六进制对是“SSO”的 ascii 代码。这意味着“软堆栈溢出”。它与硬堆栈溢出异常相同,只是它被提前检测到。在设置调用时,CLR 注意到实际调用会导致硬堆栈溢出。

    否则您的程序将像在硬 StackOverflowException 上一样崩溃,它是立即中止,没有捕获块或 AppDomain.UnhandledException 被执行。

    您的程序究竟是如何遭受这种命运的,这个问题无法诊断。否则这是一个典型的编程错误。

    【讨论】:

    • 谢谢,我还以为是堆栈溢出。我认为不依赖代码中的异常已经阻止了它的发生。
    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 2020-05-26
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    相关资源
    最近更新 更多