Partager via


OperationContractAttribute.IsInitiating Propriété

Définition

Obtient ou définit une valeur qui indique si la méthode implémente une opération qui peut initialiser une session sur le serveur (si une telle session existe).

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

Valeur de propriété

Boolean

true si l'opération est autorisée à initialiser une session sur le serveur ; sinon, false. La valeur par défaut est true.

Exemples

L'exemple suivant est un service qui implémente un contrat de service qui spécifie trois méthodes. Le service requiert une session. Si le premier appel d'un appelant est destiné à une opération autre que MethodOne, le canal est refusé et une exception est levée. Lorsqu'un appelant démarre une session en appelant MethodOne, cet appelant peut arrêter la session de communication à tout moment en appelant MethodThree. MethodTwo peut être appelé n’importe quel nombre de fois pendant une session.

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

Remarques

La propriété IsInitiating contrôle si une opération peut être la première appelée lors de la création d'une session.

Notes

La valeur de ServiceContractAttribute.SessionMode doit être Allowed ou Required et la liaison utilisée doit requérir ou autoriser des sessions pour que la propriété IsInitiating fonctionne correctement.

La valeur par défaut est true, ce qui signifie qu'une opération peut être la première appelée sur un canal. Excepté l'appel à la méthode, les appels suivants vers la méthode d'initialisation sont sans effet. Aucune autre session n'est créée. Si le contrat n'utilise pas de session, l'affectation de la valeur IsInitiatingfalse est ignorée.

En général, vous affectez IsInitiating à false pour forcer les clients à appeler une autre méthode sur le service avant qu'ils ne puissent invoquer celle-ci. Par exemple, si votre service a une série d'opérations qui dépendent d'un numéro d'ID d'ordre, vous pouvez affectez à IsInitiating la valeur true pour une opération de service GetOrderId et affecter à toutes les opérations de service restantes la valeur false. Cela garantit que chaque nouveau client obtient un ID d'ordre avant d'utiliser les autres méthodes exposées par le service.

Notes

Il existe une interaction entre IsInitiating et la propriété Action. Un contrat de service peut avoir une seule opération de service avec la valeur « * » affectée à la propriété Action. Tout groupe de contrats de service hébergés au même URI d’écoute qu’une classe de service implémente peut avoir de nombreuses opérations de service avec la Action propriété définie sur «* » lorsque la IsInitiating propriété est définie falsesur . Toutefois, une seule de ces méthodes de service peut avoir la Action propriété définie sur «* » et la IsInitiating propriété définie truesur .

Si un service reçoit un message pour une opération qui n'est pas une opération d'initialisation, le service retourne une erreur SOAP ActionNotSupported. Le client rencontre ceci comme une FaultException. Si un client appelle d'abord une opération qui n'est pas une opération d'initialisation, l'exécution du client lève une System.InvalidOperationException.

Pour plus d’informations, consultez Utilisation de sessions.

S’applique à