2 Stimmen

LINQ + WCF + Transaktionen

Ich habe einen relativ einfachen Anwendungsfall, der nicht funktioniert. Betrachten Sie den folgenden Code:

[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;
}

Dies geschieht mit einem benutzerdefinierten LINQ-SQL-Anbieter unserer eigenen bösen Ursprünge. Normalerweise funktioniert diese Art von Aufruf großartig, aber wenn es von einem DTC Transacted WCF-Aufruf verwendet wird, bleibt es hängen. Meine Theorie ist, dass die Serialisierung des Ergebnisses in ein Array irgendwie außerhalb des Transaktionsbereichs erfolgt und daher hängen bleibt. Außerdem wird meine Theorie durch die Tatsache gestützt, dass das Ändern der Zeile

return result;

zu

return result.ToArray();

lässt die Dinge funktionieren. Obwohl ich froh bin, eine Lösung gefunden zu haben, scheint es einen besseren Weg zu geben, um das Verhalten zu verbessern. Bitte beraten Sie mich. Ich danke Ihnen!

1voto

Ladislav Mrnka Punkte 355028

Verwenden Sie keine verzögerte Ausführung im WCF-Betrieb. Sie müssen Ihre Abfrage ausführen, bevor Sie das Ergebnis zurückgeben - das ist, was Sie in result.ToArray() getan haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X