Condividi tramite


OperationContractAttribute.IsOneWay Proprietà

Definizione

Ottiene o imposta un valore che indica se l'operazione restituisce un messaggio di risposta.

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

Valore della proprietà

Boolean

true se questo metodo riceve un messaggio di richiesta e non restituisce alcun messaggio di risposta. In caso contrario, false. Il valore predefinito è false.

Esempio

L'esempio seguente illustra un servizio che implementa un contratto di servizio in cui sono specificate tre operazioni. I primi due metodi implementano operazioni bidirezionali che restituiscono al chiamante messaggi di risposta sottostanti indipendentemente dal valore restituito. Il terzo metodo implementa un'operazione che riceve una chiamata, ovvero un messaggio in ingresso sottostante, ma non restituisce alcun messaggio di risposta sottostante.

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

Commenti

Utilizzare la proprietà IsOneWay per indicare che un'operazione non restituisce alcun messaggio di risposta. Questo tipo di operazione è utile per notifiche o comunicazioni in stile evento, soprattutto nelle comunicazioni bidirezionali. Poiché non attendono alcun messaggio di risposta sottostante, i chiamanti di operazioni unidirezionali non hanno alcun modo diretto per rilevare un errore di elaborazione del messaggio di richiesta. Le applicazioni del servizio che utilizzano canali e operazioni unidirezionali affidabili sono in grado di rilevare un errore di invio di un messaggio a livello di canale. Per informazioni dettagliate, vedere Panoramica delle sessioni affidabili.

Nelle applicazioni orientate al servizio duplex (o bidirezionale) in cui il client e il server comunicano fra di loro in modo indipendente, un canale client può utilizzare la proprietà IsOneWay nei propri metodi per indicare che il servizio può effettuare chiamate unidirezionali al client e che quest'ultimo può trattare tali chiamate come eventi. Poiché il servizio non prevede alcun messaggio di risposta, non viene creato alcun messaggio né chiamata di restituzione.

Se la proprietà IsOneWay viene impostata su false (impostazione predefinita), anche i metodi che restituiscono void restituiscono un messaggio di risposta. In questo caso, l'infrastruttura crea e invia un messaggio vuoto per segnalare al chiamante il termine dell'esecuzione del metodo chiamato. L'uso di questo approccio consente all'infrastruttura di inviare di nuovo errori SOAP al client. L'impostazione IsOneWay su true è l'unico modo per annullare la creazione e l'invio di un messaggio di risposta.

I metodi unidirezionali non devono restituire alcun valore né presentare parametri ref o out. In caso contrario viene generata un'eccezione System.InvalidOperationException.

Le operazioni unidirezionali sono semplicemente operazioni che non prevedono messaggi di risposta. Tali operazioni possono essere bloccate se risulta impossibile stabilire una connessione, se il messaggio in uscita presenta dimensioni eccessive o se la velocità con cui il servizio legge le informazioni in ingresso è insufficiente. Se un client richiede una chiamata non bloccante, generare operazioni di tipo AsyncPattern. Per altre informazioni, vedere Servizi unidirezionale e Accesso ai servizi tramite un client WCF.

Si applica a