Compartir vía


OperationContractAttribute.IsOneWay Propiedad

Definición

Obtiene o establece un valor que indica si una operación devuelve un mensaje de respuesta.

public:
 property bool IsOneWay { bool get(); void set(bool value); };
public bool IsOneWay { get; set; }
member this.IsOneWay : bool with get, set
Public Property IsOneWay As Boolean

Valor de propiedad

Boolean

true si este método recibe un mensaje de solicitud y no devuelve ningún mensaje de respuesta; de lo contrario, false. De manera predeterminada, es false.

Ejemplos

El ejemplo siguiente es un servicio que implementa un contrato de servicio que especifica tres operaciones. Dos de los métodos implementan operaciones bidireccionales, que devuelven mensajes de respuesta subyacentes al autor de la llamada sin tener en cuenta el valor devuelto. El tercer método implementa una operación que recibe una llamada (un mensaje entrante subyacente) pero no devuelve ningún mensaje de respuesta subyacente.

[ServiceContract]  
public class OneAndTwoWay  
{  
  // The client waits until a response message appears.  
  [OperationContract]  
  public int MethodOne (int x, out int y)  
  {  
    y = 34;  
    return 0;  
  }  

  // The client waits until an empty response message appears.  
  [OperationContract]  
  public void MethodTwo (int x)  
  {  
    return;  
  }  

  // The client returns as soon as an outbound message  
  // is queued for dispatch to the service; no response  
  // message is generated or sent.  
  [OperationContract(IsOneWay=true)]  
  public void MethodThree (int x)  
  {  
    return;  
  }  
}  

Comentarios

Utilice la propiedad IsOneWay para indicar que una operación no devuelve un mensaje de respuesta. Este tipo de operación es útil para notificaciones o comunicaciones de estilo del evento, sobre todo en comunicaciones bidireccionales. Sin esperar a un mensaje de respuesta subyacente, los autores de la llamada de operaciones unidireccionales no tienen ninguna manera directa de detectar un error al procesar el mensaje de solicitud. (Las aplicaciones de servicio que utilizan canales confiables y las operaciones unidireccionales pueden detectar un error en la entrega del mensaje en el nivel del canal. Para obtener más información, consulte Información general sobre las sesiones confiables).

En aplicaciones orientadas a servicios dúplex (o bidireccionales) en que el cliente y el servidor se comunican entre sí independientemente, un canal de cliente puede utilizar la propiedad IsOneWay en sus métodos para indicar que el servicio puede realizar las llamadas unidireccionales al cliente que el cliente puede tratar como eventos. No se genera ninguna llamada o mensaje de devolución porque el servicio no espera ningún mensaje de respuesta.

Si la propiedad IsOneWay se establece en false (el valor predeterminado), incluso los métodos que devuelven void tienen como resultado un mensaje de respuesta. En este caso, la infraestructura crea y envía un mensaje vacío para indicar al autor de la llamada que se ha devuelto el método. (El uso de este enfoque permite que la infraestructura devuelva errores soap al cliente). Establecer IsOneWay en true es la única manera de cancelar la creación y envío de un mensaje de respuesta.

Los métodos unidireccionales no deben devolver un valor o tener parámetros ref o out; de lo contrario, se producirá una excepción System.InvalidOperationException.

Especificar que una operación es unidireccional significa que no hay ningún mensaje de respuesta. Es posible bloquear si no se puede realizar una conexión, si el mensaje saliente es muy grande o si el servicio no puede leer la información entrante con la rapidez necesaria. Si un cliente requiere una llamada que no sea de bloqueo, genere las operaciones AsyncPattern. Para obtener más información, vea One-Way Services and Accessing Services Using a WCF Client.

Se aplica a