WCF捕获自定义FaultException



我想像这个一样使用自定义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);

但当它到达客户端时,它会转换为FaultException

      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我如何使这个问题工作

感谢kfir

我认为有两个问题。第一:

  • shambulator说:你的自定义Fault类必须是
    • DataContract,并使用
    • DataMember标记所有应序列化的属性

如果这样做了,那么WCF将

  • 将服务侧throw new FaultException<MyFault>(new MyFault { ... });转换为包含您的故障(包括数据)的消息;以及
  • 将客户端上的此故障转换为CCD_ 5

第二:

此客户端FaultException<>由WCF生成。也许人们可以注册一个自定义的异常翻译器,但我从未使用过,也从未需要过,在谷歌搜索一分钟后也没有发现这样的东西。我建议只使用FaultException加自定义故障类型。

相关内容

  • 没有找到相关文章

最新更新