OperationContractAttribute.IsInitiating Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera lub ustawia wartość wskazującą, czy metoda implementuje operację, która może zainicjować sesję na serwerze (jeśli taka sesja istnieje).
public:
property bool IsInitiating { bool get(); void set(bool value); };
public bool IsInitiating { get; set; }
member this.IsInitiating : bool with get, set
Public Property IsInitiating As Boolean
Wartość właściwości
true
jeśli operacja jest dozwolona do zainicjowania sesji na serwerze, w przeciwnym razie false
. Wartość domyślna to true
.
Przykłady
Poniższy przykład to usługa, która implementuje kontrakt usługi, który określa trzy metody. Usługa wymaga sesji. Jeśli pierwsze wywołanie wywołującego dotyczy dowolnej operacji innej niż MethodOne
, kanał zostanie odrzucony i zostanie zgłoszony wyjątek. Gdy obiekt wywołujący inicjuje sesję przez wywołanie MethodOne
metody , obiekt wywołujący może zakończyć sesję komunikacji w dowolnym momencie przez wywołanie metody MethodThree
. MethodTwo
może być wywoływana dowolna liczba razy podczas sesji.
[ServiceContract(SessionMode=SessionMode.Required)]
public class InitializeAndTerminateService
{
[OperationContract(
IsOneWay=true,
IsInitiating=true,
IsTerminating=false
)]
public void MethodOne()
{
return;
}
[OperationContract(
IsInitiating=false,
IsTerminating=false
)]
public int MethodTwo(int x, out int y)
{
y = 34;
return 0;
}
[OperationContract(
IsOneWay=true,
IsInitiating=false,
IsTerminating=true
)]
public void MethodThree()
{
return;
}
}
Uwagi
Właściwość IsInitiating określa, czy operacja może być pierwszą operacją wywoływaną podczas tworzenia sesji.
Uwaga
Wartość ServiceContractAttribute.SessionMode musi być albo Allowed lub Required , a użyte powiązanie musi wymagać lub zezwolić sesjom na IsInitiating prawidłowe działanie właściwości.
Wartość domyślna to true
, co oznacza, że operacja może być pierwszą wywołaną w kanale. Kolejne wywołania metody inicjującej nie mają żadnego wpływu niż wywołanie metody. Nie są tworzone żadne inne sesje. Jeśli kontrakt nie korzysta z sesji, ustawienie jest IsInitiating false
ignorowane.
Zazwyczaj należy ustawić wartość IsInitiating false
, aby wymusić, aby klienci wywołali inną metodę w usłudze, zanim będą mogli wywołać tę metodę. Jeśli na przykład usługa ma serię operacji, które zależą od numeru identyfikatora zamówienia, możesz ustawić IsInitiating dla operacji usługi i ustawić true
GetOrderId
wszystkie pozostałe operacje usługi na false
. Dzięki temu każdy nowy klient uzyska identyfikator zamówienia przed użyciem innych metod uwidocznionych przez usługę.
Uwaga
Istnieje interakcja między właściwością IsInitiating a właściwością Action . Kontrakt usługi może mieć tylko jedną operację usługi z właściwością ustawioną Action na "*". Każda grupa kontraktów usług hostowanych w tym samym identyfikatorze URI nasłuchiwania, który implementuje klasę usług, może mieć wiele operacji usługi z właściwością Action ustawioną na "*", gdy IsInitiating właściwość jest ustawiona na false
. Jednak tylko jedna z tych metod usługi może mieć Action właściwość ustawioną na "*" i właściwość ustawioną IsInitiating na true
.
Jeśli usługa otrzyma komunikat dotyczący operacji inicjującej, usługa zwróci błąd ActionNotSupported SOAP. Klient używa tej funkcji jako elementu FaultException. Jeśli klient wywołuje najpierw operację inicjującą, środowisko uruchomieniowe klienta zgłasza błąd System.InvalidOperationException.
Aby uzyskać więcej informacji, zobacz Korzystanie z sesji.