Compartilhar via


OperationContractAttribute.IsInitiating Propriedade

Definição

Obtém ou define um valor que indica se o método implementa uma operação que pode iniciar uma sessão no servidor (se essa sessão existir).

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 da propriedade

Boolean

true se a operação tiver permissão para iniciar uma sessão no servidor, caso contrário, false. O padrão é true.

Exemplos

O exemplo a seguir é um serviço que implementa um contrato de serviço que especifica três métodos. O serviço requer uma sessão. Se a primeira chamada de um chamador for para qualquer operação diferente MethodOne, o canal será recusado e uma exceção será lançada. Quando um chamador inicia uma sessão chamando MethodOne, esse chamador pode encerrar a sessão de comunicação a qualquer momento chamando MethodThree. MethodTwo pode ser chamado várias vezes durante uma sessão.

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

Comentários

A IsInitiating propriedade controla se uma operação pode ser a primeira operação chamada quando uma sessão é criada.

Observação

O valor deve ServiceContractAttribute.SessionMode ser Allowed ou Required e a associação usada deve exigir ou permitir sessões para que a IsInitiating propriedade funcione corretamente.

O padrão é true, o que significa que uma operação pode ser a primeira chamada em um canal. As chamadas subsequentes para o método de início não têm efeito, além de chamar o método. Nenhuma outra sessão é criada. Se o contrato não usar uma sessão, a configuração IsInitiating será false ignorada.

Normalmente, você define IsInitiating para false forçar os clientes a chamar outro método no serviço antes que eles possam invocar este. Por exemplo, se o serviço tiver uma série de operações que dependem de um número de ID do pedido, você poderá definir IsInitiating true para uma GetOrderId operação de serviço e definir todas as operações de serviço restantes como false. Isso garante que cada novo cliente obtenha uma ID de pedido antes de usar os outros métodos expostos pelo serviço.

Observação

Há uma interação entre IsInitiating a propriedade e a Action propriedade. Um contrato de serviço pode ter apenas uma operação de serviço com a Action propriedade definida como "*". Qualquer grupo de contratos de serviço hospedados no mesmo URI de escuta que uma classe de serviço implementa pode ter muitas operações de serviço com a Action propriedade definida como "*" quando a IsInitiating propriedade está definida como false. No entanto, apenas um desses métodos de serviço pode ter a Action propriedade definida como "*" e a IsInitiating propriedade definida como true.

Se um serviço receber uma mensagem para uma operação não iniciada, o serviço retornará uma falha SOAP ActionNotSupported. O cliente experimenta isso como um FaultException. Se um cliente chamar uma operação de não inicialização primeiro, o runtime do cliente gerará um System.InvalidOperationException.

Para obter mais informações, consulte Como usar sessões.

Aplica-se a