Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
System Windows hostuje zestaw usług i modułów, które razem stanowią menedżera transakcji. Eskalacja zarządzania transakcjami opisuje proces migracji transakcji z jednego ze składników menedżera transakcji do innego.
System.Transactions Zawiera składnik menedżera transakcji, który koordynuje transakcję obejmującą co najwyżej jeden trwały zasób lub wiele nietrwałych zasobów. Ponieważ menedżer transakcji używa tylko wywołań domeny wewnątrz aplikacji, daje najlepszą wydajność. Deweloperzy nie muszą bezpośrednio korzystać z menedżera transakcji. Zamiast tego typowa infrastruktura, która definiuje interfejsy, typowe zachowanie i klasy pomocnicze, jest dostarczana przez System.Transactions przestrzeń nazw.
Jeśli chcesz udostępnić transakcję obiektowi w innej domenie aplikacji (w tym między granicami procesów i maszyn) na tym samym komputerze, System.Transactions infrastruktura automatycznie eskaluje transakcję zarządzaną przez koordynatora transakcji rozproszonych firmy Microsoft (MSDTC). Eskalacja występuje również w przypadku zaangażowania innego trwałego menedżera zasobów. Po eskalacji transakcja pozostaje zarządzana w stanie podwyższonym do momentu zakończenia.
Między transakcją System.Transactions a transakcją MSDTC istnieje pośredni typ transakcji, który jest udostępniany za pośrednictwem rejestracji jednofazowej (PSPE, Promotable Single Phase Enlistment). PSPE to kolejny ważny mechanizm optymalizacji wydajności System.Transactions. Umożliwia to udział zdalnym trwałym zasobom, znajdującym się w innej domenie aplikacji, procesie lub na innym komputerze, w transakcji System.Transactions bez konieczności jej eskalacji do transakcji MSDTC. Aby uzyskać więcej informacji na temat PSPE, zobacz Rejestrowanie zasobów jako uczestników transakcji.
Jak zainicjowano eskalację
Eskalacja transakcji zmniejsza wydajność, ponieważ MSDTC znajduje się w osobnym procesie, a eskalacja transakcji do MSDTC powoduje wysyłanie komunikatów między procesami. Aby zwiększyć wydajność, należy opóźnić lub uniknąć eskalacji do MSDTC; w związku z tym musisz wiedzieć, jak i kiedy zainicjowano eskalację.
Tak długo jak infrastruktura System.Transactions obsługuje nietrwałe zasoby i co najwyżej jeden trwały zasób, który wspiera powiadomienia jednofazowe, transakcja pozostaje własnością infrastruktury System.Transactions. Menedżer transakcji korzysta tylko z tych zasobów, które znajdują się w tej samej domenie aplikacji i dla których rejestrowanie (zapisywanie wyniku transakcji na dysku) nie jest wymagane. Eskalacja, w wyniku której infrastruktura System.Transactions przenosi własność transakcji do MSDTC, odbywa się w następujących przypadkach:
Co najmniej jeden trwały zasób, który nie obsługuje powiadomień jednofazowych, jest zaangażowany w transakcję.
Co najmniej dwa trwałe zasoby, które obsługują powiadomienia jednofazowe, są wymienione w transakcji. Na przykład rejestrowanie pojedynczego połączenia z programem SQL Server 2005 nie powoduje podwyższenia poziomu transakcji. Jednak za każdym razem, gdy otworzysz drugie połączenie z bazą danych programu SQL Server 2005, co powoduje przystąpienie bazy danych do transakcji, infrastruktura System.Transactions wykrywa, że jest to drugi trwały zasób w transakcji i eskaluje tę operację do transakcji MSDTC.
Zostaje wywołane żądanie przekazania transakcji do innej domeny aplikacji lub innego procesu. Na przykład serializacja obiektu transakcji w granicach domeny aplikacji. Obiekt transakcji jest przekazywany przez wartość, co oznacza, że każda próba przekazania go przez granicę domeny aplikacji (nawet w tym samym procesie) powoduje serializację obiektu transakcji. Obiekty transakcji można przesłać, dokonując wywołania metody zdalnej, która przyjmuje Transaction jako parametr, lub można spróbować uzyskać dostęp do zdalnego składnika obsługiwanego transakcyjnie. Powoduje to serializację obiektu transakcji i powoduje eskalację, tak jak w przypadku serializacji transakcji w domenie aplikacji. Jest on dystrybuowany, a lokalny menedżer transakcji nie jest już odpowiedni.
W poniższej tabeli znajdują się wszystkie możliwe wyjątki, które mogą pojawić się podczas eskalacji.
Typ wyjątku | Warunek |
---|---|
InvalidOperationException | Próba eskalacji transakcji z poziomem izolacji równym Snapshot. |
TransactionAbortedException | Menedżer transakcji nie działa. |
TransactionException | Eskalacja kończy się niepowodzeniem i aplikacja zostanie przerwana. |