Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.