Procedimiento para crear un contrato unidireccional
En este tema se muestran los pasos básicos para crear métodos que utilizan un contrato unidireccional. Dichos métodos invocan las operaciones de un servicio 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 cómo crear una aplicación cliente para un contrato dúplex, consulte Procedimiento para acceder a los servicios con contratos unidireccionales y de solicitud-respuesta. Para obtener un ejemplo práctico, consulte el ejemplo de unidireccional.
Creación de un contrato unidireccional
Cree el contrato de servicios aplicando la clase ServiceContractAttribute a la interfaz que define los métodos que el servicio va a implementar.
Indique qué métodos de la interfaz puede invocar un cliente aplicándoles la clase OperationContractAttribute.
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 esfalse
de forma predeterminada. Así que debe especificar explícitamente el valor de la propiedad de atributo para que seatrue
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)]
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