ServiceModel transaction attribútumok
A Windows Communication Foundation (WCF) három szabványos System.ServiceModel attribútumon biztosít tulajdonságokat, amelyek lehetővé teszik a WCF-szolgáltatások tranzakcióinak viselkedésének konfigurálását:
TransactionFlowAttribute
Az TransactionFlowAttribute attribútum azt határozza meg, hogy egy szolgáltatásszerződésben lévő művelet hajlandó-e fogadni egy ügyféltől érkező bejövő tranzakciókat. Az attribútum a következő tulajdonsággal biztosítja ezt a vezérlőt: A tranzakciók az TransactionFlowOption enumerálás használatával határozzák meg, hogy egy bejövő tranzakció Mandatory, Allowedvagy NotAllowed.
Ez az egyetlen attribútum, amely a szolgáltatásműveleteket az ügyféllel folytatott külső interakciókhoz kapcsolja. A következő szakaszokban ismertetett attribútumok a művelet végrehajtásán belüli tranzakciók használatára vonatkoznak.
ServiceBehaviorAttribute
Az ServiceBehaviorAttribute attribútum a szolgáltatásszerződés implementálásának belső végrehajtási viselkedését határozza meg. Az attribútum tranzakcióspecifikus tulajdonságai a következők:
TransactionAutoCompleteOnSessionClose megadja, hogy befejezetlen tranzakciót hajt-e végre a munkamenet bezárásakor. Ennek a tulajdonságnak az alapértelmezett értéke a következő
false
: . Ha ez a tulajdonság ,true
és a bejövő munkamenet a hálózati vagy ügyfélhibák miatti zárás helyett kecsesen le lett állítva, a befejezetlen tranzakciók sikeresen befejeződnek. Ellenkező esetben, ha ez a tulajdonság,false
vagy ha a munkamenet nem lett kecsesen lezárva, a nem befejezett tranzakciók vissza lesznek állítva a munkamenet bezárásakor. Ha ez a tulajdonság,true
a bejövő csatornának munkamenet-alapúnak kell lennie.ReleaseServiceInstanceOnTransactionComplete megadja, hogy a mögöttes szolgáltatáspéldány kiadásra kerül-e egy tranzakció befejezésekor. Ennek a tulajdonságnak az alapértelmezett értéke a következő
true
: . A következő bejövő üzenet egy új mögöttes példány létrehozását eredményezi, amely elveti az előző példány esetleges tranzakciónkénti állapotát. A szolgáltatáspéldány kiadása egy belső művelet, amelyet a szolgáltatás hajt végre, és nincs hatással az ügyfelek által létrehozott meglévő kapcsolatokra vagy munkamenetekre. Ez a funkció egyenértékű a COM+ megfelelő aktiválási funkciójával. Ha a tulajdonság értéketrue
, ConcurrencyMode akkor a tulajdonságnak Singleegyenlőnek kell lennie. Ellenkező esetben a szolgáltatás érvénytelen konfigurációellenőrzési kivételt eredményez az indítás során.TransactionIsolationLevel meghatározza a szolgáltatáson belüli tranzakciókhoz használandó elkülönítési szintet; ez a tulajdonság az IsolationLevel egyik értéket veszi fel. Ha a helyi elkülönítési szint tulajdonság nem más, mint Unspecifieda bejövő tranzakciók elkülönítési szintjének meg kell egyeznie a helyi tulajdonság beállításával. Ellenkező esetben a rendszer elutasítja a bejövő tranzakciót, és a rendszer visszaküld egy hibát az ügyfélnek. Ha TransactionScopeRequired igen
true
, és nincs tranzakció, ez a tulajdonság határozza meg a IsolationLevel helyileg létrehozott tranzakcióhoz használandó értéket. Ha IsolationLevel a beállítás értéke Unspecified, IsolationLevelSerializable akkor a rendszer használja.TransactionTimeout megadja azt az időszakot, amelyen belül a szolgáltatásban létrehozott új tranzakciónak végre kell hajtania. Ha ezt az időpontot eléri, és a tranzakció nem fejeződött be, a művelet megszakad. A TimeSpan rendszer időtúllépésként használja azokat a TransactionScope műveleteket, amelyek TransactionScopeRequired új tranzakciót hoztak
true
létre és hoztak létre. Az időtúllépés a tranzakció létrehozásának és a kétfázisú véglegesítési protokoll 1. fázisának befejezéséig engedélyezett maximális időtartam. A használt időtúllépési érték mindig a tulajdonság és a TransactionTimeouttransactionTimeout
konfigurációs beállítás közötti alacsonyabb érték.
OperationBehaviorAttribute
Az OperationBehaviorAttribute attribútum a metódusok viselkedését adja meg a szolgáltatás implementációjában. Ezzel jelezheti a művelet konkrét végrehajtási viselkedését. Ennek az attribútumnak a tulajdonságai nem befolyásolják a szolgáltatásszerződés webszolgáltatás-leírási nyelvének (WSDL) leírását, és a WCF programozási modell tisztán elemei, amelyek lehetővé teszik a fejlesztők által egyébként implementált közös funkciókat.
Ez az attribútum a következő tranzakcióspecifikus tulajdonságokkal rendelkezik:
TransactionScopeRequired megadja, hogy egy metódusnak aktív tranzakciós hatókörön belül kell-e végrehajtania. Az alapértelmezett érték
false
. Ha az OperationBehaviorAttribute attribútum nincs beállítva egy metódushoz, az azt is jelenti, hogy a metódus nem lesz végrehajtva egy tranzakcióban. Ha egy művelethez nincs szükség tranzakciós hatókörre, az üzenetfejlécben található tranzakciók nem aktiválva lesznek, és a IncomingMessagePropertiesOperationContextművelet részeként maradnak. Ha egy művelethez tranzakciós hatókörre van szükség, a tranzakció forrása az alábbiak egyikéből származik:Ha egy tranzakció az ügyféltől származik, a metódus egy, az elosztott tranzakcióval létrehozott tranzakció hatókörében lesz végrehajtva.
Üzenetsoros átvitel esetén a rendszer az üzenet lekérdezéséhez használt tranzakciót használja. Vegye figyelembe, hogy a használt tranzakció nem tranzakció, mivel az üzenet eredeti feladója nem adta meg.
Az egyéni átvitelek a tranzakciót a
TransportTransactionProperty
.Ha a fentiek egyike sem biztosít külső forrást egy tranzakcióhoz, a metódus meghívása előtt azonnal létrejön egy új Transaction példány.
TransactionAutoComplete megadja, hogy a metódus végrehajtására szolgáló tranzakció automatikusan befejeződjön-e, ha nincsenek kezeletlen kivételek. Ha ez a tulajdonság,
true
a hívóinfrastruktúra automatikusan "befejezettként" jelöli meg a tranzakciót, ha a felhasználói metódus kivétel nélkül tér vissza. Ha ez a tulajdonság,false
a tranzakció a példányhoz van csatolva, és csak akkor van "befejezve", ha az ügyfél egy későbbi metódust hív meg, amely ezzel a tulajdonsággal egyenlőtrue
, vagy ha egy későbbi metódus kifejezetten meghívja SetTransactionComplete. Ezen műveletek egyikének sikertelen végrehajtása azt eredményezi, hogy a tranzakció soha nem lesz "befejezve", és a benne foglalt munka nem lesz véglegesített, kivéve, ha a TransactionAutoCompleteOnSessionClose tulajdonság értéketrue
. Ha ez a tulajdonság be van állítvatrue
, akkor egy munkamenettel rendelkező csatornát kell használnia, a beállítást pedig a InstanceContextMode következőre PerSessionkell állítania.