可序列化的异常和WCF

时间:2009-11-18 11:06:00

标签: wcf exception serialization exception-handling serializable

如果我使我的异常Serializable像这样article from msdn,那么我的异常是否可以通过WCF序列化?

2 个答案:

答案 0 :(得分: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 - 编写Helper以序列化/反序列化异常。如果您也需要帮助,请告诉我。

我希望这会有所帮助。

答案 1 :(得分:0)

我不明白为什么不,如果你已经成功创建了一个可以在经典asmx上序列化的对象,那么它在WCF中就可以了。