WCF サービスを使用する Silverlight 2 アプリケーションがあります。そのため、サービスのメソッドへのすべての呼び出しに非同期コールバックを使用します。これらの呼び出しの前または実行中に、サービスが実行されていない場合、サービスがクラッシュした場合、またはネットワークがダウンした場合などは、期待どおりに例外が生成されます。問題は、この例外をキャッチする方法がわからないことです。
これは非同期呼び出しであるため、begin 呼び出しを try/catch ブロックでラップして、プログラムがその時点から移動した後に発生する例外を取得することはできません。
サービス プロキシは自動的に生成されるため、EndInvoke を呼び出すすべての生成済み関数 (例外が実際に表示される場所) に try/catch ブロックを配置することはできません。これらの生成された関数は、コール スタック内の外部コードにも囲まれているため、スタック内に try/catch を置く場所は他にありません。
コールバック関数が呼び出される前に例外が発生するため、try/catch をコールバック関数に入れることができません。
App.xaml.cs には Application_UnhandledException 関数があり、未処理の例外をすべてキャプチャします。これを使用できますが、面倒な方法のようです。この関数は、本当に予期しないエラー (別名バグ) 用に予約しておき、特定の方法で対処したいすべての状況でこの関数のコードを終わらせないようにしたいと思います。
明らかな解決策がありませんか?または、Application_UnhandledException を使用して立ち往生していますか?
[編集]
以下で説明するように、Error プロパティはまさに私が探していたものです。ループのために私をスローしているのは、例外がスローされ、キャッチされていないように見えるという事実ですが、実行は続行できます。Application_UnhandledException イベントをトリガーし、VS2008 で実行が中断されますが、デバッガーで続行すると実行を続行できます。それは実際には問題ではなく、奇妙に思えるだけです。