2010-02-22 41 views
2

我的应用程序中有一些非常规的异常使用。如果有异常的方法发生了,我把它作为结果对象的一部分,水木清华这样的:在WCF中传递异常作为响应的一部分

pubic class MethodResponse 
{ 
    public List<Exception> Errors {get; set;} 
    public int SomeResult {get; set;} 
} 

现在,我使用WCF分离业务层和用户界面层,和我得到的问题 - WCF不喜欢Exception对象,如果出现在Errors列表中,它会使服务崩溃。我做了一些研究,看起来WCF不能序列化Exception类。

是否有解决方法?

谢谢 安德烈

回答

2

您可能想考虑您采取的方法是否正确。例外在.NET Framework中有特定的用途;它们不是为数据传输对象而设计的。您需要哪些信息(与例外有关)从业务层返回到UI层?您可能需要考虑创建一个DTO错误类,其中包含您需要传输的每个异常的信息,然后返回DTO错误对象的列表。

+0

我实际上正在考虑创建一个Error类,它几乎可以模仿Exception模型并用它来代替,我只是想在没有做出这些改变的情况下查看是否有任何事情可以做到。 – Andrey 2010-02-22 23:43:16

6

你需要记住的一个大问题:WCF应该是互操作性 - .NET异常都没有 - 这些仅是.NET。 Java或Ruby将无法处理您的例外......

您在WCF服务器和客户端之间传递的任何内容必须是XML可序列化的。所以基本上,你需要做的是将这些异常包装到可互操作的SOAP错误中 - 这些错误确实是可互操作和可序列化的。或者您需要定义自己的“WCFError”类型,它封装了.NET异常所需的所有信息 - 例如错误代码,错误消息等 - 并在您的WCF服务器上实现IErrorHandler接口并将所有.NET异常到你自己的错误类的实例中,并将其传递给调用者。

希望至少有一点帮助 - 没有魔力 - 你只需要知道WCF可以和不可以处理什么 - 以及为什么。

+1

Sage advice here,@marc_s – 2016-10-06 18:45:54

相关问题