0

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

一切都适用于已知异常(例如 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) { }
}

我究竟做错了什么?我错过了一个属性吗?

4

2 回答 2

0

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

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

于 2012-12-20T22:06:10.463 回答
-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) { }

上述解决方案是错误的。

于 2013-09-20T11:23:49.360 回答