OperationContractAttribute.IsInitiating Egenskap

Definition

Hämtar eller anger ett värde som anger om metoden implementerar en åtgärd som kan initiera en session på servern (om en sådan session finns).

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

Egenskapsvärde

true om åtgärden är tillåten att initiera en session på servern, annars , false. Standardvärdet är true.

Exempel

Följande exempel är en tjänst som implementerar ett tjänstkontrakt som anger tre metoder. Tjänsten kräver en session. Om en anropares första anrop är till någon annan åtgärd än MethodOnenekas kanalen och ett undantag utlöses. När en anropare initierar en session genom att anropa MethodOnekan anroparen avsluta kommunikationssessionen när som helst genom att anropa MethodThree. MethodTwo kan anropas valfritt antal gånger under en session.

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

Kommentarer

Egenskapen IsInitiating styr om en åtgärd kan vara den första åtgärden som anropas när en session skapas.

Note

Värdet ServiceContractAttribute.SessionMode för måste vara antingen Allowed eller Required och den bindning som används måste kräva eller tillåta att sessioner för IsInitiating egenskapen fungerar korrekt.

Standardvärdet är true, vilket innebär att en åtgärd kan vara den första som anropas på en kanal. Efterföljande anrop till den initierande metoden har ingen annan effekt än att anropa metoden. Inga andra sessioner skapas. Om kontraktet inte använder en session ignoreras inställningen IsInitiating till false .

Vanligtvis anger IsInitiating du till för att false tvinga klienter att anropa en annan metod i tjänsten innan de kan anropa den här. Om din tjänst till exempel har en serie åtgärder som är beroende av ett order-ID-nummer kan du ange IsInitiating till true för en GetOrderId tjänståtgärd och ange alla återstående tjänståtgärder till false. Detta säkerställer att varje ny klient hämtar ett order-ID innan de andra metoderna som exponeras av tjänsten används.

Note

Det finns en interaktion mellan IsInitiating och egenskapen Action . Ett tjänstkontrakt kan bara ha en tjänståtgärd med egenskapen inställd på Action "*". Alla tjänstkontrakt som finns på samma lyssnings-URI som en tjänstklass implementerar kan ha många tjänståtgärder med Action egenskapen inställd på "*" när IsInitiating egenskapen är inställd på false. Men endast en av dessa tjänstmetoder kan ha Action egenskapen inställd på "*" och egenskapen IsInitiating är inställd på true.

Om en tjänst tar emot ett meddelande om en icke-initierande åtgärd returnerar tjänsten ett ActionNotSupported SOAP-fel. Klienten upplever detta som en FaultException. Om en klient anropar en icke-initierande åtgärd först utlöser klientkörningen en System.InvalidOperationException.

Mer information finns i Använda sessioner.

Gäller för