我有一组数据契约,它们充当我们希望公开的基类的包装器。一个简单的例子是:
[DataMember]
public List<decimal> Points
{
get
{
return sourceObject.ListPoints();
}
private set{}
}
我们还有一些其他属性,我们必须首先处理数据(我们正在转换对象图并且需要防止循环引用)。
我们看到的问题是这个 getter 会触发两次,一次在服务操作中,然后在序列化期间再次触发。这导致了两个问题:
- 我们手动添加到集合中,因为它运行了两次,集合中充满了欺骗。
- 如果在第二次运行期间抛出异常,它发生在操作中的 try/catch 之外,并且不会抛出错误。该服务抛出一个神秘的超时消息,查看错误的唯一方法是通过 WCF 跟踪日志。