Udostępnij za pośrednictwem


Atrybuty transakcji elementu ServiceModel

Program Windows Communication Foundation (WCF) udostępnia właściwości trzech standardowych System.ServiceModel atrybutów, które umożliwiają skonfigurowanie zachowania transakcji dla usługi WCF:

TransactionFlowAttribute

Atrybut TransactionFlowAttribute określa gotowość operacji w umowie usługi do akceptowania przychodzących transakcji od klienta. Atrybut zapewnia tę kontrolkę z następującą właściwością: Transakcje używają TransactionFlowOption wyliczenia, aby określić, czy transakcja przychodząca to Mandatory, Allowedlub NotAllowed.

Jest to jedyny atrybut, który wiąże operacje usługi z interakcjami zewnętrznymi z klientem. Atrybuty opisane w poniższych sekcjach odnoszą się do użycia transakcji w ramach wykonywania operacji.

ServiceBehaviorAttribute

Atrybut ServiceBehaviorAttribute określa zachowanie wewnętrzne wykonania implementacji kontraktu usługi. Właściwości specyficzne dla transakcji tego atrybutu obejmują:

  • TransactionAutoCompleteOnSessionClose Określa, czy zakończyć nieukończoną transakcję, gdy sesja zostanie zamknięta. Wartość domyślna dla tej właściwości to false. Jeśli ta właściwość to true, a sesja przychodząca została bezpiecznie zamknięta zamiast zamykać z powodu błędów sieci lub klienta, wszystkie niezapełnione transakcje zostaną pomyślnie zakończone. W przeciwnym razie, jeśli ta właściwość jest false lub jeśli sesja nie została bezpiecznie zamknięta, każda nieuzupełniona transakcja zostanie wycofana po zamknięciu sesji. Jeśli ta właściwość to true, kanał przychodzący musi być oparty na sesji.

  • ReleaseServiceInstanceOnTransactionComplete Określa, czy bazowe wystąpienie usługi jest zwalniane po zakończeniu transakcji. Wartość domyślna dla tej właściwości to true. Następny komunikat przychodzący powoduje utworzenie nowego wystąpienia bazowego, odrzucając dowolny stan poszczególnych transakcji, który mógł być przechowywany w poprzednim wystąpieniu. Zwolnienie wystąpienia usługi to wewnętrzna akcja wykonywana przez usługę i nie ma wpływu na istniejące połączenia lub sesje, które mogły zostać ustanowione przez klientów. Ta funkcja jest równoważna funkcji aktywacji just in time com+ zapewnianej przez funkcję aktywacji just in time. Jeśli właściwość ma truewartość , ConcurrencyMode musi być równa Single. W przeciwnym razie usługa zgłasza nieprawidłowy wyjątek weryfikacji konfiguracji podczas uruchamiania.

  • TransactionIsolationLevel określa poziom izolacji do użycia dla transakcji w usłudze; ta właściwość przyjmuje jedną z IsolationLevel wartości. Jeśli lokalna właściwość poziomu izolacji jest inna niż Unspecified, poziom izolacji transakcji przychodzącej musi być zgodny z ustawieniem tej właściwości lokalnej. W przeciwnym razie transakcja przychodząca jest odrzucana, a błąd jest wysyłany z powrotem do klienta. Jeśli TransactionScopeRequired wartość to true, a żadna transakcja nie jest przepływana, ta właściwość określa IsolationLevel wartość do użycia dla transakcji utworzonej lokalnie. Jeśli IsolationLevel parametr ma wartość Unspecified, IsolationLevelSerializable jest używany.

  • TransactionTimeout określa okres, w którym musi zostać ukończona nowa transakcja utworzona w usłudze. Jeśli ten czas zostanie osiągnięty i transakcja nie została ukończona, zostanie ona przerwana. Parametr TimeSpan jest używany jako TransactionScope limit czasu dla wszystkich operacji, które zostały TransactionScopeRequired ustawione na true i dla których została utworzona nowa transakcja. Limit czasu to maksymalny dozwolony czas trwania od utworzenia transakcji do zakończenia fazy 1 w protokole zatwierdzania dwufazowego. Używana wartość limitu czasu jest zawsze niższą wartością między właściwością TransactionTimeout a ustawieniem transactionTimeout konfiguracji.

OperationBehaviorAttribute

Atrybut OperationBehaviorAttribute określa zachowania metod w implementacji usługi. Można go użyć do wskazania konkretnego zachowania wykonywania operacji. Właściwości tego atrybutu nie mają wpływu na opis języka WSDL (Web Service Description Language) umowy usługi i są wyłącznie elementami modelu programowania WCF, które umożliwiają typowe funkcje, które deweloperzy w przeciwnym razie muszą zaimplementować.

Ten atrybut ma następujące właściwości specyficzne dla transakcji:

  • TransactionScopeRequired Określa, czy metoda musi być wykonywana w aktywnym zakresie transakcji. Wartość domyślna to false. OperationBehaviorAttribute Jeśli atrybut nie jest ustawiony dla metody, oznacza to również, że metoda nie zostanie wykonana w transakcji. Jeśli zakres transakcji nie jest wymagany dla operacji, każda transakcja, która znajduje się w nagłówku komunikatu, nie jest aktywowana i pozostaje elementem IncomingMessageProperties elementu .OperationContext Jeśli dla operacji wymagany jest zakres transakcji, źródło transakcji pochodzi z jednego z następujących elementów:

    • Jeśli transakcja jest przepływany z klienta, metoda jest wykonywana w zakresie transakcji utworzonym przy użyciu tej transakcji rozproszonej.

    • W przypadku transportu w kolejce używana jest transakcja używana do dequeue komunikatu. Należy pamiętać, że użyta transakcja nie jest transakcją przepływaną, ponieważ nie została dostarczona przez oryginalnego nadawcę wiadomości.

    • Transport niestandardowy może zapewnić transakcję przy użyciu elementu TransportTransactionProperty.

    • Jeśli żaden z powyższych elementów nie udostępnia zewnętrznego źródła dla transakcji, nowe Transaction wystąpienie zostanie utworzone bezpośrednio przed wywołaniem metody.

  • TransactionAutoComplete określa, czy transakcja, w której jest wykonywana metoda, jest wykonywana automatycznie, jeśli nie są zgłaszane żadne nieobsługiwane wyjątki. Jeśli ta właściwość to true, infrastruktura wywołująca automatycznie oznacza transakcję jako "ukończoną", jeśli metoda użytkownika zwraca bez zgłaszania wyjątku. Jeśli ta właściwość to false, transakcja jest dołączona do wystąpienia i jest oznaczona tylko jako "ukończona", jeśli klient wywołuje kolejną metodę oznaczoną tą właściwością równą true, lub jeśli kolejna metoda jawnie wywołuje SetTransactionCompletemetodę . Nie można wykonać jednego z tych wyników w transakcji nigdy nie jest "ukończone", a zawarta praca nie jest zatwierdzana, chyba że TransactionAutoCompleteOnSessionClose właściwość jest ustawiona na true. Jeśli ta właściwość jest ustawiona na true, musisz użyć kanału z sesją, a właściwość musi być ustawiona InstanceContextMode na PerSession.