【问题标题】:Serializable exception and WCF可序列化异常和 WCF
【发布时间】:2010-12-17 20:04:14
【问题描述】:

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

【问题讨论】:

    标签: wcf exception serialization exception-handling serializable


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

    我希望这会有所帮助。

    【讨论】:

    • 你能告诉我如何用 EntLib4.1 做到这一点
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多