Condividi tramite


IOperationBehavior Interfaccia

Definizione

Implementa metodi che possono essere utilizzati per estendere il comportamento della fase di esecuzione per un'operazione in un'applicazione client o di servizio.

public interface class IOperationBehavior
public interface IOperationBehavior
type IOperationBehavior = interface
Public Interface IOperationBehavior
Derivato

Esempio

Nell'esempio di codice seguente viene visualizzata un'implementazione di System.ServiceModel.Dispatcher.IParameterInspector che scrive una stringa sulla console quando il controllo viene chiamato su un'operazione. Questa personalizzazione può essere associata solo a System.ServiceModel.Dispatcher.DispatchOperation o a System.ServiceModel.Dispatcher.ClientOperation e viene inserita generalmente da un comportamento dell'operazione.

#region IParameterInspector Members
public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
{
  Console.WriteLine(
    "IParameterInspector.AfterCall called for {0} with return value {1}.",
    operationName,
    returnValue.ToString()
  );
}

public object BeforeCall(string operationName, object[] inputs)
{
  Console.WriteLine("IParameterInspector.BeforeCall called for {0}.", operationName);
  return null;
}
#Region "IParameterInspector Members"
    Public Sub AfterCall(ByVal operationName As String, ByVal outputs() As Object, ByVal returnValue As Object, _
                         ByVal correlationState As Object) Implements IParameterInspector.AfterCall
        Console.WriteLine("IParameterInspector.AfterCall called for {0} with return value {1}.", _
                          operationName, returnValue.ToString())
    End Sub

    Public Function BeforeCall(ByVal operationName As String, ByVal inputs() As Object) As Object Implements _
    IParameterInspector.BeforeCall
        Console.WriteLine("IParameterInspector.BeforeCall called for {0}.", operationName)
        Return Nothing
    End Function

Nell'esempio di codice seguente viene illustrato come il comportamento dell'operazione colleghi il controllo di parametro alla fase di esecuzione.

#region IOperationBehavior Members
public void AddBindingParameters(
  OperationDescription operationDescription, BindingParameterCollection bindingParameters
)
{ return; }

public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
{
  clientOperation.ParameterInspectors.Add(new Inspector());
}

public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
{
  dispatchOperation.ParameterInspectors.Add(new Inspector());
}

public void Validate(OperationDescription operationDescription){ return; }
#Region "IOperationBehavior Members"
    Public Sub AddBindingParameters(ByVal operationDescription As OperationDescription, _
                                    ByVal bindingParameters As BindingParameterCollection) Implements _
                                    IOperationBehavior.AddBindingParameters
        Return
    End Sub

    Public Sub ApplyClientBehavior(ByVal operationDescription As OperationDescription, ByVal _
                                   clientOperation As ClientOperation) Implements IOperationBehavior.ApplyClientBehavior
        clientOperation.ParameterInspectors.Add(New Inspector())
    End Sub

    Public Sub ApplyDispatchBehavior(ByVal operationDescription As OperationDescription, ByVal dispatchOperation As  _
                                     DispatchOperation) Implements IOperationBehavior.ApplyDispatchBehavior
        dispatchOperation.ParameterInspectors.Add(New Inspector())
    End Sub

Public Sub Validate(ByVal operationDescription As OperationDescription) Implements IOperationBehavior.Validate
    Return
End Sub

Commenti

Implementare l'interfaccia IOperationBehavior per modificare, esaminare o estendere aspetti dell'esecuzione dell'operazione a livello di applicazione per applicazioni client o di servizio.

  • Utilizzare il metodo AddBindingParameters per passare dati personalizzati della fase di esecuzione per abilitare le associazioni a supportare il comportamento personalizzato.

  • Utilizzare il metodo ApplyClientBehavior per modificare, esaminare o inserire estensioni in un dispatcher client di un'applicazione client.

  • Utilizzare il metodo ApplyDispatchBehavior per modificare, esaminare o inserire estensioni in un'esecuzione dell'operazione in un'applicazione del servizio.

  • Utilizzare il metodo Validate per verificare che una classe OperationDescription soddisfi requisiti specifici. Questo metodo può essere utilizzato per garantire che in un'operazione sia abilitata una certa impostazione di configurazione, che supporti una particolare funzionalità e altri requisiti.

