Programovanie

Ako pracovať s transakčnými službami WCF

WCF (Windows Communication Foundation) je bezpečná, spoľahlivá a škálovateľná platforma na zasielanie správ pre vývoj služieb v .Net.

Transakcia je sada príkazov, ktoré sa vykonávajú podľa zásad ACID (ACID znamená Atómová, Konzistentná, Izolovaná a Trvalá operácia). Keď jedna z operácií v transakčnom bloku zlyhá, celá transakcia sa preruší, t. J. Celá transakcia zlyhá. WCF poskytuje podporu pre distribuované transakčné operácie. Triedu TransactionScope, ktorá sa nachádza v mennom priestore System.Transaction, môžete využiť na efektívnu správu transakcií pri práci v .Net.

Implementácia transakcií WCF

V tejto časti preskúmame, ako môžeme vytvoriť transakčné služby WCF. Ak chcete začať, vytvorte dve služby WCF. Môžete tiež vytvoriť ďalší projekt (konzola alebo webový projekt) na otestovanie svojich služieb. Po vytvorení dvoch služieb WCF by ste mali operačné zmluvy, ktoré by boli súčasťou transakcie, ozdobiť atribútom TransactionFlow. To je potrebné na povolenie podpory transakcií.

Tento atribút prijíma výčet TransactionFlowOption ako parameter. TransactionFlowOption môže mať jednu z nasledujúcich hodnôt:

  • TransactionFlowOption. Povolené
  • TransactionFlowOption. Povinné
  • TransactionFlowOption.NotAllowed

Pri práci s WCF musíte najskôr vytvoriť zmluvu o službe a potom v nej definovať operácie služby alebo zmluvy o prevádzke. Vo WCF máte veľa rôznych typov zmlúv - zmluvy o službách, zmluvy o údajoch, zmluvy o chybách, zmluvy o správach a zmluvy o prevádzke. V tomto príklade použijeme zmluvy o poskytovaní služieb a zmluvy o prevádzke, pretože ostatné môžu byť voliteľné. ServiceContract sa používa na určenie operácií, ktoré sú klientovi služby k dispozícii na spotrebovanie. V tejto časti vytvoríme dve zmluvy o službách pre dve služby WCF, ktoré používame.

Nasledujúci úryvok kódu ilustruje, ako môžete nakonfigurovať atribút TransactionFlow vo svojej zmluve o službe WCF tak, aby poskytoval transakčnú podporu. To isté musíte urobiť aj v ostatných prevádzkových zmluvách (ktoré sú súčasťou transakcie).

[Servisná zmluva]

verejné rozhranie IOrderService

{

[OperationContract]

[TransactionFlow (TransactionFlowOption.Allowed)]

void AddOrder (objednávka objednávky);

}

Upozorňujeme, že každá zmluva o poskytovaní služieb by mala mať jednu alebo viac zmlúv o prevádzke, ktoré definujú operácie, ktoré sú odkryté po drôte. Zmluva o prevádzke sa používa na definovanie podpisu metódy služby a tiež toku transakcií, smeru operácie služby a voliteľne akýchkoľvek zmlúv o poruchách, ktoré môžu byť spojené.

Takto by vyzeralo rozhranie (zmluva o poskytovaní služieb) IOrderHeaderService.

[Servisná zmluva]

verejné rozhranie IOrderHeaderService

{

[OperationContract]

[TransactionFlow (TransactionFlowOption.Allowed)]

void AddOrderHeader (OrderHeader orderHeader);

}

Ďalej by ste sa mali ubezpečiť, že vaša metóda služby je zdobená TransactionScopeRequired pomocou atribútu OperationBehavior. V zásade by ste mali v zmluve o prevádzke nastaviť vlastnosť TransactionScopeRequired na „true“, ako je uvedené v útržku kódu nižšie. Príkaz TransactionScopeRequired = true sa používa na určenie, že operácia služby vyžaduje vykonanie rozsahu transakcie.

[OperationBehavior (TransactionScopeRequired = true)]

public void AddOrder (objednávka)

{

// Sem napíšete kód na pridanie záznamu objednávky do databázy

}

Rovnaká zmena sa týka aj ostatných prevádzkových služieb.

[OperationBehavior (TransactionScopeRequired = true)]

public void AddOrderHeader (OrderHeader orderHeader)

{

// Sem napíšete kód na pridanie záznamu hlavičky objednávky do databázy

}

Ďalším krokom je konfigurácia vášho konfiguračného súboru služby, aby sa povolil tok transakcií. Za predpokladu, že používate wsHttpBinding, tu je postup, ako môžete nakonfigurovať svoju službu WCF tak, aby poskytovala podporu toku transakcií.

Upozorňujeme, že pri práci s transakčnými službami WCF môžete voliteľne určiť spoľahlivé správy, aby sa zriedila možnosť prerušených transakcií z dôvodu zlyhania komunikácie. Mali by ste tiež zodpovedajúcim spôsobom nakonfigurovať svoje koncové body služby WCF, aby ste využili väzbu, ktorú sme práve definovali.

bindingConfiguration = "Transactional" contract = "Services.IOrderService">

Teraz by ste museli volať na svoje služby z jedného rozsahu transakcie, aby ste využili výhodu triedy TransactionScope prítomnej v mennom priestore System.Transactions. Túto triedu môžete zvyčajne použiť na implementáciu rozsahu transakcií na spracovanie vzájomne závislých transakcií a riešenie konfliktov súbežnosti pri práci s ADO.Net.

skús

{

pomocou (TransactionScopeactionScope = nový TransactionScope (TransactionScopeOption.RequiresNew))

  {

// Sem napíšete kód, aby ste sem zavolali spôsoby poskytovania služieb svojich služieb

transactionScope.Complete ();

  }

}

chytiť

{

// Sem napíšete kód na spracovanie výnimiek

}

A to je všetko, čo musíte urobiť. Teraz môžete spustiť svoju aplikáciu a otestovať svoje transakčné služby.

$config[zx-auto] not found$config[zx-overlay] not found