回答

1

是的,你可以序列化異常並使用WCF返回它們。我寫了一個應用程序,WCF客戶端需要在服務器上發生真正的異常;不僅僅是一個高水平的故障。

下面是步驟來實現我們所做的:

1 - 聲明一個類EncodedException與單一字符串屬性

public class EncodedException 
{ 
    public string SerializedException {get;set;} 
} 

2 - 在您的服務合同增加,表明該屬性的服務可能會返回一個FaultException異常。

[ServiceContract()] 
public class MyService 
{ 
    [OperationContract] 
    [FaultContract(typeof(EncodedException), 
        ProtectionLevel = ProtectionLevel.EncryptAndSign)] 
    public string Method1(); 
} 

3 - 在您服務實現在所有的服務操作添加一個try/catch:

public void Method1() 
{ 
    try 
    { 
     // some code here 
    } 
    catch(Exception ex) 
    { 
     EncodedException encodedException = Helper.SerializeException(ex); 
     throw new FaulException<EncodedException>(); 
    } 
} 

4 - 在您的客戶端代碼捕獲異常並解開它:

public void someMethod() 
{ 
    try 
    { 
     serviceClient.Method1(); 
    } 
    catch(FaulException<EncodedException> ex) 
    { 
     Exception decodedException = Helper.DeserializeException(ex); 
     throw new decodedException(); 
    } 
} 

5 - 編寫助手來序列化/反序列化異常。如果您還需要該部分的幫助,請告訴我。

我希望這會有所幫助。

+0

所以你可以直到我如何使用EntLib4.1來做到這一點 – BigOmar 2009-11-21 09:06:03

0

我不明白爲什麼不這樣做,如果您已經成功創建了一個可以通過經典asmx序列化的對象,那麼它在WCF中會很好。