Compartilhar via


Como: criar um contrato unidirecional

Este tópico mostra as etapas básicas para criar métodos que usam um contrato unidirecional. Esses métodos invocam operações em um serviço WCF (Windows Communication Foundation) de um cliente, mas não esperam uma resposta. Esse tipo de contrato pode ser usado, por exemplo, para publicar notificações para muitos assinantes. Você também pode usar contratos unidirecionais ao criar um contrato duplex (bidirecional), que permite que clientes e servidores se comuniquem entre si de forma independente para que possam iniciar chamadas para o outro. Isso pode permitir, em particular, que o servidor faça chamadas unidirecionais para o cliente que o cliente pode tratar como eventos. Para obter informações detalhadas sobre como especificar métodos unidirecionais, consulte a propriedade IsOneWay e a classe OperationContractAttribute.

Para obter mais informações sobre como criar um aplicativo cliente para um contrato duplex, confira Como acessar serviços com contratos unidirecionais e de solicitação e resposta. Para ver um exemplo prático, confira a amostra Unidirecional.

Criar um contrato unidirecional

  1. Crie o contrato de serviço aplicando a classe ServiceContractAttribute à interface que define os métodos aos quais o serviço deve ser implementado.

  2. Indique quais métodos na interface um cliente pode invocar aplicando a classe OperationContractAttribute a eles.

  3. Designe operações que não devem ter saída (nenhum valor retornado nem parâmetros de saída ou referência) como unidirecionais definindo a propriedade IsOneWay como true. Observe que as operações que carregam a classe OperationContractAttribute atendem a um contrato de solicitação e resposta por padrão, porque a propriedade IsOneWay é false por padrão. Portanto, você deve especificar explicitamente o valor da propriedade de atributo se true quiser um contrato unidirecional para o método.

Exemplo

O exemplo de código a seguir define um contrato para um serviço que inclui vários métodos unidirecionais. Todos os métodos têm contratos unidirecionais, exceto Equals, que, por padrão, define solicitação e resposta e retorna um resultado.

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples", SessionMode=SessionMode.Required)]
public interface ICalculatorSession
{
    [OperationContract(IsOneWay=true)]
    void Clear();
    [OperationContract(IsOneWay = true)]
    void AddTo(double n);
    [OperationContract(IsOneWay = true)]
    void SubtractFrom(double n);
    [OperationContract(IsOneWay = true)]
    void MultiplyBy(double n);
    [OperationContract(IsOneWay = true)]
    void DivideBy(double n);
    [OperationContract]
    double Equals();
}
<ServiceContract(Namespace:="http://Microsoft.ServiceModel.Samples", SessionMode:=SessionMode.Required)> _
Public Interface ICalculatorSession

    <OperationContract(IsOneWay:=True)> _
    Sub Clear()
    <OperationContract(IsOneWay:=True)> _
    Sub AddTo(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub SubtractFrom(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub MultiplyBy(ByVal n As Double)
    <OperationContract(IsOneWay:=True)> _
    Sub DivideBy(ByVal n As Double)
    <OperationContract()> _
    Function Equal() As Double
End Interface

Confira também