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ą tworzone dla punktu końcowego usługi jako wynik zbiegu 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

wiążący
Właściwość powiązania TransactionFlow Protokół powiązania TransactionFlowProtocol Typ przepływu transakcji
Obowiązkowy prawda WS-AT Transakcja musi być przesyłana w formacie WS-AT interoperacyjnym.
Obowiązkowy prawda OleTransactions Transakcje muszą być przepływane w formacie WCF OleTransactions.
Obowiązkowy fałszywy Nie dotyczy Nie dotyczy, ponieważ jest to nieprawidłowa konfiguracja.
Dozwolone prawda WS-AT Transakcja może przebiegać w interoperacyjnym formacie WS-AT.
Dozwolone prawda OleTransactions Transakcje mogą być przepływane w formacie WCF OleTransactions.
Dozwolone fałszywy Dowolna wartość Transakcja nie została przeprowadzona.
Niedozwolone Dowolna wartość Dowolna wartość Transakcja nie została przeprowadzona.

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

Wiadomość przychodząca Ustawienie TransactionFlow Nagłówek transakcji Wynik przetwarzania komunikatów
Transakcja odpowiada oczekiwanemu formatowi protokołu Dozwolone lub obowiązkowe MustUnderstand równa się true. Proces
Transakcja nie jest zgodna z oczekiwanym formatem protokołu Obowiązkowy MustUnderstand równa się false. Odrzucono, ponieważ wymagana jest transakcja
Transakcja nie jest zgodna z oczekiwanym formatem protokołu Dozwolone MustUnderstand równa się false. Odrzucono, ponieważ nagłówek nie jest zrozumiały
Transakcja przy użyciu dowolnego formatu protokołu Niedozwolone MustUnderstand równa się false. Odrzucono, ponieważ nagłówek nie jest zrozumiały
Brak transakcji Obowiązkowy N/A Odrzucono, ponieważ wymagana jest transakcja
Brak transakcji Dozwolone N/A Proces
Brak transakcji Niedozwolone N/A Proces

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 określono jakąkolwiek wartość oprócz NotAllowed, metoda nie może 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 przepływu transakcji na poziomie metody, które zapewnia atrybut TransactionFlowAttribute, program WCF oferuje również ustawienie na poziomie całego punktu końcowego, aby umożliwić administratorom kontrolowanie przepływu transakcji na bardziej ogólnym 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ść stałych wiązań WCF zawiera atrybuty transactionFlow oraz transactionProtocol, które umożliwiają skonfigurowanie określonego wiązania do akceptowania transakcji przychodzących. Aby uzyskać więcej informacji na temat ustawiania elementów konfiguracji, zobacz <wiązanie>.

Administrator lub wdrażający może użyć transakcji na poziomie punktu końcowego w celu skonfigurowania wymagań lub ograniczeń przepływu transakcji w czasie wdrażania, używając pliku konfiguracji.

Bezpieczeństwo

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, jeśli to możliwe, pominąć bieżącą transakcję. W poniższym przykładzie pokazano, 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. Asygnaty zasad można znaleźć w dokumencie zasad usługi, który jest generowany przez agregowanie kontraktów, konfiguracji i atrybutów związanych z usługą. Klient może uzyskać dokument zasad usługi przy użyciu żądania HTTP GET lub żądania-odpowiedzi WS-MetadataExchange. 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.

Asercje dotyczące zasad przepływu transakcji wpływają na jego realizację, określając nagłówki protokołu SOAP, które klient powinien wysłać do usługi, aby użyć ich do reprezentacji transakcji. Wszystkie nagłówki transakcji muszą być oznaczone MustUnderstand jako równe true. Każdy komunikat z nagłówkiem oznaczonym inaczej jest odrzucany z błędem 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 dotyczącą operacji są uznawane za nieprawidłowe i są odrzucane przez 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 asercjami transakcji obecnych w komunikatach wyjściowych lub jednokierunkowych wejściowych są również uznawane za nieprawidłowe.