Włączanie przepływu transakcjiEnabling Transaction Flow

Windows Communication Foundation (WCF) zapewnia wysoce elastyczne opcje kontroli przepływu transakcji.Windows Communication Foundation (WCF) provides highly flexible options for controlling transaction flow. Ustawienia przepływu transakcji usługi mogą być wyrażone przy użyciu kombinacji atrybutów i konfiguracji.A service's transaction flow settings can be expressed using a combination of attributes and configuration.

Ustawienia przepływu transakcjiTransaction Flow Settings

Ustawienia przepływu transakcji są generowane dla punktu końcowego usługi w wyniku przecięcia następujących trzech wartości:Transaction flow settings are generated for a service endpoint as a result of the intersection of the following three values:

  • TransactionFlowAttributeAtrybut określony dla każdej metody w kontrakcie usługi.The TransactionFlowAttribute attribute specified for each method in the service contract.

  • TransactionFlowWłaściwość powiązania określonego powiązania.The TransactionFlow binding property in the specific binding.

  • TransactionFlowProtocolWłaściwość powiązania określonego powiązania.The TransactionFlowProtocol binding property in the specific binding. TransactionFlowProtocolWłaściwość Binding umożliwia wybór spośród dwóch różnych protokołów transakcji, których można użyć do przepływu transakcji.The TransactionFlowProtocol binding property enables you to choose among two different transaction protocols that you can use to flow a transaction. W poniższych sekcjach krótko opisano każdą z nich.The following sections briefly describe each of them.

Protokół WS-AtomicTransactionWS-AtomicTransaction Protocol

Protokół WS-AtomicTransaction (WS-AT) jest użyteczny w scenariuszach, gdy wymagane jest współdziałanie z stosami protokołu innych firm.The WS-AtomicTransaction (WS-AT) protocol is useful for scenarios when interoperability with third-party protocol stacks is required.

Protokół OleTransactionsOleTransactions Protocol

Protokół OleTransactions jest użyteczny w scenariuszach, gdy współdziałanie z stosami protokołu innych firm nie jest wymagane, a narzędzie do wdrażania usługi wie, że usługa protokołu WS-AT jest wyłączona lokalnie lub istniejąca topologia sieci nie preferuje użycia usługi WS-AT.The OleTransactions protocol is useful for scenarios when interoperability with third-party protocol stacks is not required, and the deployer of a service knows in advance that the WS-AT protocol service is disabled locally or the existing network topology does not favor the usage of 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.The following table shows the different types of transaction flows that can be generated using these various combinations.

TransactionFlowTransactionFlow

powiązaniebinding
Właściwość powiązania TransactionFlowTransactionFlow binding property Protokół powiązania TransactionFlowProtocolTransactionFlowProtocol binding protocol Typ przepływu transakcjiType of transaction flow
ObowiązkowyMandatory truetrue WS-ATWS-AT Transakcja musi być przepływa w formacie międzyoperacyjnym WS-AT.Transaction must be flowed in the interoperable WS-AT format.
ObowiązkowyMandatory truetrue OleTransactionsOleTransactions Transakcja musi być przepływa w formacie OleTransactions WCF.Transaction must be flowed in the WCF OleTransactions format.
ObowiązkowyMandatory fałszfalse Nie dotyczyNot applicable Nie dotyczy, ponieważ jest to nieprawidłowa konfiguracja.Not applicable because this is an invalid configuration.
DozwoloneAllowed truetrue WS-ATWS-AT Transakcja może być przepływa w formacie międzyoperacyjnym WS-AT.Transaction may be flowed in the interoperable WS-AT format.
DozwoloneAllowed truetrue OleTransactionsOleTransactions Transakcja może być przepływa w formacie OleTransactions WCF.Transaction may be flowed in the WCF OleTransactions format.
DozwoloneAllowed fałszfalse Dowolna wartośćAny value Transakcja nie jest przepływa.A transaction is not flowed.
NotAllowedNotAllowed Dowolna wartośćAny value Dowolna wartośćAny value Transakcja nie jest przepływa.A transaction is not flowed.

Poniższa tabela zawiera podsumowanie wyników przetwarzania komunikatów.The following table summarizes the message processing result.

