WCF アプリケーションに適切な例外処理を実装することに関心があります。グーグルで簡単に調べた後、2つのソリューションに出くわしました。
- クライアントに提供
FaultExceptions
します。 - を使用した一般的な例外処理
IErrorHandler
。
しかし、私が見つけられなかったのは、2 つの方法を組み合わせた実用的な例でした。
私の考え:
独自の詳細タイプで FaultException をスローする
throw new FaultException<StackOverflowFault>(
new StackOverflowFault(StackOverflowFaultCode.Rules,
"This question is not considered as constructive."));
未処理の例外をキャッチしIErrorHandler
てログに記録します。
public bool HandleError(Exception ex) {
try {
SomeLogger.Error(ex.Message, ex.Source);
return true;
} catch (Exception) {
// Well, there was an exception handling the
// exception :(
// -> Drop the exception and throw a new one
throw new Exception("Unknown exception occured.");
}
}
...そして、例外の種類に基づいて障害を提供します
(全てがお客様目線ではありません!)
public void ProvideFault(Exception error, MessageVersion version, ref Message fault){
if(error is FaultException) {
fault = Message.CreateMessage(version, ((FaultException<StackOverflowFault>)error).Reason)
} else if(error is SqlException) {
// What would Jon Skeet do?
}
}
私の質問
これはオーケープラクティスとみなされますか? そして:クライアントに適したアプリケーションですでにFaultExceptionをスローしている場合-それらを処理させるのは理にかなっていますかIErrorHandler
(自動的に処理します)?