2012-08-29 47 views
1

我想用custome的FaultException這樣WCF趕上定製的FaultException

[DataContract] 
public class Fault 
{ 
    [DataMember] 
    public string Message { get; set; } 
} 

public class MyFault<T>:FaultException<T> where T : Fault 
{ 
    public MyFault(T faultClass) 
     : base(faultClass, new FaultReason(faultClass.Message)) 
    { 

    } 
} 

...

throw new MyFault<Fault>(new Fault {Message = "hello"}); 

...

接口

[OperationContract] 
[FaultContract(typeof(Fault))] 
string GetData2(int value); 

但是當它到達客戶端它將轉變爲FaultE xception

 try 
     { 
      var res = serv.GetData2(1); 
     } 
     catch (MyFault<WcfService1Sample.Fault> ex) 
     { 
      label1.Text = ex.Reason.ToString(); //-> i want here 
     } 
     catch (FaultException<ServiceReference1.Fault> ex) 
     { 
      label1.Text = ex.Reason.ToString(); //-> catch here 
     } 
     catch (Exception) 
     { 

      throw; 
     } 

我可以在clint上捕獲自定義錯誤嗎? 或它的WCF自動轉換到的FaultException 如何使這一問題的工作

感謝幼獅

+0

你的'Fault'類應該有'DataContract'屬性,'Message'屬性應該是'DataMember'。 – shambulator

+0

你對我忘記把數據合同。但即使我添加它dosnt工作像我希望它的工作。 – kfir

回答

1

有兩個問題,我想。第一:

  • 什麼shambulator說:您的自定義Fault類必須是
    • 一個DataContract,並使用
    • DataMember來標記應編號的所有屬性。

如果這樣做了,那麼WCF會

  • 服務端throw new FaultException<MyFault>(new MyFault { ... });翻譯成其中包含你的錯,包括數據的消息;和
  • 將客戶端的此故障轉換爲FaultException<MyFault>

第二:

此客戶端FaultException<>由WCF生成。也許可以註冊一個自定義的Exception-Translator,但我從來沒有使用它,從不需要它,並且在Google搜索一分鐘後沒有找到這樣的事情。我建議只用FaultException加定製故障類型。

+0

謝謝。你對我搜索更多然後一分鐘我谷歌,可以找到它,爲什麼我發佈它。你也許正確我可以使用常規FaultException – kfir