我想像这个一样使用自定义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
加自定义故障类型。