为什么我的 InnerException 没有到达客户端
本文关键字:客户端 我的 InnerException 为什么 | 更新日期: 2023-09-27 17:56:15
我在服务器上有以下代码:
if (actualRowCount > maxRows)
{
throw new DomainException("OverMaxRowLimitException",
new OverMaxRowLimitException(string.Format(MaxRowsMessage,
actualRowCount, maxRows)));
}
这将创建一个具有 InnerException
属性集的新DomainException
。我已经验证了这是在调试器中设置的。
自定义例外定义如下:
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" />
在 Web 配置文件中。我试过这个,但它不起作用。
也有人建议我需要:
[KnownType(typeof(OverMaxRowLimitException))]
在数据协定上。现在,除非我把它放在错误的地方,否则这也不起作用。
我还尝试将[Serializable]
添加到自定义异常中,并将其替换为常规Exception
。这些都不起作用。
那么,为什么InnerException
属性为空。我错过了什么?
我想你应该使用
[FaultContract(typeof(OverMaxRowLimitException))]
为您的运营合同。并且您的OverMaxRowLimitException
应该是可序列化的。
同样在使用中,我想抛出异常的正确方法是使用
throw new FaultException<OverMaxRowLimitException>(yourException);