【问题标题】:Why isn't my InnerException making it to the client?为什么我的 InnerException 没有发送给客户?
【发布时间】:2013-01-11 21:20:27
【问题描述】:

我在服务器上有以下代码:

if (actualRowCount > maxRows)
{
    throw new DomainException("OverMaxRowLimitException",
        new OverMaxRowLimitException(string.Format(MaxRowsMessage,
        actualRowCount, maxRows)));
}

这将创建一个新的DomainException,并设置了InnerException 属性集。我已经验证这是在调试器中设置的。

自定义异常是这样定义的:

public class OverMaxRowLimitException : Exception
{
    public OverMaxRowLimitException(string message)
    {
        this.Message = message;
    }

    public new string Message { get; set; }
}

这应该向客户端返回一个合理的错误消息,以便可以告诉用户有太多行。所以在加载完成处理程序中我们想要:

if (result.HasError)
{
    ShowError(result.Error.InnerException.Message);
}

很遗憾,InnerException 属性是 null。所以我们只需要检查外部异常消息的文本,它也没有正确地传输到客户端。

有人建议我需要:

<customErrors mode="Off" />

在网络配置文件中。这个我试过了,还是不行。

也有人建议我需要:

[KnownType(typeof(OverMaxRowLimitException))]

关于数据合同。现在除非我把它放在错误的地方,否则这也不起作用。

我还尝试将[Serializable] 添加到自定义异常中,并将其替换为通用Exception。这些都不起作用。

那么,为什么InnerException 属性为空。我错过了什么?

【问题讨论】:

标签: c# silverlight wcf-ria-services


【解决方案1】:

我想你应该使用

[FaultContract(typeof(OverMaxRowLimitException))]

为此您的运营合同。你的OverMaxRowLimitException 应该是可序列化的。

同样在使用中,我想抛出异常的正确方法是使用

throw new FaultException&lt;OverMaxRowLimitException&gt;(yourException);

【讨论】:

  • 异常设置了[Serializable] 属性。
  • 是的,我在你的问题中注意到了,另外我想你在你的配置中启用了``。
  • 是的,我们已经设置好了。但这对发布没有帮助。
  • 是的,最好在生产环境中关闭它,因为它可能会将所有服务器异常发送到客户端。这就是为什么有 FaultContract 只发送最终用户需要查看的故障详细信息。
  • 我正在调查 FaultContracts
猜你喜欢
  • 2019-03-04
  • 2010-11-28
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多