使用WCF进行自定义异常

时间:2012-12-20 10:05:28

标签: wcf exception-handling custom-exceptions faultexception

嘿,我正在使用Oleg Sych的解决方案通过WCF处理异常: link

一切都适用于已知的异常(例如InvalidOperationException和SystemException),但是当我尝试使用自己的自定义异常时,它不起作用,我得到以下wcf异常: “从管道读取错误:管道已经结束。(109,0x6d)”

这是我的自定义例外:

[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) { }
}
我在做错了什么?我错过了一个属性吗?

2 个答案:

答案 0 :(得分:0)

您不需要将自定义错误建模为异常,而是作为DataMetract的DataContract建立您想要返回的信息。然后,在WCF服务上,只返回类型的FaultException。

此页面提供了有关如何建模的良好示例: http://msdn.microsoft.com/en-us/library/ms752208.aspx

答案 1 :(得分:-1)

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) { }

上述解决方案错误。