0

私が取り組んでいる 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 週間正常に動作しているため、例外が多すぎることに関係している可能性があります。スタック オーバーフローが発生している可能性があります。

4

1 に答える 1

1

例外コード: 0xe053534f

このサイトの名前でプログラムがクラッシュしています。例外コードの最後の 3 つの 16 進数のペアは、「SSO」の ASCII コードです。これは「ソフト スタック オーバーフロー」を意味します。早期に検出されることを除けば、ハード スタック オーバーフロー例外と同じです。呼び出しを設定しているときに、CLR が実際に呼び出しを行うとハード スタック オーバーフローが発生することに気付きます。

それ以外の場合、プログラムはハード StackOverflowException の場合と同じようにクラッシュします。これは、catch ブロックまたは AppDomain.UnhandledException が実行されることなく、即時に中止されます。

あなたのプログラムがこの運命をどのように被ったかは、質問からは診断できません。それ以外の場合は、典型的なプログラミング バグです。

于 2012-05-23T13:19:57.240 に答える