OperationContractAttribute.IsInitiating Eigenschap

Definitie

Hiermee wordt een waarde opgehaald of ingesteld die aangeeft of de methode een bewerking implementeert die een sessie op de server kan initiëren (als een dergelijke sessie bestaat).

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

Waarde van eigenschap

trueals de bewerking is toegestaan om een sessie op de server te starten, anders. false De standaardwaarde is true.

Voorbeelden

Het volgende voorbeeld is een service waarmee een servicecontract wordt geïmplementeerd waarmee drie methoden worden opgegeven. Voor de service is een sessie vereist. Als de eerste aanroep van een beller een andere bewerking is dan MethodOne, wordt het kanaal geweigerd en wordt er een uitzondering gegenereerd. Wanneer een beller een sessie start door te bellen MethodOne, kan die beller de communicatiesessie op elk gewenst moment beëindigen door te bellen MethodThree. MethodTwo kan een willekeurig aantal keren worden aangeroepen tijdens een sessie.

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

Opmerkingen

De IsInitiating eigenschap bepaalt of een bewerking de eerste bewerking kan zijn die wordt aangeroepen wanneer een sessie wordt gemaakt.

Note

De waarde moet ServiceContractAttribute.SessionMode zijn Allowed of Required de binding die wordt gebruikt, moet sessies vereisen of toestaan dat de IsInitiating eigenschap goed werkt.

De standaardwaarde is true, wat betekent dat een bewerking de eerste kan zijn die op een kanaal wordt aangeroepen. Volgende aanroepen naar de initiërende methode hebben geen effect, behalve het aanroepen van de methode. Er worden geen andere sessies gemaakt. Als het contract geen gebruik maakt van een sessie, wordt de instelling IsInitiating genegeerd false .

Normaal gesproken stelt u in IsInitiating dat false clients een andere methode voor de service moeten aanroepen voordat ze deze kunnen aanroepen. Als uw service bijvoorbeeld een reeks bewerkingen heeft die afhankelijk zijn van een order-id,kunt u instellen op een servicebewerking en alle resterende servicebewerkingen instellen IsInitiatingtrue opfalse.GetOrderId Dit zorgt ervoor dat elke nieuwe client een order-id verkrijgt voordat de andere methoden worden gebruikt die door de service worden weergegeven.

Note

Er is een interactie tussen IsInitiating en de Action eigenschap. Een servicecontract kan slechts één servicebewerking hebben waarbij de Action eigenschap is ingesteld op '*'. Elke groep servicecontracten die worden gehost op dezelfde listen-URI die door een serviceklasse wordt geïmplementeerd, kan veel servicebewerkingen hebben waarbij de Action eigenschap is ingesteld op '*' wanneer de IsInitiating eigenschap is ingesteld op false. Slechts één van deze servicemethoden kan echter de Action eigenschap instellen op '*' en de IsInitiating eigenschap is ingesteld op true.

Als een service een bericht ontvangt voor een niet-initiërende bewerking, retourneert de service een ActionNotSupported SOAP-fout. De klant ervaart dit als een FaultException. Als een client eerst een niet-initiërende bewerking aanroept, genereert de clientruntime een System.InvalidOperationException.

Zie Sessies gebruiken voor meer informatie.

Van toepassing op