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


Elosztott tranzakciók

A tranzakció olyan kapcsolódó feladatok halmaza, amelyek többek között sikeresek (véglegesítés), vagy meghiúsulnak (megszakítják) egységként. Az elosztott tranzakciók olyan tranzakciók, amelyek több erőforrást is érintenek. Az elosztott tranzakciók véglegesítéséhez minden résztvevőnek garantálnia kell, hogy az adatok módosítása végleges legyen. A módosításoknak a rendszer összeomlása vagy más előre nem látható események ellenére is meg kell őriznie. Ha még egyetlen résztvevő sem tudja garantálni ezt a garanciát, a teljes tranzakció meghiúsul, és a tranzakció hatókörén belüli adatok módosításai vissza lesznek állítva.

Feljegyzés

A rendszer kivételt fog kivenni, ha egy tranzakció véglegesítését vagy visszaállítását kísérli meg, ha DataReader a tranzakció aktív állapotban van.

A System.Transactions használata

A .NET-keretrendszer az elosztott tranzakciók kezelése a névtér API-jában System.Transactions történik. Ha System.Transactions több állandó erőforrás-kezelőről van szó, az API elosztott tranzakciókezelést delegál egy tranzakciófigyelőnek, például a Microsoft Elosztott tranzakció koordinátorának (MS DTC). További információ: Tranzakció alapjai.

ADO.NET 2.0-s kiadással támogatott az elosztott tranzakciókba való belefoglalás a EnlistTransaction metódussal, amely egy példányban Transaction hoz létre kapcsolatot. A ADO.NET korábbi verzióiban az elosztott tranzakciókba való explicit beléptetés egy kapcsolat metódusával EnlistDistributedTransaction történt egy példányban ITransaction való csatlakozáshoz, amely támogatja a visszamenőleges kompatibilitást. Az Enterprise Services-tranzakciókkal kapcsolatos további információkért lásd az Enterprise Services és a COM+ tranzakciók együttműködését.

Ha az SQL Server .NET-keretrendszer-szolgáltatójával egy SQL Server-adatbázison keresztüli tranzakciót használSystem.Transactions, a rendszer automatikusan egy egyszerűsített műveletet Transaction használ. A tranzakció ezután igény szerint előléptethető egy teljes elosztott tranzakcióra. További információ: System.Transactions Integration with SQL Server.

Feljegyzés

Az Oracle-adatbázis által egyszerre részt vevő elosztott tranzakciók maximális száma alapértelmezés szerint 10. Az Oracle-adatbázishoz való csatlakozáskor a 10. tranzakció után kivétel történik. Az Oracle nem támogatja DDL az elosztott tranzakciókat.

Automatikus listára vétel elosztott tranzakcióban

Az automatikus beléptetés a ADO.NET kapcsolatok System.Transactionsalapértelmezett (és előnyben részesített) módja. A kapcsolatobjektumok automatikusan belépnek egy meglévő elosztott tranzakcióba, ha azt állapítják meg, hogy egy tranzakció aktív, ami azt jelenti, System.Transaction hogy Transaction.Current nem null értékű. Az automatikus tranzakcióbeléptetés a kapcsolat megnyitásakor történik. Ezt követően még akkor sem történik meg, ha egy parancsot egy tranzakció hatókörén belül hajtanak végre. Letilthatja az automatikus beléptetést a meglévő tranzakciókban, ha egy kapcsolati sztring paramétert ad megEnlist=false, vagy OLE DB Services=-7 egy kapcsolati sztring paramétertOleDbConnection.ConnectionString.SqlConnection.ConnectionString Az Oracle és az ODBC kapcsolati sztring paraméterekkel kapcsolatos további információkért lásd OracleConnection.ConnectionString és OdbcConnection.ConnectionString.

Manuális belisting egy elosztott tranzakcióban

Ha az automatikus beléptetés le van tiltva, vagy be kell jelentkeznie egy tranzakcióba, amely a kapcsolat megnyitása után indult el, akkor a meglévő elosztott tranzakciókat EnlistTransaction a használt szolgáltató objektumának metódusával DbConnection vehet fel. A meglévő elosztott tranzakciókba való beírás biztosítja, hogy a tranzakció véglegesítése vagy visszagördítése esetén a kód által az adatforrásban végrehajtott módosítások is véglegesítésre vagy visszaállításra kerülnek.

Az elosztott tranzakciókba való belesorolás különösen az üzleti objektumok készletezésénél alkalmazható. Ha egy üzleti objektum nyitott kapcsolattal van készleten, az automatikus tranzakcióbeléptetés csak a kapcsolat megnyitásakor történik. Ha több tranzakciót hajt végre a készletezett üzleti objektummal, az objektum nyitott kapcsolata nem fog automatikusan résztvenni az újonnan kezdeményezett tranzakciókban. Ebben az esetben letilthatja a kapcsolat automatikus tranzakcióbeléptetését, és felveheti a kapcsolatot a tranzakciókba a következő használatával EnlistTransaction: .

EnlistTransaction egyetlen típusú Transaction argumentumot vesz fel, amely a meglévő tranzakcióra mutató hivatkozás. A kapcsolat metódusának meghívása EnlistTransaction után a tranzakció tartalmazza az adatforráson a kapcsolatot használó összes módosítást. Ha null értéket ad át, az nem veszi fel a kapcsolatot az aktuális elosztott tranzakciólistájából. Vegye figyelembe, hogy a kapcsolatot a hívás EnlistTransactionelőtt meg kell nyitni.

Feljegyzés

Ha egy kapcsolat explicit módon fel van sorolva egy tranzakcióba, az nem vonható le vagy nem vehető fel egy másik tranzakcióba, amíg az első tranzakció be nem fejeződik.

Figyelemfelhívás

EnlistTransaction kivételt eredményez, ha a kapcsolat már megkezdte a tranzakciót a kapcsolat metódusával BeginTransaction . Ha azonban a tranzakció egy, az adatforrásban elindított helyi tranzakció (például a BEGIN TRANSACTION utasítás kifejezetten egy használatával SqlCommandtörténő végrehajtása), EnlistTransaction a rendszer visszaállítja a helyi tranzakciót, és igény szerint részt vesz a meglévő elosztott tranzakcióban. Nem fog értesítést kapni arról, hogy a helyi tranzakció vissza lett állítva, és minden olyan helyi tranzakciót kezelnie kell, amely nem kezdődött el a használatával BeginTransaction. Ha az SQL Server .NET-keretrendszer-adatszolgáltatóját (SqlClient) használja az SQL Serverrel, a besorozási kísérlet kivételt fog eredményezni. Az összes többi eset észrevétlen marad.

Promóciós tranzakciók az SQL Serveren

Az SQL Server támogatja azokat a promóciós tranzakciókat, amelyekben egy helyi egyszerűsített tranzakció csak akkor előléptethető automatikusan egy elosztott tranzakcióra, ha szükséges. A promóciós tranzakció csak akkor hívja meg az elosztott tranzakciók többletterhelését, ha a többletterhelésre szükség van. További információ és kódminta: System.Transactions Integration with SQL Server.

Elosztott tranzakciók konfigurálása

Előfordulhat, hogy az elosztott tranzakciók használatához engedélyeznie kell az MS DTC-t a hálózaton keresztül. Ha engedélyezve van a Windows tűzfal, engedélyeznie kell az MS DTC szolgáltatás számára a hálózat használatát, vagy meg kell nyitnia az MS DTC-portot.

Lásd még