私が取り組んでいる 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 分間待機します。
これは通常はうまく機能しますが、毎週または 2 週間ごとに 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
奇妙な点は、このコード行が少なくとも 1 週間にわたって 1 日に 300 回正常に実行されていることです。これは、その 1 回でアプリケーションが完全にクラッシュするまでの約 2000 回です。
なぜこれが起こっているのですか?そのコード行を変更して、例外に依存しないようにしました。現在、クラッシュすることなく 1 週間正常に動作しているため、例外が多すぎることに関係している可能性があります。スタック オーバーフローが発生している可能性があります。