我想像这样使用custome 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;
}我能抓到克林特的自定义错误吗?或WCF自动转换为FaultException,如何使此问题工作?
谢谢kfir
发布于 2012-08-29 09:57:16
我认为有两个问题。第一:
Fault类必须是DataContract,并使用DataMember标记所有应序列化的属性。
如果这样做了,WCF将
throw new FaultException<MyFault>(new MyFault { ... });转换为包含错误(包括数据)的消息;FaultException<MyFault>。第二:
此客户端FaultException<>由WCF生成。也许一个人可以注册一个自定义的异常翻译,但我从来没有使用过它,从来不需要它,也没有在谷歌搜索一分钟后找到这样的东西。我建议只使用FaultException加上自定义的错误类型。
https://stackoverflow.com/questions/12173870
复制相似问题