Compartir a través de


Cómo crear un contrato unidireccional

En este tema se muestran los pasos básicos para crear métodos que utilizan un contrato unidireccional. Tales métodos invocan las operaciones de un servicio de Windows Communication Foundation (WCF) desde un cliente, pero no esperan una respuesta. Se puede utilizar este tipo de contrato, por ejemplo, para publicar notificaciones a muchos suscriptores. También puede utilizar los contratos unidireccionales al crear un contrato dúplex (bidireccional), que permita a los clientes y servidores comunicarse entre sí independientemente de modo que cualquiera de ellos pueda iniciar una llamada al otro. Esto puede permitir, en particular, al servidor que realice llamadas unidireccionales al cliente que el cliente puede tratar como eventos. Para obtener información detallada sobre cómo especificar métodos unidireccionales, vea la propiedad IsOneWay y la clase OperationContractAttribute.

Para obtener más información sobre creación de una aplicación cliente para un contrato dúplex, vea Cómo: Obtener acceso a los servicios WCF con contratos unidireccionales y de solicitud-respuesta. Para obtener un ejemplo práctico, vea el ejemplo Unidireccional.

Creación de un contrato unidireccional

  1. Cree el contrato de servicios aplicando la clase ServiceContractAttribute a la interfaz que define los métodos que el servicio va a implementar.

  2. Indique qué métodos de la interfaz puede invocar un cliente aplicándoles la clase OperationContractAttribute.

  3. Designe operaciones que no deban tener ningún resultado (ningún valor devuelto y ningún parámetro out o ref) como unidireccionales mediante el establecimiento de la propiedad IsOneWay en true. Observe que las operaciones que llevan la clase OperationContractAttribute satisfacen de forma predeterminada un contrato de solicitud‑respuesta porque la propiedad IsOneWay es false de forma predeterminada. Así que debe especificar explícitamente el valor de la propiedad de atributo para que sea true si desea un contrato unidireccional para el método.

Ejemplo

El siguiente ejemplo de código define un contrato para un servicio que incluye varios métodos unidireccionales. Todos los métodos tienen contratos unidireccionales excepto Equals, que tiene como valor predeterminado solicitud‑respuesta y devuelve un resultado.

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

Vea también

Tareas

Definición de un contrato de servicio de Windows Communication Foundation
Sesión
Creación de un contrato dúplex

Referencia

ServiceContractAttribute
OperationContractAttribute

Conceptos

Diseño e implementación de servicios