Freigeben über


OperationContractAttribute.IsInitiating Eigenschaft

Definition

Ruft einen Wert ab, der angibt, ob die Methode einen Vorgang implementiert, der eine Sitzung auf dem Server initiieren kann (wenn eine solche Sitzung vorhanden ist), oder legt diesen fest.

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

Eigenschaftswert

Boolean

true, wenn dem Vorgang erlaubt wird, eine Sitzung auf dem Server zu initiieren, andernfalls false. Der Standardwert ist true.

Beispiele

Das folgende Beispiel ist ein Dienst, der einen Dienstvertrag implementiert, der drei Methoden angibt. Der Dienst erfordert eine Sitzung. Ruft der Aufrufer zuerst einen anderen Vorgang als MethodOne auf, wird der Kanal verweigert, und es wird eine Ausnahme ausgelöst. Initiiert ein Aufrufer eine Sitzung durch Aufruf von MethodOne, kann dieser Aufrufer die Kommunikationssitzung jederzeit durch den Aufruf von MethodThree beenden. MethodTwo kann während einer Sitzung beliebig oft aufgerufen werden.

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

Hinweise

Die IsInitiating-Eigenschaft steuert, ob ein Vorgang bei der Erstellung einer Sitzung als erster Vorgang aufgerufen werden kann.

Hinweis

Um eine einwandfreie Funktion zu gewährleisten, muss der Wert von ServiceContractAttribute.SessionModeAllowed oder Required lauten. Die Bindung muss Sitzungen für die IsInitiating-Eigenschaft anfordern oder zulassen.

Der Standardwert ist true, was bedeutet, dass ein Vorgang als erster Vorgang in einem Kanal aufgerufen werden kann. Nachfolgende Aufrufe der initiierenden Methode haben nur die Auswirkung, dass die Methode aufgerufen wird. Es werden keine anderen Sitzungen erstellt. Wenn der Vertrag keine Sitzung nutzt, wird die Festlegung von IsInitiating auf false ignoriert.

In der Regel legen Sie für IsInitiatingfalse fest, um zu erzwingen, dass Clients eine andere Methode für den Dienst aufrufen, bevor sie diese aktivieren können. Verfügt beispielsweise Ihr Dienst über eine Reihe von Vorgängen, die von einer ID-Nummer abhängig sind, können Sie für IsInitiating den true für einen GetOrderId-Dienstvorgang festlegen und für alle verbleibenden Dienstvorgänge false festlegen. Hiermit wird sichergestellt, dass jeder neue Client vor der Verwendung anderer, vom Dienst verfügbar gemachter Methoden eine Auftrags-ID erhält.

Hinweis

Es findet eine Interaktion zwischen IsInitiating und der Action-Eigenschaft statt. Ein Dienstvertrag kann nur über einen Dienstvorgang verfügen, für den die Action-Eigenschaft auf "*" gesetzt ist. Jede Gruppe von Dienstverträgen, die in derselben Listen-URI gehostet werden, die eine Dienstklasse implementiert, kann viele Dienstvorgänge mit der Eigenschaft "" aufweisen, wenn die Action IsInitiating Eigenschaft auf "*" festgelegt falseist. Allerdings kann nur eine dieser Dienstmethoden die Eigenschaft auf "" und die Action IsInitiating Eigenschaft auf "*" festgelegt truehaben.

Wenn ein Dienst eine Nachricht für einen Nicht-Initiierungsvorgang empfängt, gibt der Dienst einen ActionNotSupported-SOAP-Fehler zurück. Der Client erfährt dieses als FaultException. Wenn ein Client zuerst einen Nicht-Initiierungsvorgang aufruft, löst die Clientlaufzeit System.InvalidOperationException aus.

Weitere Informationen finden Sie unter Verwenden von Sitzungen.

Gilt für