Sdílet prostřednictvím


OperationContractAttribute.IsInitiating Vlastnost

Definice

Získá nebo nastaví hodnotu, která označuje, zda metoda implementuje operaci, která může zahájit relaci na serveru (pokud taková relace existuje).

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

Hodnota vlastnosti

Boolean

truepokud je operace povolena k zahájení relace na serveru, jinak . false Výchozí formát je true.

Příklady

Následující příklad je služba, která implementuje kontrakt služby, který určuje tři metody. Služba vyžaduje relaci. Pokud je první hovor volajícího na jinou operaci, než MethodOneje , kanál se odmítne a vyvolá se výjimka. Když volající zahájí relaci voláním MethodOne, může volající ukončit komunikační relaci kdykoli voláním MethodThree. MethodTwo může být volána libovolný početkrát během relace.

[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;  
  }  
}  

Poznámky

Vlastnost IsInitiating určuje, zda operace může být první operací volána při vytvoření relace.

Poznámka

Hodnota ServiceContractAttribute.SessionMode musí být buď Allowed nebo Required a použitá vazba musí vyžadovat nebo povolit IsInitiating , aby vlastnost správně fungovala.

Výchozí hodnota je true, což znamená, že operace může být první volána v kanálu. Následná volání iniciační metody nemají žádný vliv, kromě volání metody. Nevytvořili se žádné další relace. Pokud kontrakt nevyužívá relaci, je nastavení IsInitiating ignorováno false .

Obvykle nastavíte IsInitiating tak, aby false klienti volali jinou metodu ve službě předtím, než budou moct tuto metodu vyvolat. Pokud má například vaše služba řadu operací, které závisí na čísle ID objednávky, můžete nastavit IsInitiating operaci true GetOrderId služby a nastavit všechny zbývající operace služby na false. Tím zajistíte, že každý nový klient získá ID objednávky před použitím dalších metod vystavených službou.

Poznámka

Existuje interakce mezi IsInitiating vlastností a vlastností Action . Kontrakt služby může mít pouze jednu operaci služby s vlastností nastavenou Action na *. Každá skupina kontraktů služeb hostovaných na stejném identifikátoru URI naslouchání, který implementuje třída služby, může mít mnoho operací služby s Action vlastností nastavenou na "*", pokud IsInitiating je vlastnost nastavena na false. Pouze jedna z těchto metod služby však může mít Action vlastnost nastavena na "*" a vlastnost nastavena IsInitiating na true.

Pokud služba obdrží zprávu pro neicializovanou operaci, vrátí služba chybu ActionNotSupported SOAP. Klient to prožije jako FaultException. Pokud klient nejprve volá operaci, která není inicializována, vyvolá modul runtime System.InvalidOperationExceptionklienta .

Další informace najdete v tématu Používání relací.

Platí pro