Tranzakció kezelés

Topics: Magyar (Hungarian), Writing modules
Jun 16, 2014 at 8:44 AM
Sziasztok!

Lenne egy kérdésem. Van egy request az oldalam felé ami 3 másik külső szolgált szolgáltatást használ.
Konkrétan:
  • jön a hívás hogy kifizették az árut
  • le kell kérdezni a fizetés eredményét (1. külső szolg)
  • meg kell venni az árut (2. külső szolgáltatás)
  • Email-t kell küldeni(3. külső szolgáltatás)
Ha vmi nem sikerül akkor vissza adom hogy nem sikerült és ujra kezdi az egészet...
Egy request ugye egy tranzakció. De én szeretném valahol tárolni, hogy meddig jutott el a dolog. (azaz meghívom a szervizt ->letárolom az eredményt-> commit)
Hogy lehet ezt megoldani?
így?
https://orchard.codeplex.com/discussions/545125
a repository update az nem commitál magában ha jól gondolom...

üdv,
Developer
Jun 16, 2014 at 1:48 PM
A linkelt discussionben valóban megoldás van arra, hogy egy belső transactiont commitolj (ahol tehát mondjuk letárolod, hogy meddig jutott a művelet), anélkül, hogy az egész request transactionjét commitolnád. Szóval igen, az egy jó megoldás.
Jun 16, 2014 at 3:54 PM
Edited Jun 16, 2014 at 4:01 PM
Köszönöm!

Éa akkor a kód így néz ki?
using (var scope = _lifetimeScope.BeginLifetimeScope())
{
    var tr = scope.Resolve<ITransactionManager>();
    tr.RequireNew();
    try
    {
      var rep = scope.Resolve<IRepository<Entity>>();
      Function1(rep,.....);
    }
    catch (Exception ex)
    {
       tr.Cancel();
     }
    tr.RequireNew();
    try
    {
        Function2(scope,.....);
    }
    catch (Exception ex)
    {
        tr.Cancel();
    }
}
requirenew az commitálja ez előzőt?
Developer
Jun 16, 2014 at 4:11 PM
Jónak tűnik. Igen, commitolja.