OperationContractAttribute.IsInitiating Właściwość

Definicja

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

Boolean

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 MethodOnemetody , 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.

Dotyczy