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. ATransactionFlowProtocol
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ő | MustUnderstand egyenlő.true |
Feldolgozás |
A tranzakció nem egyezik a várt protokollformátummal | Kötelező | MustUnderstand egyenlő.false |
Elutasítva, mert tranzakcióra van szükség |
A tranzakció nem egyezik a várt protokollformátummal | Engedélyezve | MustUnderstand egyenlő.false |
Elutasítva, mert a fejléc nem értelmezhető |
Tranzakció bármilyen protokollformátummal | Nem engedélyezett | MustUnderstand egyenlő.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.