IOperationBehavior gli oggetti possono usare uno di questi metodi, ma spesso solo uno è importante; in questi casi, i metodi inutilizzati possono restituire, eseguendo alcuna azione.

Nota

Tutti i metodi IOperationBehavior passano un oggetto OperationDescription come parametro. Questo parametro è utilizzabile solo per attività di esame. Se l'oggetto OperationDescription viene modificato, il comportamento di esecuzione sarà indefinito.

Gli oggetti IOperationBehavior sono utilizzati in genere per accedere alle proprietà dell'oggetto System.ServiceModel.Dispatcher.DispatchOperation in un'applicazione del servizio e dell'oggetto System.ServiceModel.Dispatcher.ClientOperation in un'applicazione client.

Lo sviluppatore in genere prima esegue la revisione dei punti di estensibilità per determinare quale opzione della personalizzazione si adatta allo scenario dell'applicazione e quindi implementa la personalizzazione nell'ambito appropriato. Ad esempio, gli oggetti System.ServiceModel.Description.IServiceBehavior possono inserire personalizzazioni per tutti i messaggi di un servizio e gli oggetti System.ServiceModel.Description.IContractBehavior possono inserire personalizzazioni per tutti i messaggi di un contratto specifico e così via. Per una descrizione delle varie proprietà e personalizzazioni disponibili, vedere Estensione di ServiceHost e livello modello di servizio.

Dopo aver deciso una personalizzazione (e l'interfaccia di personalizzazione implementata se necessario) e l'ambito IOperationBehavior appropriato della personalizzazione, la personalizzazione deve essere inserita nel runtime di Windows Communication Foundation (WCF) implementando IOperationBehavior e aggiungendo il comportamento dell'operazione al runtime.

Esistono due modi per aggiungere l'interfaccia IOperationBehavior alla fase di esecuzione:

  • Aggiungere il comportamento dell'operazione a livello di programmazione alla proprietà OperationDescription.Behaviors prima dell'apertura del host del servizio (in un'applicazione del servizio) o della channel factory (in un'applicazione client).

  • Aggiungere il comportamento utilizzando un attributo personalizzato.

Per eseguire un'attività di personalizzazione nel relativo servizio, è necessario aggiungere l'oggetto IOperationBehavior alla proprietà OperationDescription.Behaviors prima della costruzione della fase di esecuzione del servizio che si verifica quando il metodo ICommunicationObject.Open viene chiamato sull'oggetto System.ServiceModel.ServiceHost. Per eseguire un'attività di personalizzazione nel client, è necessario aggiungere l'oggetto IOperationBehavior alla proprietà OperationDescription.Behaviors prima di chiamare il metodo ChannelFactory<TChannel>.CreateChannel o il metodo ICommunicationObject.Open su ChannelFactory<TChannel>.

Anche se il comportamento dell'operazione è progettato per consentire l'accesso facilitato alla fase di esecuzione nell'ambito di un'operazione singola, è possibile accedere alla fase di esecuzione in un ambito maggiore accedendo all'oggetto della fase di esecuzione padre.

Metodi

AddBindingParameters(OperationDescription, BindingParameterCollection)

Procedere all'implementazione per passare i dati in fase di esecuzione alle associazioni per garantire il supporto del comportamento personalizzato.

ApplyClientBehavior(OperationDescription, ClientOperation)

Implementa una modifica o un'estensione del client all'interno di un'operazione.

ApplyDispatchBehavior(OperationDescription, DispatchOperation)

Implementa una modifica o un'estensione del servizio all'interno di un'operazione.

Validate(OperationDescription)

Procedere all'implementazione per verificare che l'operazione soddisfi alcuni criteri specificati.

Si applica a