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