【问题标题】:Custom Exception with WCFWCF 的自定义异常
【发布时间】:2012-12-07 19:47:33
【问题描述】:

嘿,我正在使用 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) { }
}

我做错了什么?我缺少一个属性吗?

【问题讨论】:

    标签: wcf exception-handling custom-exceptions faultexception


    【解决方案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) { }
    

    上述解决方案是错误的。

    【讨论】:

      【解决方案2】:

      您不需要将自定义错误建模为异常,而是将其建模为带有 DataMembers 的 DataContract,以获取您打算返回的信息。然后,在 WCF 服务上,只返回您类型的 FaultException。

      这个页面有一个关于如何建模的很好的示例: http://msdn.microsoft.com/en-us/library/ms752208.aspx

      【讨论】:

      • 另一方面,使用FaultException<TDetail> 可以让您两全其美。
      猜你喜欢
      • 2011-08-08
      • 1970-01-01
      • 2023-03-21
      • 2016-07-28
      • 2010-11-25
      • 2011-09-17
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多