OperationContractAttribute.IsInitiating Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
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.