Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A tranzakció olyan kapcsolódó feladatok halmaza, amelyek mint egység vagy sikerrel (véglegesítés), vagy sikertelenül (visszagördül) zárulnak. 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.
Megjegyzé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 bevezette az elosztott tranzakciókba való részvétel támogatását a EnlistTransaction metódussal, ami egy Transaction példányhoz csatlakoztatja a kapcsolatot. Az ADO.NET korábbi verzióiban az elosztott tranzakciókba való explicit beléptetés egy kapcsolat EnlistDistributedTransaction metódusának használatával történt, hogy a kapcsolatot egy ITransaction példányhoz csatlakoztassuk, 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.
Megjegyzé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 az ADO.NET kapcsolatok System.Transactions-hez való alapé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 Enlist=false-t ad meg kapcsolati sztring paraméterként egy SqlConnection.ConnectionString esetében, vagy OLE DB Services=-7-t kapcsolati sztring paraméterként egy OleDbConnection.ConnectionString esetén. Az Oracle és az ODBC kapcsolati sztring paraméterekkel kapcsolatos további információkért lásd OracleConnection.ConnectionString és OdbcConnection.ConnectionString.
Kézi részvétel 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 egy aktív kapcsolathoz van hozzárendelve, az automatikus tranzakcióbeléptetés csak a kapcsolat megnyitásakor valósul meg. 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 a kapcsolatot bekapcsolhatja a tranzakciókba a EnlistTransaction használatával.
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 kihagyja a kapcsolatot annak aktuális elosztott tranzakciós hozzárendeléséből. Vegye figyelembe, hogy a kapcsolatot meg kell nyitni, mielőtt a EnlistTransaction hívását elvégezné.
Megjegyzé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 a(z) SqlCommand használatával történő végrehajtása), a(z) EnlistTransaction visszaállítja a helyi tranzakciót, és igény szerint csatlakozik a meglévő elosztott tranzakcióhoz. 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 a .NET-keretrendszer SQL Server adatszolgáltatóját (SqlClient) használja az SQL Serverrel, a tranzakcióhoz való csatlakozási kísérlet kivételt fog dobni. Az összes többi eset észrevétlen marad.
Promotálható tranzakciók az SQL Server-ben
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.