公開したい基本クラスのラッパーとして機能する一連のデータコントラクトがあります。簡単な例は次のとおりです。
[DataMember]
public List<decimal> Points
{
get
{
return sourceObject.ListPoints();
}
private set{}
}
最初にデータをマッサージする必要がある他のプロパティがいくつかあります(オブジェクトグラフを変換しており、循環参照から保護する必要があります)。
私たちが見ている問題は、このゲッターが2回起動することです。1回はサービス操作内で、もう1回はシリアル化中に起動します。これは2つの問題を引き起こしています:
- コレクションは2回実行されているため、コレクションに手動で追加します。コレクションは重複で埋められます。
- 2回目の実行中に例外がスローされた場合、それは操作のtry / catchの外部で発生し、障害をスローしません。このサービスは不可解なタイムアウトメッセージをスローします。エラーを確認する唯一の方法は、WCFトレースログを使用することです。