У меня есть набор контрактов данных, которые действуют как оболочки для базовых классов, которые мы хотим предоставить. Быстрый пример:
[DataMember]
public List<decimal> Points
{
get
{
return sourceObject.ListPoints();
}
private set{}
}
У нас есть некоторые другие свойства, которые мы должны сначала обрабатывать данными (мы преобразовываем графы объектов и должны защищаться от циклических ссылок).
Проблема, которую мы видим, заключается в том, что этот геттер срабатывает дважды, один раз во время операции службы, а затем снова во время сериализации. Это вызывает две проблемы:
- Мы вручную добавляем в коллекции, так как это выполняется дважды, когда коллекции заполняются дубликатами.
- Если во время второго запуска возникает исключение, оно происходит за пределами операции try/catch и не приводит к ошибке. Служба выдает загадочное сообщение об истечении времени ожидания, и единственный способ увидеть ошибку — через журналы трассировки WCF.