我的应用程序中有一些非常规的异常使用。如果方法中发生异常,我将其作为结果对象的一部分传递,如下所示:
public class MethodResponse
{
public List<Exception> Errors {get; set;}
public int SomeResult {get; set;}
}
现在,我正在使用WCF分离业务层和UI层,我遇到了一个问题 - WCF不喜欢Exception对象,如果错误列表中存在一个,它会崩溃服务。我做了一些研究,看起来WCF无法序列化Exception类。
有解决方法吗?
答案 0 :(得分:6)
你需要记住一个大问题:WCF应该是可互操作的 - .NET异常不是 - 那些只是.NET。 Java或Ruby将无法处理您的异常....
您在WCF服务器和客户端之间传递的任何内容都必须是XML可序列化的。所以基本上,你需要做的是将这些异常包装成可互操作的SOAP故障 - 这些故障确实是可互操作和可序列化的。或者您需要定义自己的“WCFError”类型,它封装了.NET异常所需的所有信息 - 例如错误代码,错误消息等 - 并且在您的WCF服务器上,实现IErrorHandler接口并转换所有.NET异常进入您自己的错误类的实例并将其传递回调用者。
希望至少有一点帮助 - 没有灵丹妙药 - 你只需要知道WCF能够和不能处理什么 - 以及为什么。
答案 1 :(得分:2)
您可能需要考虑您所采用的方法是否正确。异常在.NET Framework中具有特定用途;它们不是为数据传输对象而设计的。您需要哪些与业务层之间转移到UI层的异常相关的信息?您可能需要考虑创建一个DTO Error类,其中包含您需要传输的每个异常的信息,然后返回DTO错误对象的List。