Udostępnij za pośrednictwem


Eskalacja zarządzania transakcjami

System Windows obsługuje zestaw usług i moduły, które razem stanowią Menedżera transakcji. Eskalacja zarządzania transakcji opisano proces migrację transakcji z jeden ze składników Menedżera transakcji na inny.

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 muszą nie komunikują się z menedżerem transakcji bezpośrednio. Zamiast tego wspólnej infrastruktury, definiujący interfejsów, wspólnego zachowania i klasy pomocy są dostarczane przez System.Transactions przestrzeni 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). Eskalacji ma miejsce, gdy zarejestrować innego menedżera zasobów trwałe. Po eskalacji transakcja pozostaje zarządzana w stanie podwyższonym do momentu zakończenia.

Między System.Transactions transakcji i transakcji MSDTC nie pośredniczące typu transakcji, które są udostępniane za pośrednictwem awansowanie jednego etapu rejestracji (PSPE). PSPE jest inny mechanizm ważne w System.Transactions dla optymalizacji wydajności. Umożliwia to zdalne trwałe zasoby, znajdujące się w innej domenie aplikacji, procesie lub komputerze, do udziału w System.Transactions transakcji bez spowodowania eskalacji do transakcji MSDTC. Aby uzyskać więcej informacji na temat PSPE, zobacz Rejestrowanie zasobów jako uczestników transakcji.

Jak jest inicjowane eskalacji

Ponieważ MSDTC znajduje się w osobnym procesie i zamocowaniem transakcji MSDTC wyniki w wiadomości przesyłanych przez proces eskalacji transakcji powoduje zmniejszenie wydajności. 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 System.Transactions infrastruktury obsługi lotnych zasobów i co najwyżej jeden trwały zasób, który obsługuje jednofazowy powiadomień, pozostanie transakcji w prawo własności System.Transactions infrastruktury. 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. Eskalację, które spowodowało, że System.Transactions infrastruktury transferowania własność transakcji na MSDTC się stanie po:

  • Co najmniej jeden trwały zasobem, który nie obsługuje jednofazowy powiadomień jest zarejestrowany w transakcji.

  • Co najmniej dwa trwałe zasobów, które obsługują jednofazowy powiadomienia biorących udział 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 powodującą rejestrowanie bazy danych, System.Transactions infrastruktura wykrywa, że jest to drugi trwały zasób w transakcji i eskaluje go do transakcji MSDTC.

  • Jest wywoływane żądanie "marshaling" transakcji do innej domeny aplikacji lub innego procesu. Na przykład serializacja obiektu transakcji w granicach domeny aplikacji. Obiekt transakcji jest marshalled-by-value, co oznacza, że każda próba przekazania go przez granicę domeny aplikacji (nawet w tym samym procesie) powoduje serializacji obiektu transakcji. Można przekazać obiektów transakcji przez wywołania zdalnej metody pobierającej Transaction jako parametr lub możesz wykonać następujące czynności dostępu zdalnego składników transakcyjnych obsługiwany. Powoduje to serializację obiektu transakcji i powoduje eskalację, tak jak w przypadku serializacji transakcji w domenie aplikacji. Jest dystrybuowany i lokalny Menedżer transakcji nie jest już odpowiednie.

Poniższa tabela zawiera listę wszystkich możliwych wyjątków, które mogą być generowane podczas eskalacji.

Typ wyjątku Stan
InvalidOperationException Podjęto próbę eskalować transakcji z poziomu izolacji jest taki sam, Snapshot.
TransactionAbortedException Menedżer transakcji nie działa.
TransactionException Eskalacja kończy się niepowodzeniem i aplikacja zostanie przerwana.