OperationContractAttribute.IsInitiating Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Ottiene o imposta un valore che indica se il metodo implementa un'operazione in grado di avviare una sessione nel server (se tale sessione esiste).
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
Valore della proprietà
true
se all'operazione è consentito avviare una sessione nel server. In caso contrario, false
. Il valore predefinito è true
.
Esempio
L'esempio seguente illustra un servizio che implementa un contratto di servizio in cui sono specificati tre metodi. Il servizio richiede una sessione. Se la prima chiamata di un chiamante riguarda un'operazione diversa da MethodOne
, il canale viene rifiutato e viene generata un'eccezione. Quando un chiamante avvia una sessione chiamando MethodOne
, può terminare la sessione di comunicazione in qualsiasi momento chiamando MethodThree
. MethodTwo
può essere chiamato qualsiasi numero di volte durante una sessione.
[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;
}
}
Commenti
La proprietà IsInitiating consente di stabilire se un'operazione può essere la prima operazione ad essere chiamata quando viene creata una sessione.
Nota
Affinché la proprietà ServiceContractAttribute.SessionMode funzioni correttamente è necessario che il valore di Allowed sia Required o IsInitiating e che l'associazione utilizzata richieda o consenta le sessioni.
L'impostazione predefinita è true
, il che significa che un'operazione può essere la prima ad essere chiamata su un canale. Le chiamate successive al metodo in corso di inizializzazione non hanno altro effetto che quello di chiamare il metodo. Non vengono create altre sessioni. Se il contratto non si avvale di una sessione, l'impostazione della proprietà IsInitiating su false
viene ignorata.
In genere la proprietà IsInitiating è impostata su false
per imporre ai client di chiamare un altro metodo del servizio prima che possano richiamare il metodo a cui si riferisce la proprietà. Se ad esempio il servizio presenta una serie di operazioni che dipendono da un numero ID dell'ordine, è possibile impostare su IsInitiating la proprietà true
di un'operazione di servizio GetOrderId
e quindi impostare la suddetta proprietà su false
per tutte le altre operazioni di servizio. Ciò garantisce che ogni nuovo client ottenga un ID dell'ordine prima di utilizzare gli altri metodi esposti dal servizio.
Nota
Esiste un'interazione fra la proprietà IsInitiating e la proprietà Action. In un contratto di servizio può esistere una sola operazione di servizio avente la proprietà Action impostata su "*." Qualsiasi gruppo di contratti di servizio ospitati nello stesso URI di ascolto che una classe di servizio implementa può avere molte operazioni di servizio con la proprietà impostata su "" quando la Action IsInitiating proprietà è impostata su false
.* Tuttavia, solo uno di questi metodi di servizio può avere la Action proprietà impostata su "*" e la IsInitiating proprietà impostata su true
.
Se un servizio riceve un messaggio relativo a un'operazione che non è di tipo IsInitiating, tale servizio restituisce un errore SOAP di tipo ActionNotSupported. Il client considera ciò come un'eccezione FaultException. Se un client chiama per prima un'operazione che non è di tipo IsInitiating, il runtime client genera un'eccezione System.InvalidOperationException.
Per altre informazioni, vedere Uso delle sessioni.