У меня относительно простой вариант использования, который не работает. Рассмотрим следующий код:
[OperationBehavior(TransactionScopeRequired = true)]
public IEnumerable<StatusRecord> ReadActive(int contactID, bool isActive)
{
var result = from n in ORM.Default.Table<StatusRecord>()
where n.lng_contact_id == contactID && n.dte_effective_end == null
select n;
return result;
}
Это использует пользовательский поставщик LINQ-SQL нашего собственного злого происхождения. Обычно этот тип вызова прекрасно работает, но при использовании его из вызова WCF с транзакционным кодом DTC он зависает. Моя теория состоит в том, что сериализация результата в массив так или иначе происходит вне области транзакции и поэтому зависает. Кроме того, моя теория подтверждается тем фактом, что изменение линии
return result;
до
return result.ToArray();
заставляет вещи работать. Хотя я рад, что есть обходной путь, кажется, есть лучший способ добиться такого поведения. Пожалуйста, порекомендуйте. Спасибо!