Programiranje

Kako delati s transakcijskimi storitvami WCF

WCF (Windows Communication Foundation) je varna, zanesljiva in razširljiva platforma za sporočanje za razvoj storitev v .Netu.

Transakcija je niz stavkov, ki se izvedejo po načelih ACID (ACID pomeni Atomske, dosledne, izolirane in trajne operacije). Ko ena od operacij v bloku transakcij ne uspe, je celotna transakcija prekinjena, tj. Celotna transakcija ne uspe. WCF nudi podporo za porazdeljene transakcijske operacije. Za učinkovito upravljanje transakcij pri delu v .Net lahko izkoristite razred TransactionScope, ki je prisoten v imenskem prostoru System.Transactions.

Izvajanje transakcij WCF

V tem poglavju bomo raziskali, kako lahko ustvarimo transakcijske storitve WCF. Za začetek ustvarite dve storitvi WCF. Za preizkus svojih storitev lahko ustvarite tudi drug projekt (konzolo ali spletni projekt). Ko sta ustvarjeni dve storitvi WCF, morate okrasiti pogodbe o operacijah, ki bi bile del transakcije, z atributom TransactionFlow. To je potrebno za omogočanje podpore transakcijam.

Ta atribut kot parameter sprejme naštevanje TransactionFlowOption. TransactionFlowOption ima lahko eno od naslednjih vrednosti:

  • TransactionFlowOption.Allowed
  • TransactionFlowOption.Obvezno
  • TransactionFlowOption.NotAllowed

Pri delu z WCF morate najprej ustvariti pogodbo o storitvi in ​​nato v njej definirati storitvene operacije ali operativne pogodbe. V WCF imate veliko različnih vrst pogodb - pogodbe o storitvah, pogodbe o podatkih, pogodbe o napakah, pogodbe o sporočilih in pogodbe o delovanju. V tem primeru bomo uporabili pogodbe o storitvah in pogodbe o obratovanju, saj so ostale lahko neobvezne. ServiceContract se uporablja za določanje operacij, ki jih ima na voljo odjemalec storitve. V tem poglavju bomo ustvarili dve pogodbi o storitvah za dve storitvi WCF, ki ju uporabljamo.

Naslednji delček kode prikazuje, kako lahko v pogodbi o storitvah WCF konfigurirate atribut TransactionFlow, da zagotovite podporo pri transakcijah. Upoštevajte, da morate enako storiti tudi pri drugih operativnih pogodbah (ki so del transakcije).

[ServiceContract]

javni vmesnik IOrderService

{

[OperationContract]

[TransactionFlow (TransactionFlowOption.Allowed)]

neveljavno AddOrder (naročilo naročila);

}

Upoštevajte, da mora imeti vsaka pogodba o storitvah eno ali več operativnih pogodb, ki opredeljujejo operacije, ki so izpostavljene prek žice. Pogodba o operaciji se uporablja za opredelitev podpisa storitvene metode in tudi transakcijskega toka, smeri servisne operacije in po želji morebitne pogodbe (-e) o napakah, ki so lahko povezane.

Evo, kako bi izgledal vmesnik IOrderHeaderService (pogodba o storitvi).

[ServiceContract]

javni vmesnik IOrderHeaderService

{

[OperationContract]

[TransactionFlow (TransactionFlowOption.Allowed)]

void AddOrderHeader (OrderHeader orderHeader);

}

Nato se prepričajte, da je vaša metoda storitve okrašena z TransactionScopeRequired z uporabo atributa OperationBehavior. V bistvu morate lastnost TransactionScopeRequired nastaviti na "true" v operacijski pogodbi, kot je prikazano v spodnjem delčku kode. Stavek TransactionScopeRequired = true se uporablja za določitev, da mora operacija storitve izvesti obseg transakcije.

[OperationBehavior (TransactionScopeRequired = true)]

public void AddOrder (naročilo naročila)

{

// Tukaj napišite kodo, da v bazo podatkov dodate zapis naročila

}

Ista sprememba velja tudi za drugo storitev.

[OperationBehavior (TransactionScopeRequired = true)]

javna void AddOrderHeader (OrderHeader orderHeader)

{

// Tukaj napišite kodo, da v bazo podatkov dodate zapis glave naročila

}

Naslednji korak je konfiguriranje konfiguracijske datoteke storitve, da omogočite tok transakcij. Ob predpostavki, da uporabljate wsHttpBinding, tukaj lahko nastavite storitev WCF tako, da zagotavlja podporo za tok transakcij.

Upoštevajte, da lahko pri delu s transakcijskimi storitvami WCF po želji določite zanesljivo sporočanje, da zmanjšate možnost prekinjenih transakcij zaradi komunikacijskih napak. Prav tako morate konfigurirati končne točke storitve WCF, da izkoristite pravkar definirano vezavo.

bindingConfiguration = "Transakcijska" pogodba = "Services.IOrderService">

Zdaj bi morali izkoristiti razred TransactionScope, ki je prisoten v imenskem prostoru System.Transaction, da pokličete svoje storitve znotraj enega obsega transakcije. Običajno lahko ta razred uporabite za izvajanje obsega transakcij za obdelavo medsebojno odvisnih transakcij in reševanje konfliktov sočasnosti pri delu z ADO.Net.

poskusite

{

z uporabo (TransactionScopeactionScope = new TransactionScope (TransactionScopeOption.RequiresNew))

  {

// Tukaj napišite kodo, če želite tukaj poklicati načine storitev svojih storitev

actionScope.Complete ();

  }

}

ulov

{

// Tukaj napišite kodo za obravnavo izjem

}

In to je vse, kar morate storiti. Zdaj lahko zaženete svojo aplikacijo in preizkusite svoje transakcijske storitve.