私は例外をスローするasp.NET Webサービス(WCFではなく、WebMethodsでの.asmx)を持っています。例外はすべて(Exceptionから派生どちらも)2つのベース例外クラスのいずれかから派生:asp.net Webサービスによってスローされる例外の種類を特定するにはどうすればよいですか?
public class InputException : Exception
{
....
}
public class FatalException : Exception
{
....
}
public class NoFilesFound: FatalException
{
....
}
....
、必要に応じてWebサービスは今例外をスローします。私のクライアントコードでは、私は例外をキャッチして、このようなメッセージを見ることができます:
Server was unable to process request. ---> There were no files found
を例外型FaultExceptionのですが(私がキャッチした例外の.GetType()を行うときに見られるように)。呼び出し元のクライアントは、InputExceptionとFatalExceptionを区別できる必要があります(個々の派生クラスを最適に区別しますが、それほど重要ではありません)。今のところ唯一の方法は、メッセージを解析し、テキストを "--->"の前に取り除き、テキストをオンにすることです。それは明らかに最適ではありません。
私はカスタムコードでSoapExceptionsをスローすることができますが、可能ならばそれを避けたいと思います。さらに、XMLを扱う人のために設計されているようですが、私たちのWebサービスコードはすべて、XMLには触れていません。すでにデシリアライズされています。
要するに、Webサービスからカスタム例外をスローし、呼び出し側のクライアントが例外を区別できる方法がありますか?
ありがとうございました!私は私のカスタムクラスをSoapExceptionから派生させてから、コンストラクタを使ってXmlNodesを構築できるのだろうかと疑問に思うでしょう。 – user1079591
@ user1079591はい、できます。それは実際には非常に良い方法です。 –
だから私はあなたが示唆したように、クライアントコードではSoapExceptionとしてキャッチしていませんが、System.ServiceModel.FaultExceptionとしてキャッチしています。私のコードでは、私は2つのキャッチブロックを持っています:1つはSoapException用、もう1つは通常のException用です。ジェネリック型のGetType()は、System.ServiceModel.FaultException型であることを示します。 – user1079591