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:

  1. Currentjest sprawdzenie, czy jest transakcję. Tego wyboru powoduje:

  2. Wartość TransactionScopeOption wyliczenia przekazany TransactionScope zaznaczono konstruktora. Określa, czy należy utworzyć nową transakcję.

  3. 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: