1

如果我像msdn中的这篇文章一样使我的异常可序列化,那么我的异常可以通过 WCF 序列化吗?

4

2 回答 2

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 - 编写帮助程序来序列化/反序列化异常。如果你也需要这部分的帮助,请告诉我。

我希望这有帮助。

于 2009-11-18T14:11:17.610 回答
0

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

于 2009-11-18T11:18:04.977 回答