Partilhar 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 Windows Communication Foundation (WCF) de um cliente, mas não esperam uma resposta. Este tipo de contrato pode ser utilizado, por exemplo, para publicar notificações a 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 um possa 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 IsOneWay propriedade e a OperationContractAttribute classe.

Para obter mais informações sobre como criar um aplicativo cliente para um contrato duplex, consulte Como acessar serviços com contratos unidirecionais e de solicitação-resposta. Para obter um exemplo de trabalho, consulte o exemplo One-Way .

Para criar um contrato unidirecional

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

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

  3. Designe operações que não devem ter saída (nenhum valor de retorno e nenhum parâmetro out ou ref) como unidirecionais, definindo a IsOneWay propriedade como true. Observe que as operações que carregam a OperationContractAttribute classe satisfazem um contrato de solicitação-resposta por padrão porque a IsOneWay propriedade é false por padrão. Portanto, você deve especificar explicitamente o valor da propriedade de atributo a ser true se 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 assume como padrão solicitação-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

Consulte também