次のようなWebサービスがあります。
[ServiceContract]
public class MyService
{
[OperationContract]
public void BreakStuff()
{
throw new MyException();
}
}
今のところそれほど強力なWebサービスではありませんが、ご覧ください。すばらしいものになるでしょう。
を呼び出すと、WCFは例外をトラップし、HTTP 500を返し、 trueに設定されているBreakStuff()
場合は、オプションでシリアル化されたスタックトレースを吐き出します。IncludeExceptionDetailsInFaults
この動作をオーバーライドして、独自のカスタムエラーメッセージオブジェクトを吐き出し、HTTP 200を返したいと思います。特定の場合に例外をスローする方が、コードをtry / catchブロックで散らかしてすべてを処理するよりもクリーンだと思うので、これを実行したいと思います。 Webメソッドは、ある種のResultオブジェクトを返します。
私がやったことIDispatchMessageFormatter
は、契約を結んでいる自分自身で実装されています。
public interface IDispatchMessageFormatter
{
void DeserializeRequest(Message message, object[] parameters);
Message SerializeReply(MessageVersion messageVersion, object[] parameters, object result);
}
SerializeReply
は通常のHTTP200応答に対して呼び出されますが、Webメソッドが例外をスローした場合、WCFは呼び出さSerializeReply
れないため、応答出力を制御する機会が与えられません。
WCFはエラー応答をカスタマイズする機能を提供しますか?