OperationContractAttribute.IsOneWay Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
truewenn diese Methode eine Anforderungsnachricht empfängt und keine Antwortnachricht zurückgibt; andernfalls . false Der Standardwert lautet false.
Beispiele
Das folgende Beispiel ist ein Dienst, der einen Dienstvertrag implementiert, der drei Vorgänge angibt. Zwei der Methoden implementieren bidirektionale Vorgänge, die zugrunde liegende Antwortnachrichten unabhängig vom Rückgabewert an den Aufrufer zurückgeben. 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. Diese Art von Vorgang ist nützlich für Benachrichtigungen oder Ereignisformatkommunikation, insbesondere bei bidirektionaler Kommunikation. Ohne auf eine zugrunde liegende Antwortnachricht zu warten, haben Aufrufer unidirektionale Vorgänge keine direkte Möglichkeit, einen Fehler bei der Verarbeitung der Anforderungsnachricht zu erkennen. (Dienstanwendungen, die zuverlässige Kanäle und unidirektionale Vorgänge verwenden, können einen Nachrichtenübermittlungsfehler auf Kanalebene erkennen. Ausführliche Informationen finden Sie unter "Übersicht über zuverlässige Sitzungen".)
Bei dienstorientierten Duplexanwendungen (oder bidirektionale) Anwendungen, in denen der Client und der Server unabhängig voneinander kommunizieren, kann ein Clientkanal die IsOneWay Eigenschaft auf seinen Methoden verwenden, um anzugeben, dass der Dienst unidirektionale Aufrufe an den Client tätigen kann, die der Client als Ereignisse behandeln kann. Es wird kein Rückgabeaufruf oder eine Nachricht generiert, da der Dienst keine Antwortnachricht erwartet.
Wenn die IsOneWay Eigenschaft auf false (Standardeinstellung) festgelegt ist, werden sogar Methoden, die das Ergebnis einer Antwortnachricht zurückgeben void , zurückgegeben. In diesem Fall erstellt und sendet die Infrastruktur eine leere Nachricht, um an den Aufrufer anzugeben, dass die Methode zurückgegeben wurde. (Mit diesem Ansatz kann die Infrastruktur SOAP-Fehler zurück an den Client senden.) Die Einstellung IsOneWay ist true die einzige Möglichkeit, die Erstellung und Versendung einer Antwortnachricht abzubrechen.
Unidirektionale Methoden dürfen keinen Wert oder refout Parameter zurückgeben, andernfalls wird eine System.InvalidOperationException Ausnahme ausgelöst.
Die Angabe, dass es sich bei einem Vorgang um einen unidirektionale Vorgang handelt, bedeutet nur, dass keine Antwortnachricht vorhanden ist. Es ist möglich, zu blockieren, ob keine Verbindung hergestellt werden kann oder die ausgehende Nachricht sehr groß ist oder wenn der Dienst eingehende Informationen nicht schnell genug lesen kann. Wenn ein Client einen nicht blockierenden Aufruf erfordert, generieren Sie AsyncPattern Vorgänge. Weitere Informationen finden Sie unter One-Way Services und Zugriff auf Dienste mit einem WCF-Client.