【发布时间】:2011-11-13 19:59:57
【问题描述】:
我有一个类(带有属性和一些方法)
[DataContract]
public partial class AbstractApplicationCallDto
{
[IgnoreDataMember]
private Exception exception;
[DataMember]
private string exceptionString;
[DataMember]
private string sessionId = null;
[DataMember]
private MyType myType = null;
}
当我将IgnoreDataMember 添加到异常类型的字段中时,我可以毫无问题地为客户端生成代码。但如果添加DataMember,则不会生成任何内容。
那为什么?如何将Exception 类型添加到DataContract?
【问题讨论】:
-
当您将异常字段标记为 [DataMember] 时,请更清楚地解释问题。异常是可序列化的,所以它应该可以工作。
-
@Mark 异常被标记为可序列化。非 .net 客户端可以将它用于许多不同的事情,例如读取错误消息和堆栈跟踪。
-
虽然我建议在服务中捕获异常并抛出自定义的肥皂错误 (msdn.microsoft.com/en-us/library/ms733721.aspx)。序列化并返回发生的实际异常听起来不是一个好主意。安全方面就是这样。客户可能对您的实际实施了解得太多。
-
@Ben Exception 是可序列化的,但许多继承自 Exception 的类不是。如果将其设置为这些子类型之一,您可能会遇到问题。尝试返回异常时必须非常小心。