středa 27. července 2011

WCF Transakce

Info:
http://msdn.microsoft.com/en-us/magazine/cc163688.aspx#S3


V každé literatuře o .NET se dočtete o podpoře transakcí uvniřt .NETu. A všechny příklady zabívající se touto problematikou jsou ukazovány na databázích. Nebudu zde popisovat jednotlivé programovací konstrukce, kterých se na netu v příkladech vyskytuje hodně. Zmíním jen konstrukci tzv. ambientní transakce, což je blok, uvnitř kterého probíhá automaticky transakce. Tato transakce se sama zahájí a na konci voláním metody Complete() se potvrdí.


using (TransactionScope sc = new TransactionScope)
{
sc.Complete();
}


Ale nyní přichází požadavek. Potřeboval bych naprogramovat pole objektů, které spravuji v paměti a potřebuji aby nad tímto polem fungovalo transakční zpracování. Je to možné? Funguje to? 
Odpověď zní ANO i NE.


Samozřejmě je o možné naprogramovat, ale nefunguje to automaticky. Nelze deklarovat před blokem proměnou, pak uvnitř bloku nastavit nějakou hodnotu této proměnné. Nakonec transakci nepotvrdit. Hodnota se nevrátí do původního stavu.


Proč?
Transakce můžeme využívat pouze transakčním zdrojem dat, nad transakčním modelem. Takovým transakčním zdrojem je například nějaké databázové připojení - SqlConnection. Pokud chceme transakce využívat pro jednoduché datové typy nebo objekty, musíme pro ně naprogramovat transakční zdroj. Na internetu lze stáhnout již naprogramované transakční zdroje:





Žádné komentáře: