我正在研究的Windows Service有一个非常奇怪的问题,我想知道为什么会发生。
服务循环每5分钟一次,然后在该循环内通过含有网络服务 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 服务都会在这条线上崩溃, 没有任何例外。 应用程序日志在这条线之前有一条线, 但之后没有一条线,
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次, 在此之前,它曾造成申请完全崩溃。
为何会发生这种事?我改变了代码线,不再依赖例外,而且它已经运作了一个星期,没有坠机,因此可能与太多例外有关,也许会造成堆叠溢?