Programavimas

Kaip dirbti su sandorio WCF paslaugomis

WCF („Windows Communication Foundation“) yra saugi, patikima ir keičiamo dydžio pranešimų siuntimo platforma, skirta kurti paslaugas .Net.

Sandoris yra teiginių rinkinys, kuris vykdomas laikantis ACID principų (ACID reiškia Atomic, Consistent, Isolated ir Durable operacijas). Kai viena iš operacijų bloko operacijų nepavyksta, visa operacija nutraukiama, t. Y. Nepavyksta visos operacijos. WCF teikia paramą paskirstytoms operacijoms. Galite panaudoti sistemoje esančią „TransactionScope“ klasę. „Transactions“ vardų sritis, skirta efektyviam operacijų valdymui dirbant .Net.

WCF sandorių įgyvendinimas

Šiame skyriuje mes ištirsime, kaip galime sukurti sandorio WCF paslaugas. Norėdami pradėti, sukurkite dvi WCF paslaugas. Taip pat galite sukurti kitą projektą (konsolę ar žiniatinklio projektą), kad išbandytumėte savo paslaugas. Sukūrus dvi WCF paslaugas, turėtumėte papuošti operacijų dalis, kurios būtų sandorio dalis, su „TransactionFlow“ atributu. Tai reikalinga norint įgalinti operacijų palaikymą.

Šis atributas priima „TransactionFlowOption“ sąrašą kaip parametrą. „TransactionFlowOption“ gali turėti vieną iš šių reikšmių:

  • „TransactionFlowOption“. Leidžiama
  • TransactionFlowOption. Privaloma
  • TransactionFlowOption.NotAllowed

Dirbdami su WCF, pirmiausia turite sudaryti paslaugų sutartį ir tada apibrėžti joje paslaugų operacijas ar operacijų sutartis. WCF turite daug įvairių sutarčių rūšių - paslaugų sutartis, duomenų sutartis, klaidų sutartis, pranešimų sutartis ir operacijų sutartis. Šiame pavyzdyje naudosime paslaugų ir eksploatavimo sutartis, nes kitos gali būti neprivalomos. „ServiceContract“ naudojamas nurodyti operacijoms, kurias paslaugų klientas gali naudoti. Šiame skyriuje mes sukursime dvi paslaugų sutartis dviem mūsų naudojamoms WCF paslaugoms.

Šis kodo fragmentas parodo, kaip galite sukonfigūruoti „TransactionFlow“ atributą savo WCF paslaugų sutartyje, kad teiktų operacijų palaikymą. Atminkite, kad tą patį turite padaryti ir kitose operacijų sutartyse (kurios yra sandorio dalis).

[„ServiceContract“]

viešoji sąsaja „IOrderService“

{

[OperationContract]

[TransactionFlow (TransactionFlowOption.Allowed)]

anuliuoti „AddOrder“ (užsakymo tvarka);

}

Atkreipkite dėmesį, kad kiekviena paslaugų sutartis turėtų sudaryti vieną ar daugiau operacijų sutarčių, kad būtų apibrėžtos laido veikiamos operacijos. Operacijos sutartis naudojama apibrėžti paslaugos metodo parašą, taip pat sandorio eigą, paslaugos veikimo kryptį ir pasirinktinai bet kokią (-as) sutartį (-es), kuri (-ios) gali būti susieta.

Štai kaip atrodys „IOrderHeaderService“ sąsaja (paslaugų sutartis).

[„ServiceContract“]

viešoji sąsaja IOrderHeaderService

{

[OperationContract]

[TransactionFlow (TransactionFlowOption.Allowed)]

negaliojantis AddOrderHeader (OrderHeader orderHeader);

}

Tada turėtumėte įsitikinti, kad jūsų paslaugos metodas dekoruotas „TransactionScopeRequired“, naudojant „OperationBehavior“ atributą. Iš esmės operacijos sutartyje turėtumėte nustatyti „TransactionScopeRequired“ ypatybę „true“, kaip parodyta žemiau esančiame kodo fragmente. Sakinys TransactionScopeRequired = true naudojamas nurodyti, kad paslaugos operacijai atlikti reikia operacijos apimties.

[OperationBehavior (TransactionScopeRequired = true)]

public void „AddOrder“ (užsakymo tvarka)

{

// Čia įrašykite kodą, kad pridėtumėte užsakymo įrašą į duomenų bazę

}

Tas pats pakeitimas galioja ir kitai aptarnavimo operacijai.

[OperationBehavior (TransactionScopeRequired = true)]

public void „AddOrderHeader“ („OrderHeader“ užsakymo antraštė)

{

// Čia įrašykite kodą, kad pridėtumėte užsakymo antraštės įrašą į duomenų bazę

}

Kitas žingsnis - sukonfigūruokite savo paslaugų konfigūracijos failą, kad įgalintumėte operacijų srautą. Darant prielaidą, kad naudojate „wsHttpBinding“, štai kaip galite sukonfigūruoti savo WCF paslaugą teikti operacijų srauto palaikymą.

Atminkite, kad dirbdami su sandorio WCF paslaugomis galite pasirinkti patikimą pranešimų siuntimą, kad sumažintumėte galimybę nutraukti operacijas dėl ryšio sutrikimų. Taip pat turėtumėte atitinkamai sukonfigūruoti savo WCF paslaugos galinius taškus, kad pasinaudotumėte ką tik apibrėžtu susiejimu.

bindingConfiguration = "Sandorio" sutartis = "Services.IOrderService">

Dabar turėsite pasinaudoti sistemoje esančios „TransactionScope“ klasės pranašumais. „Transactions“ vardų sritis, kad iškviestumėte savo paslaugas iš vienos operacijos srities. Paprastai galite naudoti šią klasę, kad įgyvendintumėte operacijų sritį tvarkydami vienas nuo kito priklausančius sandorius ir išspręstumėte sutampamumo konfliktus dirbdami su ADO.Net.

bandyti

{

naudojant [TransactionScopeactionScope = new TransactionScope (TransactionScopeOption.RequiresNew])

  {

// Čia parašykite kodą, jei norite čia iškviesti savo paslaugų teikimo būdus

actionScope.Complete ();

  }

}

pagauti

{

// Čia parašykite kodą, kad galėtumėte tvarkyti išimtis

}

Ir tai viskas, ką jums reikia padaryti. Dabar galite vykdyti savo programą ir išbandyti sandorių paslaugas.