Komunikat przychodzącyIncoming message Ustawienie TransactionFlowTransactionFlow setting Nagłówek transakcjiTransaction header Wynik przetwarzania komunikatuMessage processing result
Transakcja jest zgodna z oczekiwanym formatem protokołuTransaction matches expected protocol format Dozwolone lub obowiązkoweAllowed or Mandatory MustUnderstand równa się true .MustUnderstand equals true. ProcesProcess
Transakcja nie jest zgodna z oczekiwanym formatem protokołuTransaction does not match expected protocol format ObowiązkowyMandatory MustUnderstand równa się false .MustUnderstand equals false. Odrzucono, ponieważ jest wymagana transakcjaRejected because a transaction is required
Transakcja nie jest zgodna z oczekiwanym formatem protokołuTransaction does not match expected protocol format DozwoloneAllowed MustUnderstand równa się false .MustUnderstand equals false. Odrzucono, ponieważ nagłówek nie jest zrozumiałyRejected because the header is not understood
Transakcja przy użyciu dowolnego formatu protokołuTransaction using any protocol format NotAllowedNotAllowed MustUnderstand równa się false .MustUnderstand equals false. Odrzucono, ponieważ nagłówek nie jest zrozumiałyRejected because the header is not understood
Brak transakcjiNo transaction ObowiązkowyMandatory Nie dotyczyN/A Odrzucono, ponieważ jest wymagana transakcjaRejected because a transaction is required
Brak transakcjiNo transaction DozwoloneAllowed Nie dotyczyN/A ProcesProcess
Brak transakcjiNo transaction NotAllowedNotAllowed Nie dotyczyN/A ProcesProcess

Chociaż każda metoda w kontrakcie może mieć różne wymagania dotyczące przepływu transakcji, ustawienie protokołu przepływu transakcji jest ograniczone na poziomie powiązania.While each method on a contract can have different transaction flow requirements, the transaction flow protocol setting is scoped at the level of the binding. Oznacza to, że wszystkie metody, które współużytkują ten sam punkt końcowy (i w związku z tym to samo powiązanie), również współużytkują te same zasady, które umożliwiają lub wymagają przepływu transakcji, a także ten sam protokół transakcji, jeśli ma to zastosowanie.This means that all methods that share the same endpoint (and therefore the same binding) also share the same policy allowing or requiring transaction flow, as well as the same transaction protocol if applicable.

Włączanie przepływu transakcji na poziomie metodyEnabling Transaction Flow at the Method Level

Wymagania przepływu transakcji nie są zawsze takie same dla wszystkich metod w kontrakcie usługi.Transaction flow requirements are not always the same for all methods in a service contract. W związku z tym WCF zapewnia również mechanizm oparty na atrybutach, aby umożliwić wyrażanie preferencji przepływu transakcji poszczególnych metod.Therefore, WCF also provides an attribute-based mechanism to allow each method's transaction flow preferences to be expressed. Jest to osiągane przez TransactionFlowAttribute określenie poziomu, w którym operacja usługi akceptuje Nagłówek transakcji.This is achieved by the TransactionFlowAttribute that specifies the level in which a service operation accepts a transaction header. Jeśli chcesz włączyć przepływ transakcji, należy oznaczyć metody kontraktu usługi z tym atrybutem.You should mark your service contract methods with this attribute if you want to enable transaction flow. Ten atrybut przyjmuje jedną z wartości TransactionFlowOption wyliczenia, w której wartość domyślna to NotAllowed .This attribute takes one of the values of the TransactionFlowOption enumeration, in which the default value is NotAllowed. Jeśli dowolna wartość z wyjątkiem NotAllowed jest określona, metoda jest wymagana, aby nie była jednokierunkowa.If any value except NotAllowed is specified, the method is required to not be one-way. Deweloper może użyć tego atrybutu, aby określić wymagania lub ograniczenia przepływu transakcji na poziomie metody w czasie projektowania.A developer can use this attribute to specify method-level transaction flow requirements or constraints at design time.

Włączanie przepływu transakcji na poziomie punktu końcowegoEnabling Transaction Flow at the Endpoint Level

Oprócz ustawienia przepływu transakcji na poziomie metody TransactionFlowAttribute , funkcja WCF udostępnia ustawienie dla przepływu transakcji dla całego punktu końcowego, co umożliwia administratorom sterowanie przepływem transakcji na wyższym poziomie.In addition to the method-level transaction flow setting the TransactionFlowAttribute attribute provides, WCF provides an endpoint-wide setting for transaction flow to allow administrators to control transaction flow at a higher level.

Jest to osiągane przez TransactionFlowBindingElement program, który umożliwia włączenie lub wyłączenie przychodzącego przepływu transakcji w ustawieniach powiązań punktu końcowego, a także określenie formatu żądanego protokołu transakcji dla przychodzących transakcji.This is achieved by the TransactionFlowBindingElement, which enables you to enable or disable incoming transaction flow in an endpoint’s binding settings, as well as to specify the desired transaction protocol format for incoming transactions.

Jeśli powiązanie wyłączyło przepływ transakcji, ale jedna z operacji w kontrakcie usługi wymaga transakcji przychodzącej, podczas uruchamiania usługi jest zgłaszany wyjątek sprawdzania poprawności.If the binding has disabled transaction flow, but one of the operations on a service contract requires an incoming transaction, then a validation exception is thrown at service startup.

