- 创建标有DataContract属性
- 马克自定义错误类方法关于服务与FaultContract合同界面。 IE浏览器。
[FaultContract(typeof(CustomFault))]
- 在您的服务方法中,捕获任何适用的内部异常并抛出FaultException<CustomFault>。或者,如marc_s所述,您可以使用IErrorHandler将异常映射到故障。
就我个人而言,我创建了一个具有Reason属性的基本Fault类,并且扩展了此类中的所有自定义故障。当我要扔的错,我呼吁:
throw Fault.Create<CustomFault>(new CustomFault("Boo hoo"));
这也是值得注意的是,我的版本是我的错类(包括常见的故障类)与我的所有其他服务一起。但是,如果服务版本控制是一个问题,这只是一个问题。
这里是基本的故障类(我已经删除了简洁参数验证):
[DataContract(Namespace = XmlVersionNamespace.FaultNamespace)]
public abstract class Fault
{
internal FaultReason Reason { get; set; }
protected Fault(string reasonText)
{
Reason = new FaultReason(new FaultReasonText(reasonText, CultureInfo.CurrentUICulture));
}
public override string ToString()
{
return Reason.ToString();
}
internal static FaultException<TDetail> Create<TDetail>(TDetail fault) where TDetail : Fault
{
return new FaultException<TDetail>(fault, fault.Reason);
}
}
我不知道很多关于IErrorHandler但我读文章和使用IErrorHandler的帖子说它有一些缺点。在某些情况下,可能会直接从wcf服务向客户端抛出异常。你会推荐我IErrorHandler? – 2009-10-08 08:55:13
是的,无论如何 - 我会**总是推荐使用IErrorHandler。你可以发布链接到这些文章,说它有缺点?从来没有听说过这些 - 我想调查.... – 2009-10-08 08:56:24
http://stackoverflow.com/questions/265551/wcf-errorhandler 阅读第二篇文章!我不知道它是否正确,但它总是在我心中造成困惑 – 2009-10-08 09:01:28