Współdziałanie z usługami przedsiębiorstwa i transakcjami COM+
System.Transactions Przestrzeń nazw obsługuje współdziałanie obiektów transakcji utworzone za pomocą tej przestrzeni nazw i transakcje utworzone za pomocą modelu COM +.
Można użyć EnterpriseServicesInteropOption wyliczenia podczas tworzenia nowego TransactionScope wystąpienie można określić poziom współpracy z modelu COM +.
Domyślnie, gdy kod aplikacji sprawdza właściwość statyczną Current , System.Transactions próbuje wyszukać transakcję, która jest w przeciwnym razie bieżąca, lub TransactionScope obiekt, który nakazuje, że Current ma wartość null. Jeśli dowolny z tych opcji, nie można odnaleźć System.Transactions kwerendę kontekstu COM + dla transakcji. Należy pamiętać, że chociaż System.Transactions może się okazać transakcji z modelu COM + kontekstu, transakcje, które są natywne go nadal preferuje System.Transactions.
Poziomy współpracy
EnterpriseServicesInteropOption Wyliczenie definiuje następujące poziomy współpracy —None, Full i Automatic.
TransactionScope Udostępnia konstruktorów, które akceptują EnterpriseServicesInteropOption jako parametr.
None, jak wskazuje nazwa, oznacza, że nie ma współdziałania między System.EnterpriseServices kontekstami i zakresami transakcji. Po utworzeniu TransactionScope wraz z None, zmiany wprowadzone w Current nie zostaną uwzględnione w kontekście COM +. Na tej samej zasadzie zmiany transakcji w kontekście COM + nie są zostaną uwzględnione w Current. Jest to najszybszy tryb działania dla System.Transactions ponieważ nie istnieje żadne dodatkowe synchronizacji wymagane. None to wartość domyślna używana przez TransactionScope wszystkie konstruktory, które nie akceptują EnterpriseServicesInteropOption jako parametru.
Jeśli chcesz połączyć System.EnterpriseServices transakcji z transakcją otoczenia, musisz użyć dowolnego Full lub Automatic. Obie te wartości wykorzystano funkcję usług bez składniki, a zatem powinno być uruchomione w dodatku Service Pack 2 dla systemu Windows XP lub Windows Server 2003 podczas korzystania z nich.
FullOkreśla, że transakcje otoczenia System.Transactions i System.EnterpriseServices zawsze są takie same. Spowoduje to utworzenie nowego System.EnterpriseServices kontekstu transakcyjnego i zastosowanie transakcji, która jest bieżąca, TransactionScope aby wartość była bieżąca dla tego kontekstu. W związku z tym transakcja w programie Current jest całkowicie zsynchronizowana z transakcją w programie Transaction. Ta wartość wprowadzono zmniejszenie wydajności, ponieważ może być konieczne do utworzenia nowego modelu COM + kontekstów.
Automatic określa następujące wymagania:
Gdy Current jest zaznaczone, System.Transactions powinien obsługiwać transakcji w kontekście COM +, jeśli wykryje, że jest uruchomiona w kontekście innej niż domyślny kontekst. Należy zauważyć, że domyślnego kontekstu nie może zawierać transakcję. Dlatego w domyślnym kontekście, nawet w przypadku Automatic, transakcji przechowywane w magazynie lokalnym wątek używany przez System.Transactions jest zwracana dla Current.
Jeśli nowy TransactionScope obiekt zostanie utworzony i tworzenie występuje w kontekście innej niż domyślny kontekst transakcji dla bieżącego TransactionScope obiekt powinien być zostaną uwzględnione w modelu COM +. W takim przypadku Automatic zachowuje się jak Full w tym tworzy nowy kontekst COM +.
Ponadto w przypadku Current ustawienia zarówno w trybie , jak Full i Automaticoba te tryby oznaczają, że Current nie można ustawić bezpośrednio. Dowolne próba ustawienia Current bezpośrednio w innych niż tworzenie TransactionScope powoduje InvalidOperationException. Wartość EnterpriseServicesInteropOption wyliczenia jest dziedziczona przez nowe zakresy transakcji, które nie określają jawnie, która wartość ma być używana. Jeśli na przykład utworzysz nowy TransactionScope obiekt za pomocą Fullpolecenia , a następnie utworzysz drugi TransactionScope obiekt, ale nie określisz EnterpriseServicesInteropOption wartości, drugi TransactionScope obiekt ma Fullrównież wartość .
Podsumowując, podczas tworzenia nowego zakresu transakcji obowiązują następujące reguły:
Currentjest sprawdzenie, czy jest transakcję. Tego wyboru powoduje:
Sprawdź, czy jest zakresem.
Jeśli wartość z zakresu EnterpriseServicesInteropOption zaznaczono wyliczenia przekazany w czasie zakresu.
Jeśli EnterpriseServicesInteropOption ma ustawioną wartość wyliczenia Automatic, transakcji COM + (System.EnterpriseServices transakcji) pierwszeństwo System.Transactions transakcji w lokalnego magazynu zarządzanych wątków.
Jeśli wartość jest równa None, System.Transactions transakcji w lokalnego magazynu wątków zarządzanych pierwszeństwo.
Jeśli wartość jest Full, istnieje tylko jeden transakcji i jest transakcji COM +.
Wartość TransactionScopeOption wyliczenia przekazany TransactionScope zaznaczono konstruktora. Określa, czy należy utworzyć nową transakcję.
Jeśli nowa transakcja jest do utworzenia następujące wartości EnterpriseServicesInteropOption za:
Full: jest tworzona transakcja skojarzona z kontekstem COM+.
None: jest tworzona transakcja System.Transactions .
Automatic: jeśli istnieje kontekst COM+, transakcja zostanie utworzona i dołączona do kontekstu.
W poniższej tabeli przedstawiono kontekstu usługi Enterprise (ES) i transakcyjnych zakres, który wymaga transakcji przy użyciu EnterpriseServicesInteropOption wyliczenia.
Kontekst ES | Brak | Automatyczne | Pełny |
---|---|---|---|
Domyślny kontekst | Domyślny kontekst | Domyślny kontekst | Utwórz nową kontekst transakcji |
Inne niż domyślny kontekst | Obsługa kontekst klienta | Tworzy nowy kontekst transakcji | Tworzy nowy kontekst transakcji |
W poniższej tabeli przedstawiono co otoczenia transakcja jest, biorąc pod uwagę określonego System.EnterpriseServices kontekstu i transakcyjnych zakres, który wymaga transakcji przy użyciu EnterpriseServicesInteropOption wyliczenia.
Kontekst ES | Brak | Automatyczne | Pełny |
---|---|---|---|
Domyślny kontekst | SKLEP | SKLEP | ES |
Inne niż domyślny kontekst | SKLEP | ES | ES |
W powyższej tabeli:
ST oznacza, że zakres transakcji otoczenia jest zarządzane przez System.Transactions, niezależne od dowolnego System.EnterpriseServices w kontekście transakcji, które mogą być obecne.
ES oznacza, że zakres otoczenia transakcja jest taka sama jak System.EnterpriseServices w kontekście transakcji.