OperationContractAttribute.IsInitiating 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 die Methode einen Vorgang implementiert, der eine Sitzung auf dem Server initiieren kann (wenn eine solche Sitzung vorhanden ist), oder legt diesen fest.
public:
property bool IsInitiating { bool get(); void set(bool value); };
public bool IsInitiating { get; set; }
member this.IsInitiating : bool with get, set
Public Property IsInitiating As Boolean
Eigenschaftswert
true
, wenn dem Vorgang erlaubt wird, eine Sitzung auf dem Server zu initiieren, andernfalls false
. Der Standardwert ist true
.
Beispiele
Das folgende Beispiel ist ein Dienst, der einen Dienstvertrag implementiert, der drei Methoden angibt. Der Dienst erfordert eine Sitzung. Ruft der Aufrufer zuerst einen anderen Vorgang als MethodOne
auf, wird der Kanal verweigert, und es wird eine Ausnahme ausgelöst. Initiiert ein Aufrufer eine Sitzung durch Aufruf von MethodOne
, kann dieser Aufrufer die Kommunikationssitzung jederzeit durch den Aufruf von MethodThree
beenden. MethodTwo
kann während einer Sitzung beliebig oft aufgerufen werden.
[ServiceContract(SessionMode=SessionMode.Required)]
public class InitializeAndTerminateService
{
[OperationContract(
IsOneWay=true,
IsInitiating=true,
IsTerminating=false
)]
public void MethodOne()
{
return;
}
[OperationContract(
IsInitiating=false,
IsTerminating=false
)]
public int MethodTwo(int x, out int y)
{
y = 34;
return 0;
}
[OperationContract(
IsOneWay=true,
IsInitiating=false,
IsTerminating=true
)]
public void MethodThree()
{
return;
}
}
Hinweise
Die IsInitiating-Eigenschaft steuert, ob ein Vorgang bei der Erstellung einer Sitzung als erster Vorgang aufgerufen werden kann.
Hinweis
Um eine einwandfreie Funktion zu gewährleisten, muss der Wert von ServiceContractAttribute.SessionModeAllowed oder Required lauten. Die Bindung muss Sitzungen für die IsInitiating-Eigenschaft anfordern oder zulassen.
Der Standardwert ist true
, was bedeutet, dass ein Vorgang als erster Vorgang in einem Kanal aufgerufen werden kann. Nachfolgende Aufrufe der initiierenden Methode haben nur die Auswirkung, dass die Methode aufgerufen wird. Es werden keine anderen Sitzungen erstellt. Wenn der Vertrag keine Sitzung nutzt, wird die Festlegung von IsInitiating auf false
ignoriert.
In der Regel legen Sie für IsInitiatingfalse
fest, um zu erzwingen, dass Clients eine andere Methode für den Dienst aufrufen, bevor sie diese aktivieren können. Verfügt beispielsweise Ihr Dienst über eine Reihe von Vorgängen, die von einer ID-Nummer abhängig sind, können Sie für IsInitiating den true
für einen GetOrderId
-Dienstvorgang festlegen und für alle verbleibenden Dienstvorgänge false
festlegen. Hiermit wird sichergestellt, dass jeder neue Client vor der Verwendung anderer, vom Dienst verfügbar gemachter Methoden eine Auftrags-ID erhält.
Hinweis
Es findet eine Interaktion zwischen IsInitiating und der Action-Eigenschaft statt. Ein Dienstvertrag kann nur über einen Dienstvorgang verfügen, für den die Action-Eigenschaft auf "*" gesetzt ist. Jede Gruppe von Dienstverträgen, die in derselben Listen-URI gehostet werden, die eine Dienstklasse implementiert, kann viele Dienstvorgänge mit der Eigenschaft "" aufweisen, wenn die Action IsInitiating Eigenschaft auf "*" festgelegt false
ist. Allerdings kann nur eine dieser Dienstmethoden die Eigenschaft auf "" und die Action IsInitiating Eigenschaft auf "*" festgelegt true
haben.
Wenn ein Dienst eine Nachricht für einen Nicht-Initiierungsvorgang empfängt, gibt der Dienst einen ActionNotSupported-SOAP-Fehler zurück. Der Client erfährt dieses als FaultException. Wenn ein Client zuerst einen Nicht-Initiierungsvorgang aufruft, löst die Clientlaufzeit System.InvalidOperationException aus.
Weitere Informationen finden Sie unter Verwenden von Sitzungen.