TransactionScope Dispose fällt in Deadlock


DrMueller

Erfahrenes Mitglied
Hallo Leute,

ich habe bei unserem Programm nach einigen Anpassungen einen interessanten Fehler gefunden, und zwar bei folgendem Code:
Code:
                try
                {
                    affectedRecords = _db.Update(_daINDIVIDUAL, dtData);
                    scope.Complete();
                }
                catch (System.Exception )
                {
                    affectedRecords = 0;
                    throw;
                }
                finally
                {
                    scope.Dispose();
                }
Ich versuche also ein Individual zu updaten. Das interessante: affectedRecords klappt, auch scope.Complete, geht. Bei scope.Dispose fällt er allerdings weg, bis er in einen Timeout kommt.
Session-mässig passt auf der DB alles, leider weiss ich nicht, was in diesem Dispose alle gemacht wird.

Ich weiss, die Frage ist sehr allgemein, mich würde vor allem interessieren, was da zwischen Complete und Dispose so passiert, ich denke, da muss ich ansetzen.

Das Speichern wird über Prozeduren gemacht, diese funktionieren allerdings, da sie auch von einem anderen Teil (nicht über die selbe Client-Logik) aufgerufen werden, und dort gibt es keinen Fehler.


Ich bedanke mich im Voraus für jeden Input, da ich (mal wieder) sträflich wenig über die Thematik weiss.



Matthias Müller
 

Nico Graichen

aka gemballa
Hi

Was kriegst du denn genau für einen Fehler?
Nutzt du den Sql Server? Wenn ja: Hast du dir mal über den Profiler den Deadlock Graph angeschaut. Vielleicht kommst du darüber an den zweiten Prozess?

Desweiteren würde ich in dem Fall das Dispose nicht im Finally aufrufen, sondern das von der Runtime über den using-Statement machen lassen, das bei unmanged Ressourcen zu empfehlen ist.

Also
C#:
using (TransactionScope scope = new TransactionScope())
{
    // do something
    scope.Complete();
}
Du kannst das ja mal probieren, vielleicht hilft das ja auch schon.
 

DrMueller

Erfahrenes Mitglied
Anscheinend macht tatsächlich erst das Dispose das Commit auf die DB? Scheint tatsächlich ein Datenbank Problem zu sein, muss der Spezialist genauer ansehen.

Passt Danke.