WCF的自定义异常
嘿,我正在使用Oleg Sych的解决方案通过WCF处理异常: 对于已知的异常(如InvalidOperationException和SystemException),一切都可以正常工作,但当我尝试使用自己的自定义异常时,它不起作用,我得到以下wcf异常: 读取管道时出错:管道已结束。(109,0x6d) 这是我的自定义例外:WCF的自定义异常,wcf,exception-handling,custom-exceptions,faultexception,Wcf,Exception Handling,Custom Exceptions,Faultexception,嘿,我正在使用Oleg Sych的解决方案通过WCF处理异常: 对于已知的异常(如InvalidOperationException和SystemException),一切都可以正常工作,但当我尝试使用自己的自定义异常时,它不起作用,我得到以下wcf异常: 读取管道时出错:管道已结束。(109,0x6d) 这是我的自定义例外: [KnownType(typeof(SessionExpiredException))] [global::System.Serializable] [DataCont
[KnownType(typeof(SessionExpiredException))]
[global::System.Serializable]
[DataContract]
public class SessionExpiredException : Exception
{
public SessionExpiredException() { }
public SessionExpiredException(string message) : base(message) { }
public SessionExpiredException(string message, Exception inner) : base(message, inner) { }
protected SessionExpiredException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context)
: base(info, context) { }
}
我做错了什么?我是否缺少一个属性?您不需要将自定义错误建模为异常,而是将其作为与DataMembers的DataContract,以获取您想要返回的信息。然后,在WCF服务上,只返回您类型的FaultException 本页提供了一个关于如何建模的好示例:
上述解决方案是错误的。另一方面,使用
FaultException
可以让您两全其美。
public SessionExpiredException() { }
public SessionExpiredException(string message) : base(message) { }
public SessionExpiredException(string message, Exception inner) : base(message, inner) { }
protected SessionExpiredException(
System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context)
: base(info, context) { }