- 創建標有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