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


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, truea 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éke true, 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, truea 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, falsea 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éke true. Ha ez a tulajdonság be van állítva true, akkor egy munkamenettel rendelkező csatornát kell használnia, a beállítást pedig a InstanceContextMode következőre PerSessionkell állítania.