Udostępnij za pośrednictwem


Włączanie przepływu transakcji

Program Windows Communication Foundation (WCF) zapewnia wysoce elastyczne opcje kontrolowania przepływu transakcji. Ustawienia przepływu transakcji usługi można wyrazić przy użyciu kombinacji atrybutów i konfiguracji.

Ustawienia przepływu transakcji

Ustawienia przepływu transakcji są generowane dla punktu końcowego usługi w wyniku przecięcia następujących trzech wartości:

  • Atrybut TransactionFlowAttribute określony dla każdej metody w kontrakcie usługi.

  • Właściwość TransactionFlow powiązania w określonym powiązaniu.

  • Właściwość TransactionFlowProtocol powiązania w określonym powiązaniu. Właściwość TransactionFlowProtocol powiązania umożliwia wybór spośród dwóch różnych protokołów transakcji, których można użyć do przepływu transakcji. W poniższych sekcjach krótko opisano każdy z nich.

Protokół WS-AtomicTransaction

Protokół WS-AtomicTransaction (WS-AT) jest przydatny w scenariuszach, gdy wymagana jest współdziałanie ze stosami protokołów innych firm.

Protokół OleTransactions

Protokół OleTransactions jest przydatny w scenariuszach, gdy współdziałanie z stosami protokołów innych firm nie jest wymagane, a moduł wdrażający usługi z wyprzedzeniem wie, że usługa protokołu WS-AT jest wyłączona lokalnie lub istniejąca topologia sieci nie sprzyja użyciu usługi WS-AT.

W poniższej tabeli przedstawiono różne typy przepływów transakcji, które można wygenerować przy użyciu tych różnych kombinacji.

Transactionflow

powiązanie
Właściwość powiązania TransactionFlow Protokół powiązania TransactionFlowProtocol Typ przepływu transakcji
Obowiązkowy prawda WS-AT Transakcja musi być przepływana w formacie WS-AT.
Obowiązkowy prawda Oletransactions Transakcje muszą być przepływane w formacie WCF OleTransactions.
Obowiązkowy fałsz Nie dotyczy Nie dotyczy, ponieważ jest to nieprawidłowa konfiguracja.
Dozwolone prawda WS-AT Transakcja może być przepływana w formacie WS-AT.
Dozwolone prawda Oletransactions Transakcje mogą być przepływane w formacie WCF OleTransactions.
Dozwolone fałsz Dowolna wartość Transakcja nie jest przepływana.
Notallowed Dowolna wartość Dowolna wartość Transakcja nie jest przepływana.

Poniższa tabela zawiera podsumowanie wyniku przetwarzania komunikatów.

Wiadomość przychodząca Ustawienie TransactionFlow Nagłówek transakcji Wynik przetwarzania komunikatów
Format protokołu oczekiwanego dopasowania transakcji Dozwolone lub obowiązkowe MustUnderstandtruerówna się . Przetwarzaj
Transakcja nie jest zgodna z oczekiwanym formatem protokołu Obowiązkowy MustUnderstandfalserówna się . Odrzucono, ponieważ wymagana jest transakcja
Transakcja nie jest zgodna z oczekiwanym formatem protokołu Dozwolone MustUnderstandfalserówna się . Odrzucono, ponieważ nagłówek nie jest zrozumiały
Transakcja przy użyciu dowolnego formatu protokołu Notallowed MustUnderstandfalserówna się . Odrzucono, ponieważ nagłówek nie jest zrozumiały
Brak transakcji Obowiązkowy Nie dotyczy Odrzucono, ponieważ wymagana jest transakcja
Brak transakcji Dozwolone Nie dotyczy Przetwarzaj
Brak transakcji Notallowed Nie dotyczy Przetwarzaj

Chociaż każda metoda kontraktu może mieć różne wymagania dotyczące przepływu transakcji, ustawienie protokołu przepływu transakcji jest ograniczone na poziomie powiązania. Oznacza to, że wszystkie metody współużytkujące ten sam punkt końcowy (i w związku z tym to samo powiązanie) również współdzielą te same zasady zezwalające na przepływ transakcji lub wymagające ich przepływu, a także ten sam protokół transakcji, jeśli ma to zastosowanie.

Włączanie przepływu transakcji na poziomie metody

