Megosztás a következőn keresztül:


Tranzakciófolyamat engedélyezése

A Windows Communication Foundation (WCF) rendkívül rugalmas lehetőségeket biztosít a tranzakciós folyamatok szabályozásához. A szolgáltatás tranzakciós folyamatbeállításai attribútumok és konfigurációk kombinációjával fejezhetők ki.

Tranzakciós folyamat Gépház

A tranzakciófolyamat-beállítások a következő három érték metszetének eredményeként jönnek létre egy szolgáltatásvégponthoz:

  • A TransactionFlowAttribute szolgáltatási szerződés minden metódusához megadott attribútum.

  • Az TransactionFlow adott kötés kötési tulajdonsága.

  • Az TransactionFlowProtocol adott kötés kötési tulajdonsága. A TransactionFlowProtocol kötési tulajdonság lehetővé teszi, hogy két különböző tranzakcióprotokoll közül válasszon, amelyekkel tranzakciót bonyolíthat le. A következő szakaszok röviden ismertetik mindegyiket.

WS-AtomicTransaction Protokoll

A WS-AtomicTransaction (WS-AT) protokoll akkor hasznos, ha külső protokollveremekkel való együttműködésre van szükség.

OleTransactions Protokoll

Az OleTransactions protokoll akkor hasznos, ha nem szükséges együttműködni a külső protokollveremekkel, és a szolgáltatás üzembe helyezője előre tudja, hogy a WS-AT protokollszolgáltatás helyileg le van tiltva, vagy a meglévő hálózati topológia nem támogatja a WS-AT használatát.

Az alábbi táblázat a különböző kombinációk használatával létrehozható tranzakciós folyamatok különböző típusait mutatja be.

TransactionFlow

kötéshez
TransactionFlow kötési tulajdonság TransactionFlowProtocol kötési protokoll Tranzakciós folyamat típusa
Kötelező true WS-AT A tranzakciót átjárható WS-AT formátumban kell lebonyolítani.
Kötelező true OleTransactions A tranzakciót WCF OleTransactions formátumban kell lebonyolítani.
Kötelező false Nem alkalmazható Nem alkalmazható, mert érvénytelen konfigurációról van szó.
Engedélyezve true WS-AT A tranzakció átjárható WS-AT formátumban is történhet.
Engedélyezve true OleTransactions A tranzakció WCF OleTransactions formátumban is továbbítható.
Engedélyezve false Bármilyen érték A tranzakció nincs folyamatban.
Nem engedélyezett Bármilyen érték Bármilyen érték A tranzakció nincs folyamatban.

Az alábbi táblázat összefoglalja az üzenetfeldolgozás eredményét.

Bejövő üzenet TransactionFlow-beállítás Tranzakció fejléce Üzenetfeldolgozás eredménye
A tranzakció megfelel a várt protokollformátumnak Engedélyezett vagy kötelező MustUnderstandegyenlő.true Feldolgozás
A tranzakció nem egyezik a várt protokollformátummal Kötelező MustUnderstandegyenlő.false Elutasítva, mert tranzakcióra van szükség
A tranzakció nem egyezik a várt protokollformátummal Engedélyezve MustUnderstandegyenlő.false Elutasítva, mert a fejléc nem értelmezhető
Tranzakció bármilyen protokollformátummal Nem engedélyezett MustUnderstandegyenlő.false Elutasítva, mert a fejléc nem értelmezhető
Nincs tranzakció Kötelező n/a Elutasítva, mert tranzakcióra van szükség
Nincs tranzakció Engedélyezve n/a Feldolgozás
Nincs tranzakció Nem engedélyezett n/a Feldolgozás

Bár a szerződés minden metódusa eltérő tranzakciófolyamat-követelményekkel rendelkezhet, a tranzakciós folyamat protokolljának beállítása a kötés szintjén van hatókörbe állítva. Ez azt jelenti, hogy az azonos végponttal (és így ugyanazzal a kötéssel) rendelkező összes metódus ugyanazt a tranzakciófolyamatot engedélyező vagy megkövetelő szabályzattal, valamint adott esetben ugyanazzal a tranzakcióprotokollval is rendelkezik.

Tranzakciófolyamat engedélyezése metódusszinten

A tranzakciós folyamatokra vonatkozó követelmények nem mindig azonosak a szolgáltatási szerződésben szereplő összes metódus esetében. Ezért a WCF egy attribútumalapú mechanizmust is biztosít, amely lehetővé teszi az egyes metódusok tranzakciós folyamatbeállításainak kifejezését. Ezt az a TransactionFlowAttribute szint határozza meg, amelyben egy szolgáltatásművelet elfogad egy tranzakciófejlécet. Ha engedélyezni szeretné a tranzakciós folyamatot, a szolgáltatásszerződés módszereit ezzel az attribútummal kell megjelölnie. Ez az attribútum az enumerálás egyik értékét TransactionFlowOption veszi fel, amelyben az alapértelmezett érték.NotAllowed Ha a megadott érték kivételével NotAllowed bármilyen érték van megadva, a metódusnak nem kell egyirányúnak lennie. A fejlesztők ezt az attribútumot használhatják metódusszintű tranzakciófolyamat-követelmények vagy korlátozások megadására a tervezéskor.

Tranzakciófolyamat engedélyezése végpontszinten

Az attribútum által biztosított metódusszintű tranzakciófolyamat-beállítás mellett a TransactionFlowAttribute WCF egy végpontszintű beállítást is biztosít a tranzakciós folyamathoz, hogy a rendszergazdák magasabb szinten szabályozhatják a tranzakciós folyamatot.

Ezt úgy érheti el, hogy engedélyezi TransactionFlowBindingElementvagy letiltja a bejövő tranzakciós folyamatot a végpont kötési beállításaiban, valamint megadhatja a bejövő tranzakciók kívánt tranzakcióprotokoll-formátumát.

Ha a kötés letiltotta a tranzakciós folyamatot, de a szolgáltatási szerződés egyik művelete bejövő tranzakciót igényel, akkor a rendszer érvényesítési kivételt vet ki a szolgáltatás indításakor.

A WCF által biztosított állandó kötések többsége tartalmazza azokat az transactionFlow attribútumokat és transactionProtocol attribútumokat, amelyekkel konfigurálhatja az adott kötést a bejövő tranzakciók elfogadásához. A konfigurációs elemek beállításával kapcsolatos további információkért lásd a kötést><.

A rendszergazda vagy a telepítő végpontszintű tranzakciós folyamat használatával konfigurálhatja a tranzakciós folyamat követelményeit vagy korlátait az üzembe helyezéskor a konfigurációs fájl használatával.

Biztonság

A rendszerbiztonság és az integritás biztosítása érdekében biztonságossá kell tennie az üzenetek cseréjét az alkalmazások közötti tranzakciók során. Nem továbbíthat és nem adhat ki tranzakciós adatokat olyan alkalmazásnak, amely nem jogosult részt venni ugyanabban a tranzakcióban.

Ha WCF-ügyfeleket hoz létre ismeretlen vagy nem megbízható webszolgáltatásokba metaadat-csere használatával, a webszolgáltatások műveleteire irányuló hívásoknak lehetőség szerint el kell tiltania az aktuális tranzakciót. Az alábbi példa bemutatja, hogyan teheti ezt meg.

//client code which has an ambient transaction  
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))  
{  
    // No transaction will flow to this operation  
    untrustedProxy.Operation1(...);  
    scope.Complete();  
}  
//remainder of client code  

Emellett a szolgáltatásokat úgy kell konfigurálni, hogy csak azoktól az ügyfelektől fogadják a bejövő tranzakciókat, amelyeket hitelesítettek és engedélyeztek. A bejövő tranzakciók csak akkor fogadhatók el, ha magas megbízhatóságú ügyfelektől származnak.

Házirend-állítások

A WCF szabályzat-állításokkal szabályozza a tranzakciós folyamatot. A házirend-állítások megtalálhatók a szolgáltatás szabályzatdokumentumában, amelyet szerződések, konfigurációk és attribútumok összesítése hoz létre. Az ügyfél HTTP GET vagy WS-MetadataExchange request-reply használatával szerezheti be a szolgáltatás szabályzatdokumentumát. Az ügyfelek ezután feldolgozhatják a szabályzatdokumentumot annak meghatározására, hogy egy szolgáltatási szerződés mely műveletei támogathatják vagy igényelhetik a tranzakciós folyamatot.

A tranzakciófolyamat-szabályzatok helyességi beállításai úgy befolyásolják a tranzakciós folyamatot, hogy megadják azokat a SOAP-fejléceket, amelyeket az ügyfélnek el kell küldenie egy szolgáltatásnak, hogy egy tranzakciót képviseljen. Minden tranzakciófejlécet egyenlővel MustUnderstand kell megjelölni true. Az egyébként megjelölt fejlécet tartalmazó üzeneteket a RENDSZER SOAP-hibával elutasítja.

Egyetlen műveleten csak egy tranzakcióval kapcsolatos szabályzat-állítás lehet jelen. A műveleten egynél több tranzakciós érvényességgel rendelkező szabályzatdokumentumok érvénytelennek minősülnek, és a WCF elutasítja. Emellett minden porttípuson belül csak egyetlen tranzakciós protokoll lehet jelen. Érvénytelennek minősülnek azok a szabályzatdokumentumok, amelyek egyetlen porttípuson belül egynél több tranzakciós protokollra hivatkoznak, és a ServiceModel Metadata Segédprogram (Svcutil.exe) elutasítja. Érvénytelennek minősülnek a kimeneti üzeneteken vagy egyirányú bemeneti üzeneteken tranzakciós állításokkal rendelkező szabályzatdokumentumok is.