Programmēšana

Kā strādāt ar WCF darījumiem

WCF (Windows Communication Foundation) ir droša, uzticama un pielāgojama ziņojumapmaiņas platforma pakalpojumu izveidei .net.

Darījums ir paziņojumu kopums, kas tiek izpildīts, ievērojot ACID principus (ACID apzīmē operācijas Atomic, Consistent, Isolated un Durable). Kad viena no darījumu bloka operācijām neizdodas, viss darījums tiek pārtraukts, t.i., viss darījums neizdodas. WCF nodrošina atbalstu izplatītām darījumu operācijām. Varat izmantot sistēmā esošo TransactionScope klasi. Darījumu nosaukumvieta efektīvai darījumu pārvaldībai, strādājot .Net.

WCF darījumu īstenošana

Šajā sadaļā mēs izpētīsim, kā mēs varam izveidot darījumu WCF pakalpojumus. Lai sāktu, izveidojiet divus WCF pakalpojumus. Lai pārbaudītu savus pakalpojumus, varat arī izveidot citu projektu (konsoli vai tīmekļa projektu). Kad abi WCF pakalpojumi ir izveidoti, jums vajadzētu izrotāt darbības līgumus, kas būtu daļa no darījuma, ar atribūtu TransactionFlow. Tas ir nepieciešams, lai iespējotu darījumu atbalstu.

Šis atribūts kā parametru pieņem TransactionFlowOption uzskaiti. TransactionFlowOption var būt viena no šīm vērtībām:

  • TransactionFlowOption. Atļauts
  • TransactionFlowOption. Obligāts
  • TransactionFlowOption.NotAllowed

Strādājot ar WCF, vispirms jāizveido pakalpojumu līgums un pēc tam tajā jānosaka pakalpojumu darbības vai darbības līgumi. Jums WCF ir daudz dažādu līgumu veidu - pakalpojumu līgumi, datu līgumi, kļūdu līgumi, ziņojumu līgumi un darbības līgumi. Šajā piemērā mēs izmantosim pakalpojumu līgumus un ekspluatācijas līgumus, jo pārējie var būt neobligāti. ServiceContract tiek izmantots, lai norādītu darbības, kuras pakalpojumu klientam ir pieejamas patērēšanai. Šajā sadaļā mēs izveidosim divus pakalpojumu līgumus par diviem mūsu izmantotajiem WCF pakalpojumiem.

Šis koda fragments parāda, kā varat konfigurēt atribūtu TransactionFlow savā WCF pakalpojumu līgumā, lai nodrošinātu darījumu atbalstu. Ņemiet vērā, ka tas pats jādara arī citos operāciju līgumos (kas ir daļa no darījuma).

[ServiceContract]

publiskā saskarne IOrderService

{

[OperationContract]

[TransactionFlow (TransactionFlowOption.Allowed)]

anulēt AddOrder (pasūtījuma pasūtījums);

}

Ņemiet vērā, ka katram pakalpojumu līgumam ir jābūt vienam vai vairākiem darbības līgumiem, lai noteiktu darbības, kuras tiek pakļautas pa vadu. Darbības līgums tiek izmantots, lai definētu pakalpojumu metodes parakstu, kā arī darījuma plūsmu, pakalpojuma darbības virzienu un pēc izvēles visus saistītos līgumus.

Lūk, kā izskatītos IOrderHeaderService interfeiss (pakalpojumu līgums).

[ServiceContract]

publiskā saskarne IOrderHeaderService

{

[OperationContract]

[TransactionFlow (TransactionFlowOption.Allowed)]

void AddOrderHeader (OrderHeader orderHeader);

}

Pēc tam jums jāpārliecinās, ka jūsu pakalpojumu metode ir dekorēta ar TransactionScopeRequired, izmantojot atribūtu OperationBehavior. Būtībā operācijas līgumā rekvizītam TransactionScopeRequired ir jāiestata kā “true”, kā parādīts zemāk esošajā koda fragmentā. Izraksts TransactionScopeRequired = true tiek izmantots, lai norādītu, ka pakalpojuma operācijai ir nepieciešama darījuma darbības joma.

[OperationBehavior (TransactionScopeRequired = true)]

public void AddOrder (Pasūtījuma pasūtījums)

{

// Šeit ierakstiet kodu, lai datu bāzē pievienotu pasūtījumu ierakstu

}

Tās pašas izmaiņas attiecas arī uz citu apkalpošanas darbību.

[OperationBehavior (TransactionScopeRequired = true)]

public void AddOrderHeader (OrderHeader orderHeader)

{

// Šeit ierakstiet kodu, lai datu bāzei pievienotu pasūtījuma galvenes ierakstu

}

Nākamais solis ir konfigurēt pakalpojuma konfigurācijas failu, lai iespējotu darījumu plūsmu. Pieņemot, ka izmantojat wsHttpBinding, lūk, kā jūs varat konfigurēt savu WCF pakalpojumu, lai nodrošinātu darījumu plūsmas atbalstu.

Ievērojiet, ka, strādājot ar darījumu WCF pakalpojumiem, pēc izvēles varat norādīt uzticamu ziņojumapmaiņu, lai mazinātu iespēju pārtraukt darījumus sakaru kļūmju dēļ. Jums vajadzētu arī atbilstoši konfigurēt savus WCF pakalpojuma galapunktus, lai izmantotu tikko definēto saistīšanu.

bindingConfiguration = "Darījuma" līgums = "Services.IOrderService">

Tagad jums būs jāizmanto TransactionScope klases priekšrocības, kas atrodas sistēmā. Darījumu nosaukumvieta, lai izsauktu savus pakalpojumus no viena darījuma tvēruma. Parasti jūs varat izmantot šo klasi, lai ieviestu darījumu apjomu savstarpēji atkarīgu darījumu apstrādei un vienlaikus risinātu konfliktus, strādājot ar ADO.Net.

mēģiniet

{

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

  {

// Uzrakstiet kodu šeit, lai šeit izsauktu savu pakalpojumu apkalpošanas metodes

actionScope.Complete ();

  }

}

noķert

{

// Uzrakstiet kodu šeit, lai apstrādātu izņēmumus

}

Un tas ir viss, kas jums jādara. Tagad jūs varat izpildīt savu lietojumprogrammu un pārbaudīt savus darījumu pakalpojumus.

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