Wymagania dotyczące przepływu transakcji nie zawsze są takie same dla wszystkich metod w kontrakcie usługi. W związku z tym program WCF udostępnia również mechanizm oparty na atrybutach, aby umożliwić wyrażanie preferencji przepływu transakcji każdej metody. Jest to osiągane przez parametr TransactionFlowAttribute określający poziom, na którym operacja usługi akceptuje nagłówek transakcji. Jeśli chcesz włączyć przepływ transakcji, należy oznaczyć metody kontraktu usługi za pomocą tego atrybutu. Ten atrybut przyjmuje jedną z wartości TransactionFlowOption wyliczenia, w którym wartość domyślna to NotAllowed. Jeśli jakakolwiek wartość z wyjątkiem NotAllowed jest określona, metoda jest wymagana, aby nie być jednokierunkowa. Deweloper może użyć tego atrybutu, aby określić wymagania dotyczące przepływu transakcji na poziomie metody lub ograniczenia w czasie projektowania.

Włączanie przepływu transakcji na poziomie punktu końcowego

Oprócz ustawienia TransactionFlowAttribute przepływu transakcji na poziomie metody zapewnia atrybut, program WCF udostępnia ustawienie całego punktu końcowego dla przepływu transakcji, aby umożliwić administratorom kontrolowanie przepływu transakcji na wyższym poziomie.

Jest to osiągane przez element TransactionFlowBindingElement, który umożliwia włączenie lub wyłączenie przepływu transakcji przychodzących w ustawieniach powiązania punktu końcowego, a także określenie żądanego formatu protokołu transakcji dla transakcji przychodzących.

Jeśli powiązanie wyłączyło przepływ transakcji, ale jedna z operacji na kontrakcie usługi wymaga transakcji przychodzącej, zostanie zgłoszony wyjątek weryfikacji podczas uruchamiania usługi.

Większość powiązań stałych WCF zawiera transactionFlow atrybuty i transactionProtocol umożliwiające skonfigurowanie określonego powiązania w celu akceptowania transakcji przychodzących. Aby uzyskać więcej informacji na temat ustawiania elementów konfiguracji, zobacz wiązanie>.<

Administrator lub wdrożenie może użyć przepływu transakcji na poziomie punktu końcowego w celu skonfigurowania wymagań lub ograniczeń przepływu transakcji w czasie wdrażania przy użyciu pliku konfiguracji.

Zabezpieczenia

Aby zapewnić bezpieczeństwo i integralność systemu, należy zabezpieczyć wymianę komunikatów podczas przepływu transakcji między aplikacjami. Nie należy przekazywać ani ujawniać szczegółów transakcji do żadnej aplikacji, która nie ma prawa do udziału w tej samej transakcji.

W przypadku generowania klientów WCF do nieznanych lub niezaufanych usług sieci Web przy użyciu wymiany metadanych wywołania operacji na tych usługach sieci Web powinny pominąć bieżącą transakcję, jeśli to możliwe. Poniższy przykład demonstruje, jak to zrobić.

//client code which has an ambient transaction  
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))  
{  
    // No transaction will flow to this operation  
    untrustedProxy.Operation1(...);  
    scope.Complete();  
}  
//remainder of client code  

Ponadto usługi należy skonfigurować tak, aby akceptowały transakcje przychodzące tylko od klientów, którzy zostali uwierzytelnieni i autoryzowani. Transakcje przychodzące powinny być akceptowane tylko wtedy, gdy pochodzą one z wysoce zaufanych klientów.

Asercji zasad

Program WCF używa asercji zasad do kontrolowania przepływu transakcji. Asercji zasad można znaleźć w dokumencie zasad usługi, który jest generowany przez agregowanie kontraktów, konfiguracji i atrybutów usługi. Klient może uzyskać dokument zasad usługi przy użyciu żądania HTTP GET lub WS-MetadataExchange request-reply. Klienci mogą następnie przetworzyć dokument zasad, aby określić, które operacje w umowie usługi mogą obsługiwać lub wymagać przepływu transakcji.

Asercji zasad przepływu transakcji wpływają na przepływ transakcji, określając nagłówki protokołu SOAP, które klient powinien wysłać do usługi w celu reprezentowania transakcji. Wszystkie nagłówki transakcji muszą być oznaczone MustUnderstand jako równe true. Każdy komunikat z nagłówkiem oznaczonym w przeciwnym razie jest odrzucany z błędem protokołu SOAP.

Tylko jedna asercja zasad związanych z transakcjami może być obecna w jednej operacji. Dokumenty zasad z więcej niż jedną asercją transakcji operacji są uznawane za nieprawidłowe i są odrzucane przez usługę WCF. Ponadto w każdym typie portu może znajdować się tylko jeden protokół transakcji. Dokumenty zasad z operacjami odwołujące się do więcej niż jednego protokołu transakcji wewnątrz jednego typu portu są uznawane za nieprawidłowe i są odrzucane przez narzędzie ServiceModel Metadata Tool (Svcutil.exe). Dokumenty zasad z asercji transakcji obecnych w komunikatach wyjściowych lub jednokierunkowych komunikatach wejściowych są również uznawane za nieprawidłowe.