Większość stałych powiązań WCF zawiera transactionFlow atrybuty i, które umożliwiają transactionProtocol skonfigurowanie określonego powiązania w celu akceptowania przychodzących transakcji.Most of the standing bindings WCF provides contain the transactionFlow and transactionProtocol attributes to enable you to configure the specific binding to accept incoming transactions. Aby uzyskać więcej informacji na temat ustawiania elementów konfiguracji, zobacz <binding> .For more information about setting the configuration elements, see <binding>.

Administrator lub program do wdrażania może użyć przepływu transakcji na poziomie punktu końcowego w celu skonfigurowania wymagań przepływu transakcji lub ograniczeń w czasie wdrażania przy użyciu pliku konfiguracji.An administrator or deployer can use endpoint-level transaction flow to configure transaction flow requirements or constraints at deployment time using the configuration file.

ZabezpieczeniaSecurity

Aby zapewnić bezpieczeństwo i integralność systemu, należy zabezpieczyć wymianę komunikatów podczas przepływu transakcji między aplikacjami.To ensure system security and integrity, you must secure message exchanges when flowing transactions between applications. Nie należy przepływać ani ujawniać szczegółowych informacji o transakcji do żadnej aplikacji, która nie jest uprawniona do uczestniczenia w tej samej transakcji.You should not flow or disclose transaction details to any application that is not entitled to participate in the same transaction.

Podczas generowania klientów WCF do nieznanych lub niezaufanych usług sieci Web za pomocą wymiany metadanych, wywołania operacji na tych usługach sieci Web powinny pomijać bieżącą transakcję, jeśli jest to możliwe.When generating WCF clients to unknown or untrusted Web services through the use of metadata exchange, calls to operations on these Web services should suppress the current transaction if possible. Poniższy przykład demonstruje, jak to zrobić.The following example demonstrates how to do this.

//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ć w taki sposób, aby akceptowały transakcje przychodzące tylko od klientów, którzy zostali uwierzytelnieni i autoryzowani.In addition, services should be configured to accept incoming transactions only from clients that they have authenticated and authorized. Przychodzące transakcje powinny być akceptowane tylko wtedy, gdy pochodzą z wysoce zaufanych klientów.Incoming transactions should only be accepted if they come from highly trusted clients.

Potwierdzenia zasadPolicy Assertions

Funkcja WCF używa potwierdzeń zasad do sterowania przepływem transakcji.WCF uses policy assertions to control transaction flow. Potwierdzenia zasad znajdują się w dokumencie zasad usługi, który jest generowany przez agregowanie kontraktów, konfiguracji i atrybutów.Policy assertions can be found in a service’s policy document, which is generated by aggregating contracts, configuration, and attributes. Klient może uzyskać dokument zasad usługi przy użyciu polecenia HTTP GET lub WS-MetadataExchange Request-Reply.The client can obtain the service’s policy document using an HTTP GET or a WS-MetadataExchange request-reply. Klienci mogą następnie przetwarzać dokument zasad, aby określić, które operacje w kontrakcie usługi mogą obsługiwać lub wymagać przepływu transakcji.Clients can then process the policy document to determine which operations on a service contract may support or require transaction flow.

Potwierdzenia zasad przepływu transakcji mają wpływ na przepływ transakcji przez określenie nagłówków protokołu SOAP, które klient powinien wysłać do usługi, aby reprezentować transakcję.Transaction flow policy assertions affect transaction flow by specifying the SOAP headers that a client should send to a service to represent a transaction. Wszystkie nagłówki transakcji muszą być oznaczone jako MustUnderstand równe true .All transaction headers must be marked with MustUnderstand equal to true. Wszystkie komunikaty z nagłówkiem oznaczonym inaczej są odrzucane z błędem SOAP.Any message with a header marked otherwise is rejected with a SOAP fault.

Tylko jedno potwierdzenie zasad związanych z transakcją może być obecne w jednej operacji.Only one transaction-related policy assertion can be present on a single operation. Dokumenty zasad z więcej niż jedną potwierdzeniem transakcji w operacji są uznawane za nieprawidłowe i są odrzucane przez WCF.Policy documents with more than one transaction assertion on an operation are considered invalid and are rejected by WCF. Ponadto tylko jeden protokół transakcji może być obecny w obrębie każdego typu portu.In addition, only a single transaction protocol can be present inside each port type. Dokumenty zasad z operacjami odwołującymi 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 do obsługi metadanych ServiceModel (Svcutil.exe).Policy documents with operations referencing more than one transaction protocol inside a single port type are considered invalid, and are rejected by the ServiceModel Metadata Utility Tool (Svcutil.exe). Dokumenty zasad z potwierdzeniami transakcji znajdującymi się w wiadomościach wyjściowych lub jednokierunkowymi komunikatami wejściowymi są również uznawane za nieprawidłowe.Policy documents with transaction assertions present on output messages or one-way input messages are also considered invalid.