Freigeben über


OperationContractAttribute.IsOneWay Eigenschaft

Definition

Ruft einen Wert ab, der angibt, ob ein Vorgang eine Antwortnachricht zurückgibt, oder legt diesen fest.

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

Eigenschaftswert

Boolean

true, wenn diese Methode eine Anforderungsnachricht empfängt und keine Antwortnachricht zurückgibt, andernfalls false. Der Standardwert ist false.

Beispiele

Das folgende Beispiel enthält einen Dienst, der einen Dienstvertrag implementiert, der drei Vorgänge angibt. Zwei der Methoden implementieren bidirektionale Vorgänge, die zugrunde liegende Antwortnachrichten an den Aufrufer zurückgeben, und zwar unabhängig davon, wie der Rückgabewert lautet. Die dritte Methode implementiert einen Vorgang, der einen Aufruf (eine zugrunde liegende eingehende Nachricht) empfängt, aber keine zugrunde liegende Antwortnachricht zurückgibt.

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

Hinweise

Verwenden Sie die IsOneWay-Eigenschaft, um anzugeben, dass ein Vorgang keine Antwortnachricht zurückgibt. Dieser Vorgangstyp ist für Benachrichtigungen oder die ereignisbezogene Kommunikation hilfreich, besonders bei bidirektionaler Kommunikation. Wenn sie nicht auf eine zugrunde liegende Antwortnachricht warten, verfügen Aufrufer von unidirektionalen Vorgängen über keine direkte Möglichkeit, einen Fehler bei der Verarbeitung der Antwortnachricht zu erkennen. (Dienstanwendungen, die mit zuverlässigen Kanälen und unidirektionalen Vorgängen arbeiten, können einen Nachrichtenzustellfehler auf Kanalebene erkennen. Ausführliche Informationen finden Sie unter "Übersicht über zuverlässige Sitzungen".)

Bei dienstorientierten Duplexanwendungen (oder bidirektionalen Anwendungen), bei denen Client und Server unabhängig miteinander kommunizieren, kann ein Clientkanal die IsOneWay-Eigenschaft für seine Methoden anwenden, um anzugeben, dass der Dienst unidirektionale Aufrufe an den Client tätigen kann, die der Client dann als Ereignisse behandeln kann. Es werden keine Rückgabeaufrufe bzw. Nachrichten generiert, da der Dienst keine Antwortnachricht erwartet.

Wenn die für die IsOneWay-Eigenschaft false festgelegt ist (Standardeinstellung), wird sogar bei Methoden, die void zurückgeben, eine Antwortnachricht ausgegeben. In diesem Fall erstellt und sendet die Infrastruktur eine leere Nachricht, um dem Aufrufer mitzuteilen, dass die Methode einen Wert zurückgegeben hat. (Mit diesem Ansatz kann die Infrastruktur SOAP-Fehler wieder an den Client senden.) true Die Einstellung IsOneWay ist die einzige Möglichkeit, die Erstellung und Versendung einer Antwortnachricht abzubrechen.

Unidirektionale Methoden dürfen keinen Wert zurückgeben oder über ref-Parameter oder out-Parameter verfügen, andernfalls wird eine System.InvalidOperationException-Ausnahme ausgelöst.

Die Angabe, dass ein Vorgang ein unidirektionaler Vorgang ist, bedeutet lediglich, dass es keine Antwortnachricht gibt. Es kann eine Blockade auftreten, wenn eine Verbindung nicht hergestellt werden kann, die ausgehende Nachricht sehr groß ist oder der Dienst eingehende Informationen nicht schnell genug lesen kann. Erfordert ein Client einen nicht blockierenden Aufruf, generieren Sie AsyncPattern-Vorgänge. Weitere Informationen finden Sie unter One-Way Services and Zugriff auf Dienste mithilfe eines WCF-Clients.

Gilt für