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ść totrue
, 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ść jestfalse
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ść totrue
, 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ść matrue
wartość , 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 ustawieniemtransactionTimeout
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ść tofalse
, 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 natrue
. Jeśli ta właściwość jest ustawiona natrue
, musisz użyć kanału z sesją, a właściwość musi być ustawiona InstanceContextMode na PerSession.