OperationContractAttribute Classe

Definizione

Indica che un metodo implementa un'operazione come parte di un contratto di servizio di un'applicazione Windows Communication Foundation (WCF).

public ref class OperationContractAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Method)]
public sealed class OperationContractAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Method)>]
type OperationContractAttribute = class
    inherit Attribute
Public NotInheritable Class OperationContractAttribute
Inherits Attribute
Ereditarietà
OperationContractAttribute
Attributi

Esempio

Nell'esempio di codice seguente viene illustrato un semplice contratto di servizio avente una sola operazione.

using System;
using System.Collections.Generic;
using System.Net.Security;
using System.ServiceModel;
using System.Text;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(Namespace="Microsoft.WCF.Documentation")]
  public interface ISampleService{
    // This operation specifies an explicit protection level requirement.
    [OperationContract(ProtectionLevel=ProtectionLevel.EncryptAndSign)]
    string SampleMethod(string msg);
  }

  class SampleService : ISampleService
  {
  #region ISampleService Members

  public string  SampleMethod(string msg)
  {
    Console.WriteLine("Called with: {0}", msg);
      return "The service greets you: " + msg;
  }

  #endregion
  }
}
Imports System.Net.Security
Imports System.ServiceModel
Imports System.Text

Namespace Microsoft.WCF.Documentation
  <ServiceContract(Namespace:="Microsoft.WCF.Documentation")> _
  Public Interface ISampleService
    ' This operation specifies an explicit protection level requirement.
    <OperationContract(ProtectionLevel:=ProtectionLevel.EncryptAndSign)> _
    Function SampleMethod(ByVal msg As String) As String
  End Interface

  Friend Class SampleService
      Implements ISampleService
  #Region "ISampleService Members"

  Public Function SampleMethod(ByVal msg As String) As String Implements ISampleService.SampleMethod
    Console.WriteLine("Called with: {0}", msg)
       Return "The service greets you: " & msg
  End Function

  #End Region
  End Class
End Namespace

L'esempio seguente illustra un servizio che implementa un contratto di servizio implicito in cui sono specificate tre operazioni. Le prime due sono operazioni bidirezionali che restituiscono al chiamante messaggi di risposta sottostanti indipendentemente dal valore restituito. La terza operazione riceve una chiamata, ovvero un messaggio in ingresso sottostante, ma non restituisce alcun messaggio di risposta sottostante.

[ServiceContractAttribute]  
public class OneAndTwoWay  
{  
  // The client waits until a response message appears.  
  [OperationContractAttribute]  
  public int MethodOne (int x, out int y)  
  {  
    y = 34;  
    return 0;  
  }  

  // The client waits until an empty response message appears.  
  [OperationContractAttribute]  
  public void MethodTwo (int x)  
  {  
    return;  
  }  

  // The client returns as soon as an outbound message  
  // is dispatched to the service; no response  
  // message is generated or sent from the service.  
  [OperationContractAttribute(IsOneWay=true)]  
  public void MethodThree (int x)  
  {  
    return;  
  }  
}  

Commenti

L'attributo OperationContractAttribute può essere applicato a un metodo per indicare che quest'ultimo implementa un'operazione di servizio come parte di un contratto di servizio specificato mediante un attributo ServiceContractAttribute.

Le proprietà OperationContractAttribute consentono di controllare la struttura dell'operazione e i valori espressi nei metadati:

  • La proprietà Action indica l'azione che identifica in modo univoco questa operazione. WCF invia messaggi di richiesta ai metodi in base all'azione.

  • La proprietà AsyncPattern indica che l'operazione è implementata o può essere chiamata in modo asincrono tramite una coppia di metodi Begin/End.

  • La proprietà HasProtectionLevel indica se la proprietà ProtectionLevel è stata impostata in modo esplicito.

  • La proprietà IsOneWay indica che l'operazione è costituita esclusivamente da un solo messaggio di input. All'operazione non è stato associato alcun messaggio di output.

  • La proprietà IsInitiating specifica se questa operazione può essere l'operazione iniziale di una sessione.

  • La IsTerminating proprietà specifica se WCF tenta di terminare la sessione corrente dopo il completamento dell'operazione.

  • La proprietà ProtectionLevel indica la sicurezza a livello di messaggio che occorre fornire a un'operazione in fase di esecuzione.

  • La proprietà ReplyAction indica l'azione del messaggio di risposta dell'operazione.

L'attributo OperationContractAttribute dichiara che un metodo è un'operazione di un contratto di servizio. Solo i metodi dotati dell'attributo OperationContractAttribute sono esposti come operazioni di servizio. Un contratto di servizio privo di metodi contrassegnati con l'attributo OperationContractAttribute non espone alcuna operazione.

