Compartir vía


OperationContractAttribute.IsInitiating Propiedad

Definición

Obtiene o establece un valor que indica si el método implementa una operación que puede iniciar una sesión en el servidor (si este tipo de sesión 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

Valor de propiedad

Boolean

true si se permite a la operación iniciar una sesión en el servidor, de lo contrario, false. De manera predeterminada, es true.

Ejemplos

El ejemplo siguiente es un servicio que implementa un contrato de servicio que especifica tres métodos. El servicio requiere una sesión. Si la primera llamada de un autor de la llamada es a cualquier operación distinta de MethodOne, se rechaza el canal y se produce una excepción. Cuando un autor de la llamada inicia una sesión llamando a MethodOne, ese autor de la llamada puede terminar la sesión de comunicación en cualquier momento llamando a MethodThree. MethodTwo se puede llamar a cualquier número de veces durante una sesión.

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

Comentarios

La propiedad IsInitiating controla si una operación puede ser la primera operación a la que se llama cuando se crea una sesión.

Nota

El valor de ServiceContractAttribute.SessionMode debe ser Allowed o Required y el enlace utilizado debe requerir o permitir las sesiones para que la propiedad IsInitiating funcione correctamente.

El valor predeterminado es true, lo que significa que una operación puede ser la primera a la que se llame en un canal. Las siguientes llamadas al método de inicio no tienen otro efecto que llamar al método. No se crea ninguna otra sesión. Si el contrato no utiliza una sesión, se omitirá la definición de IsInitiating en false.

Normalmente, define IsInitiating en false para obligar a los clientes a llamar a otro método en el servicio antes de poder invocar a este. Por ejemplo, si su servicio tiene una serie de operaciones que dependen de un número de identificador de orden, puede establecer IsInitiating en true para una operación de servicio GetOrderId y establecer todas las operaciones de servicio restantes en false. Esto garantiza que cada nuevo cliente obtiene un identificador de orden antes de utilizar los otros métodos expuestos por el servicio.

Nota

Hay una interacción entre IsInitiating y la propiedad Action. Un contrato de servicio sólo puede contar con una operación de servicio con la propiedad Action establecida en "*." Cualquier grupo de contratos de servicio hospedados en el mismo URI de escucha que implementa una clase de servicio puede tener muchas operaciones de servicio con la Action propiedad establecida en "*" cuando la IsInitiating propiedad está establecida falseen . Sin embargo, solo uno de esos métodos de servicio puede tener la Action propiedad establecida en "*" y la IsInitiating propiedad establecida en true.

Si un servicio recibe un mensaje para una operación que no se inicia, el servicio devuelve un error de SOAP ActionNotSupported. El cliente experimenta este hecho como FaultException. Si un cliente llama primero a una operación que no se inicia, el tiempo de ejecución del cliente inicia System.InvalidOperationException.

Para obtener más información, consulte Uso de sesiones.

Se aplica a