J'ai un cas d'utilisation relativement simple qui échoue. Considérez le code suivant:LINQ + WCF + Transactions
[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;
}
Ceci utilise un fournisseur LINQ-SQL personnalisé de nos propres origines maléfiques. Normalement, ce type d'appel fonctionne très bien, mais lorsqu'il est utilisé à partir d'un appel WCF DTC Transacted, il se bloque. Ma théorie est que la sérialisation du résultat dans un tableau se produit en quelque sorte en dehors de la portée de la transaction et se bloque donc. De plus, ma théorie est étayée par le fait que la modification de la ligne
return result;
à
return result.ToArray();
fait les choses fonctionnent. Bien que je suis heureux d'avoir une solution de contournement, il semble qu'il existe une meilleure façon d'obtenir ce comportement. S'il vous plaît donnez votre avis. Je vous remercie! N'utilisez pas l'exécution deffered dans l'opération WCF
Vous souhaitez matérialiser (ToList()/ToArray() etc) votre requête avant de la renvoyer à votre client WCF? – StuartLC