La AsyncPattern proprietà indica che una coppia di Begin< metodi methodName e<EndmethodName>> forma una singola operazione implementata in modo asincrono (sia nel client che nel servizio). La possibilità di un servizio di implementare operazioni in modo asincrono è un dettaglio di implementazione del servizio e non è esposto nei metadati, ad esempio WSDL (Web Services Description Language).

Analogamente, i client possono scegliere di richiamare le operazioni in modo asincrono indipendentemente dalla modalità di implementazione del metodo del servizio. Quando un metodo di servizio, anche se richiede un certo tempo di esecuzione, deve restituire le informazioni direttamente al client è consigliabile impostare i client in modo che le operazioni di servizio vengano chiamate in modo asincrono. Per informazioni dettagliate, vedere AsyncPattern.

La proprietà IsOneWay indica che un metodo non restituisce alcun valore, nemmeno un messaggio di risposta sottostante vuoto. Questo tipo di metodo è utile per le notifiche o per le comunicazioni in stile evento. Poiché i metodi di questo tipo non possono restituire alcun messaggio di risposta, il metodo deve essere dichiarato in modo da restituire void.

Importante

Quando si recupera a livello di codice l'archivio informazioni in questo attributo, usare la ContractDescription classe anziché la reflection.

Nota

Se la proprietà IsOneWay viene impostata su false (ovvero l'impostazione predefinita), anche i metodi che restituiscono void sono metodi bidirezionali a livello di messaggio sottostante. In questo caso, l'infrastruttura crea e invia un messaggio vuoto per segnalare al chiamante il termine dell'esecuzione del metodo chiamato. L'utilizzo di questo approccio consente all'applicazione e all'infrastruttura di inviare al client le informazioni sull'errore, ad esempio per indicare che si tratta di un errore SOAP. L'unico modo per impedire la creazione e l'invio di un messaggio di risposta è impostare la proprietà IsOneWay su true. Per altre informazioni, vedere Servizi one-Way.

Oltre a consentire la modifica dell'azione predefinita dei messaggi SOAP, le proprietà Action e ReplyAction possono essere utilizzate per creare gestori per i messaggi non riconosciuti o per disabilitare l'aggiunta di azioni durante la programmazione diretta dei messaggi. Utilizzare la proprietà IsInitiating per impedire ai client di chiamare una determinata operazione di servizio prima delle altre operazioni. Usare la IsTerminating proprietà per chiudere il canale WCF dopo che i client chiamano un'operazione di servizio specifica. Per altre informazioni, vedere Uso di sessioni.

La proprietà ProtectionLevel consente di specificare nel contratto dell'operazione se i relativi messaggi sono firmati o crittografati, oppure se presentano entrambi i meccanismi di sicurezza. Se un'associazione non è in grado di fornire il livello di sicurezza richiesto dal contratto, l'infrastruttura genera un'eccezione in fase di esecuzione. Per altre informazioni, vedere ProtectionLevel e Informazioni sul livello di protezione.

Costruttori

OperationContractAttribute()

Inizializza una nuova istanza della classe OperationContractAttribute.

Proprietà

Action

Consente di ottenere o impostare l'azione WS-Addressing del messaggio di richiesta.

AsyncPattern

Indica che un'operazione viene implementata in modo asincrono usando una Begin< coppia di metodiName e<EndmethodName>> in un contratto di servizio.

HasProtectionLevel

Ottiene un valore che indica se i messaggi di questa operazione devono essere crittografati o firmati o se devono presentare entrambi i meccanismi di protezione.

IsInitiating

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).

IsOneWay

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

IsTerminating

Ottiene o imposta un valore che indica se l'operazione di servizio causa la chiusura della sessione da parte del server dopo l'invio di un eventuale messaggio di risposta.

Name

Ottiene o imposta il nome dell'operazione.

ProtectionLevel

Ottiene o imposta un valore che specifica se i messaggi di un'operazione devono essere crittografati o firmati o se devono presentare entrambi i meccanismi di sicurezza.

ReplyAction

Ottiene o imposta il valore dell'azione SOAP del messaggio di risposta dell'operazione.

TypeId

Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute.

(Ereditato da Attribute)

Metodi

Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per l'istanza.

(Ereditato da Attribute)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

In caso di override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.

(Ereditato da Attribute)
Match(Object)

Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch.

(Ereditato da Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo relative a un oggetto, che possono essere usate per ottenere informazioni sul tipo relative a un'interfaccia.

(Ereditato da Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).

(Ereditato da Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso a proprietà e metodi esposti da un oggetto.

(Ereditato da Attribute)

Si applica a