我有一个看起来像这样的网络服务:
[ServiceContract]
public class MyService
{
[OperationContract]
public void BreakStuff()
{
throw new MyException();
}
}
它现在不是一个非常强大的网络服务,但你看 - 它会很棒!
如果我调用,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
为正常的 HTTP 200 响应调用,但是如果 web 方法抛出异常,WCF 永远不会调用SerializeReply
,所以我没有机会控制响应输出。
WCF 是否提供自定义错误响应的能力?