Condividi tramite


OperationContractAttribute Classe

Definizione

Indica che un metodo definisce un'operazione che fa parte di un contratto di servizio in 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 con un'unica 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 è un servizio che implementa un contratto di servizio implicito che specifica tre operazioni. Due delle operazioni sono operazioni bidirezionali, che restituiscono messaggi di risposta sottostanti al chiamante indipendentemente dal valore restituito. La terza operazione riceve una chiamata, 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

Applicare a OperationContractAttribute un metodo per indicare che il metodo implementa un'operazione di servizio come parte di un contratto di servizio (specificato da un ServiceContractAttribute attributo).

Utilizzare le OperationContractAttribute proprietà per controllare la struttura dell'operazione e i valori espressi nei metadati:

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

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

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

  • La IsOneWay proprietà indica che l'operazione è costituita solo da un singolo messaggio di input. L'operazione non ha alcun messaggio di output associato.

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

  • La IsTerminating proprietà specifica se WCF tenta di terminare la sessione corrente al termine dell'operazione.

  • La ProtectionLevel proprietà specifica la sicurezza a livello di messaggio richiesta da un'operazione in fase di esecuzione.

  • La ReplyAction proprietà specifica l'azione del messaggio di risposta per l'operazione.

L'attributo OperationContractAttribute dichiara che un metodo è un'operazione in un contratto di servizio. Solo i metodi attribuiti a sono OperationContractAttribute esposti come operazioni del servizio. Un contratto di servizio senza metodi contrassegnati con non OperationContractAttribute espone alcuna operazione.

La AsyncPattern proprietà indica che una coppia di Begin< metodi methodName e End<methodName>> costituisce una singola operazione implementata in modo asincrono (sia nel client che nel servizio). La possibilità di un servizio di implementare le operazioni in modo asincrono è un dettaglio di implementazione del servizio e non viene esposta 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. È consigliabile chiamare le operazioni del servizio in modo asincrono nel client quando un metodo di servizio richiede tempo, ma deve restituire informazioni direttamente al client. Per informazioni dettagliate, vedere AsyncPattern.

La IsOneWay proprietà indica che un metodo non restituisce alcun valore, incluso un messaggio di risposta sottostante vuoto. Questo tipo di metodo è utile per le notifiche o la comunicazione in stile evento. I metodi di questo tipo non possono restituire un messaggio di risposta, pertanto la dichiarazione del metodo deve restituire void.

Importante

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

Annotazioni

Se la IsOneWay proprietà è impostata su false, (impostazione predefinita), anche i metodi restituiti void sono metodi bidirezionali a livello di messaggio sottostante. In questo caso, l'infrastruttura crea e invia un messaggio vuoto per indicare al chiamante che il metodo è stato restituito. L'uso di questo approccio consente all'applicazione e all'infrastruttura di inviare al client informazioni sugli errori, ad esempio un errore SOAP. L'impostazione su IsOneWaytrue è l'unico modo per impedire la creazione e l'invio di un messaggio di risposta. Per altre informazioni, vedere One-Way Services.

Le Action proprietà e ReplyAction possono essere usate non solo per modificare l'azione predefinita dei messaggi SOAP, ma anche per creare gestori per i messaggi non riconosciuti o disabilitare l'aggiunta di azioni per la programmazione diretta dei messaggi. Utilizzare la IsInitiating proprietà per impedire ai client di chiamare una determinata operazione del servizio prima di altre operazioni. Utilizzare la IsTerminating proprietà per fare in modo che WCF chiuda il canale dopo che i client chiamano una determinata operazione del servizio. Per altre informazioni, vedere Uso di sessioni.

La ProtectionLevel proprietà consente di specificare nel contratto dell'operazione se i messaggi dell'operazione sono firmati, crittografati o firmati e crittografati. Se un'associazione non può fornire il livello di sicurezza richiesto dal contratto, viene generata un'eccezione in fase di esecuzione. Per altre informazioni, vedere ProtectionLevele Informazioni sul livello di protezione.

Costruttori

Nome Descrizione
OperationContractAttribute()

Inizializza una nuova istanza della classe OperationContractAttribute.

Proprietà

Nome Descrizione
Action

Ottiene o imposta l'azione WS-Addressing del messaggio di richiesta.

AsyncPattern

Indica che un'operazione viene implementata in modo asincrono usando una Begin< coppia di metodi methodName e End<methodName>> 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 che può 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

Se implementato in una classe derivata, ottiene un identificatore univoco per questo Attribute.

(Ereditato da Attribute)

Metodi

Nome Descrizione
Equals(Object)

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

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per questa istanza.

(Ereditato da Attribute)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

Quando sottoposto a 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 è uguale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

Nome Descrizione
_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 per un oggetto, che può essere utilizzato per ottenere le informazioni sul tipo per 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 alle proprietà e ai metodi esposti da un oggetto .

(Ereditato da Attribute)

Si applica a