Ohjelmointi

Kuinka työskennellä kaupallisten WCF-palveluiden kanssa

WCF (Windows Communication Foundation) on turvallinen, luotettava ja skaalautuva viestintäalusta .Net-palvelujen kehittämiseen.

Tapahtuma on joukko lauseita, jotka suoritetaan noudattamalla ACID-periaatteita (ACID tarkoittaa Atomic-, Consistent-, Isolated- ja Durable-operaatioita). Kun jokin tapahtumalohkon toiminnoista epäonnistuu, koko tapahtuma keskeytetään, ts. Koko tapahtuma epäonnistuu. WCF tarjoaa tukea hajautettuihin tapahtumiin. Voit hyödyntää System.Transactions-nimiavaruuden TransactionScope-luokkaa tehokasta tapahtumien hallintaa varten, kun työskentelet .Netissä.

WCF-tapahtumien toteuttaminen

Tässä osiossa tutkitaan, miten voimme luoda kaupallisia WCF-palveluja. Aloita luomalla kaksi WCF-palvelua. Voit myös luoda toisen projektin (konsolin tai verkkoprojektin) palvelujen testaamiseksi. Kun kaksi WCF-palvelua on luotu, sinun tulee koristaa tapahtumaan kuuluvat operointisopimukset TransactionFlow-määritteellä. Tätä tarvitaan tapahtumatuen käyttöön ottamiseksi.

Tämä attribuutti hyväksyy TransactionFlowOption-luettelon parametrina. TransactionFlowOptionilla voi olla jokin seuraavista arvoista:

  • TransactionFlowOption.Allowed
  • TransactionFlowOption.Pakollinen
  • TransactionFlowOption.NotAllowed

Työskennellessäsi WCF: n kanssa sinun on ensin luotava palvelusopimus ja määriteltävä sitten huoltotoimet tai käyttösopimukset. Sinulla on WCF: ssä monia erityyppisiä sopimuksia - palvelusopimukset, datasopimukset, vikailmoitukset, sanomasopimukset ja operointisopimukset. Tässä esimerkissä käytämme palvelusopimuksia ja käyttösopimuksia, koska muut voivat olla valinnaisia. ServiceContract-palvelua käytetään määrittämään toiminnot, joita palveluasiakas voi käyttää. Tässä osiossa luodaan kaksi palvelusopimusta käyttämillemme kahdelle WCF-palvelulle.

Seuraava koodinpätkä kuvaa, kuinka voit määrittää TransactionFlow-määritteen WCF-palvelusopimuksessasi tarjoamaan transaktiotukea. Huomaa, että sinun on tehtävä sama myös muissa operaatiosopimuksissa (jotka ovat osa tapahtumaa).

[Palvelusopimus]

julkinen käyttöliittymä IOrderService

{

[OperationContract]

[TransactionFlow (TransactionFlowOption.Allowed)]

void AddOrder (tilausjärjestys);

}

Huomaa, että jokaisella palvelusopimuksella tulisi olla yksi tai useampia käyttösopimuksia langan yli altistuvien toimintojen määrittelemiseksi. Toimintasopimusta käytetään määrittelemään palvelumenetelmän allekirjoitus ja myös tapahtumavirta, palvelun toiminnan suunta ja mahdollisesti kaikki mahdolliset vikasopimukset.

Näin IOrderHeaderService-käyttöliittymä (palvelusopimus) näyttäisi.

[Palvelusopimus]

julkinen käyttöliittymä IOrderHeaderService

{

[OperationContract]

[TransactionFlow (TransactionFlowOption.Allowed)]

void AddOrderHeader (OrderHeader orderHeader);

}

Seuraavaksi sinun on varmistettava, että palvelumenetelmäsi on koristeltu TransactionScopeRequired -toiminnolla käyttämällä OperationBehavior-määritettä. Pohjimmiltaan sinun tulisi asettaa TransactionScopeRequired -ominaisuudeksi "true" operointisopimuksessa alla olevan koodinpätkän mukaisesti. Lausetta TransactionScopeRequired = true käytetään määrittämään, että palvelutoiminto tarvitsee tapahtumalaajuuden suoritettavaksi.

[OperationBehavior (TransactionScopeRequired = true)]

public void AddOrder (tilausjärjestys)

{

// Kirjoita koodi tähän lisätäksesi tilaustietueen tietokantaan

}

Sama muutos koskee myös muuta huoltotoimintaa.

[OperationBehavior (TransactionScopeRequired = true)]

public void AddOrderHeader (OrderHeader orderHeader)

{

// Kirjoita koodi tähän lisätäksesi tilauksen otsikkotietueen tietokantaan

}

Seuraava vaihe on määrittää palvelun määritystiedosto tapahtumien kulun mahdollistamiseksi. Olettaen, että käytät wsHttpBindingia, voit määrittää WCF-palvelun tarjoamaan tapahtumavirtatukea tällä tavalla.

Huomaa, että työskennellessäsi kaupallisten WCF-palvelujen kanssa voit valinnaisesti määrittää luotettavan viestinnän, joka vähentää tiedonsiirtovirheistä johtuvien keskeytettyjen tapahtumien mahdollisuutta. Sinun tulisi myös määrittää WCF-palvelun päätepisteet vastaavasti juuri määrittelemämme sidonnan hyödyntämiseksi.

bindingConfiguration = "Kaupallinen" sopimus = "Services.IOrderService">

Sinun on nyt hyödynnettävä System.Transactions-nimiavaruudessa olevaa TransactionScope-luokkaa, jotta voit soittaa palveluihisi yhdestä tapahtuma-alueesta. Tyypillisesti voit käyttää tätä luokkaa tapahtumalaajuuden toteuttamiseksi toisistaan ​​riippuvaisissa tapahtumissa ja samanaikaisten ristiriitojen ratkaisemiseksi työskennellessäsi ADO.Netin kanssa.

yrittää

{

using (TransactionScopeactionScope = new TransactionScope (TransactionScopeOption.RequiresNew))

  {

// Kirjoita koodi tähän, jos haluat soittaa palvelujesi palvelumenetelmiin täällä

actionScope.Complete ();

  }

}

saada kiinni

{

// Kirjoita koodi tähän käsittelemään poikkeuksia

}

Ja se on kaikki mitä sinun tarvitsee tehdä. Voit nyt suorittaa sovelluksesi ja testata transaktiopalvelusi.