OperationContractAttribute Classe
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.
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à
- 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<End
methodName>> 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 |
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) |