CallbackBehaviorAttribute Classe

Definizione

Configura un'implementazione del servizio di callback in un'applicazione client.

public ref class CallbackBehaviorAttribute sealed : Attribute, System::ServiceModel::Description::IEndpointBehavior
[System.AttributeUsage(System.AttributeTargets.Class)]
public sealed class CallbackBehaviorAttribute : Attribute, System.ServiceModel.Description.IEndpointBehavior
[<System.AttributeUsage(System.AttributeTargets.Class)>]
type CallbackBehaviorAttribute = class
    inherit Attribute
    interface IEndpointBehavior
Public NotInheritable Class CallbackBehaviorAttribute
Inherits Attribute
Implements IEndpointBehavior
Ereditarietà
CallbackBehaviorAttribute
Attributi
Implementazioni

Esempio

Nell'esempio di codice seguente vengono illustrati CallbackBehaviorAttribute su un oggetto callback che utilizza l'oggetto SynchronizationContext per determinare il thread su cui effettuare il marshalling, la proprietà ValidateMustUnderstand per applicare la convalida del messaggio e la proprietà IncludeExceptionDetailInFaults per restituire eccezioni come oggetti FaultException al servizio a scopo di debug.

using System;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Threading;

namespace Microsoft.WCF.Documentation
{
  [CallbackBehaviorAttribute(
   IncludeExceptionDetailInFaults= true,
    UseSynchronizationContext=true,
    ValidateMustUnderstand=true
  )]
  public class Client : SampleDuplexHelloCallback
  {
    AutoResetEvent waitHandle;

    public Client()
    {
      waitHandle = new AutoResetEvent(false);
    }

    public void Run()
    {
      // Picks up configuration from the configuration file.
      SampleDuplexHelloClient wcfClient
        = new SampleDuplexHelloClient(new InstanceContext(this), "WSDualHttpBinding_SampleDuplexHello");
      try
      {
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("Enter a greeting to send and press ENTER: ");
        Console.Write(">>> ");
        Console.ForegroundColor = ConsoleColor.Green;
        string greeting = Console.ReadLine();
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("Called service with: \r\n\t" + greeting);
        wcfClient.Hello(greeting);
        Console.WriteLine("Execution passes service call and moves to the WaitHandle.");
        this.waitHandle.WaitOne();
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.WriteLine("Set was called.");
        Console.Write("Press ");
        Console.ForegroundColor = ConsoleColor.Red;
        Console.Write("ENTER");
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.Write(" to exit...");
        Console.ReadLine();
      }
      catch (TimeoutException timeProblem)
      {
        Console.WriteLine("The service operation timed out. " + timeProblem.Message);
        Console.ReadLine();
      }
      catch (CommunicationException commProblem)
      {
        Console.WriteLine("There was a communication problem. " + commProblem.Message);
        Console.ReadLine();
      }
    }
    public static void Main()
    {
      Client client = new Client();
      client.Run();
    }

    public void Reply(string response)
    {
      Console.WriteLine("Received output.");
      Console.WriteLine("\r\n\t" + response);
      this.waitHandle.Set();
    }
  }
}

Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.Threading

Namespace Microsoft.WCF.Documentation
  <CallbackBehaviorAttribute(IncludeExceptionDetailInFaults:= True, UseSynchronizationContext:=True, ValidateMustUnderstand:=True)> _
  Public Class Client
      Implements SampleDuplexHelloCallback
    Private waitHandle As AutoResetEvent

    Public Sub New()
      waitHandle = New AutoResetEvent(False)
    End Sub

    Public Sub Run()
      ' Picks up configuration from the configuration file.
      Dim wcfClient As New SampleDuplexHelloClient(New InstanceContext(Me), "WSDualHttpBinding_SampleDuplexHello")
      Try
        Console.ForegroundColor = ConsoleColor.White
        Console.WriteLine("Enter a greeting to send and press ENTER: ")
        Console.Write(">>> ")
        Console.ForegroundColor = ConsoleColor.Green
        Dim greeting As String = Console.ReadLine()
        Console.ForegroundColor = ConsoleColor.White
        Console.WriteLine("Called service with: " & Constants.vbCrLf & Constants.vbTab & greeting)
        wcfClient.Hello(greeting)
        Console.WriteLine("Execution passes service call and moves to the WaitHandle.")
        Me.waitHandle.WaitOne()
        Console.ForegroundColor = ConsoleColor.Blue
        Console.WriteLine("Set was called.")
        Console.Write("Press ")
        Console.ForegroundColor = ConsoleColor.Red
        Console.Write("ENTER")
        Console.ForegroundColor = ConsoleColor.Blue
        Console.Write(" to exit...")
        Console.ReadLine()
      Catch timeProblem As TimeoutException
        Console.WriteLine("The service operation timed out. " & timeProblem.Message)
        Console.ReadLine()
      Catch commProblem As CommunicationException
        Console.WriteLine("There was a communication problem. " & commProblem.Message)
        Console.ReadLine()
      End Try
    End Sub
    Public Shared Sub Main()
      Dim client As New Client()
      client.Run()
    End Sub

    Public Sub Reply(ByVal response As String) Implements SampleDuplexHelloCallback.Reply
      Console.WriteLine("Received output.")
      Console.WriteLine(Constants.vbCrLf & Constants.vbTab & response)
      Me.waitHandle.Set()
    End Sub
  End Class
End Namespace

Commenti

Utilizzare l'attributo CallbackBehaviorAttribute per configurare o estendere il comportamento di esecuzione dell'implementazione di un contratto di callback in un'applicazione client. Questo attributo esegue, per la classe di callback, la stessa funzione dell'attributo ServiceBehaviorAttribute, fatta eccezione per il comportamento di creazione di istanze e le impostazioni di transazione.

CallbackBehaviorAttribute deve essere applicato alla classe che implementa il contratto di callback. Se viene applicata all'implementazione di un contratto non duplex, viene generata un'eccezione InvalidOperationException in fase di esecuzione.

Nota

L'attributo OperationBehaviorAttribute può essere utilizzato anche per le implementazioni delle operazioni di callback. Tuttavia, se OperationBehaviorAttribute viene utilizzato in un'operazione di callback, la proprietà ReleaseInstanceMode deve essere None; in caso contrario, verrà generata un'eccezione InvalidOperationException al runtime.

Sono disponibili le proprietà seguenti:

  • La proprietà AutomaticSessionShutdown determina la chiusura automatica della sessione quando il canale viene chiuso e il callback ha terminato l'elaborazione dei messaggi rimanenti.

  • La proprietà ConcurrencyMode controlla il modello di threading interno, consentendo il supporto di oggetti callback rientranti o multithreading.

  • La proprietà IgnoreExtensionDataObject consente al runtime di ignorare le informazioni di serializzazione aggiuntive che non sono necessarie per elaborare il messaggio.

  • La proprietà IncludeExceptionDetailInFaults specifica se restituire le eccezioni non gestite al servizio come errori SOAP per fini di debug.

  • La proprietà MaxItemsInObjectGraph limita il numero di elementi di un oggetto grafico che vengono serializzati.

  • La proprietà TransactionIsolationLevel specifica il livello di isolamento della transazione supportato dal contratto.

  • La proprietà TransactionTimeout specifica il periodo di tempo entro il quale una transazione deve essere completata prima di essere interrotta.

  • La proprietà UseSynchronizationContext indica se sincronizzare automaticamente le chiamate ai metodi in ingresso utilizzando l'oggetto SynchronizationContext corrente.

  • La proprietà ValidateMustUnderstand indica al sistema se è necessario verificare che le intestazioni SOAP contrassegnate con MustUnderstand, siano state in effetti riconosciute.

Costruttori

CallbackBehaviorAttribute()

Inizializza una nuova istanza della classe CallbackBehaviorAttribute.

Proprietà

AutomaticSessionShutdown

Specifica se chiudere automaticamente una sessione quando un servizio chiude una sessione duplex.

ConcurrencyMode

Ottiene o imposta un valore che indica se un servizio supporta un solo thread, più thread o chiamate rientranti.

IgnoreExtensionDataObject

Ottiene o imposta un valore che specifica se inviare i dati di serializzazione sconosciuti in transito.

IncludeExceptionDetailInFaults

Ottiene o imposta un valore che specifica che le eccezioni di esecuzione generiche non gestite devono essere convertite in una classe FaultException<TDetail> di tipo String e inviate come messaggio di errore. Impostare questa proprietà su true solo durante la fase di sviluppo per la risoluzione dei problemi di un servizio.

MaxItemsInObjectGraph

Ottiene o imposta il numero massimo di elementi consentiti in un oggetto serializzato.

TransactionIsolationLevel

Specifica il livello di isolamento delle transazioni.

TransactionTimeout

Ottiene o imposta il periodo di tempo entro il quale deve essere completata una transazione.

TypeId

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

(Ereditato da Attribute)
UseSynchronizationContext

Ottiene o imposta un valore che specifica se utilizzare il contesto di sincronizzazione corrente per scegliere il thread di esecuzione.

ValidateMustUnderstand

Ottiene o imposta un valore che specifica se il sistema o l'applicazione applica l'elaborazione dell'intestazione MustUnderstand SOAP.

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)
IEndpointBehavior.AddBindingParameters(ServiceEndpoint, BindingParameterCollection)

Configura gli elementi di associazione per supportare il comportamento di callback.

IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint, ClientRuntime)

Configura il runtime client per supportare l'oggetto callback.

IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher)

Implementazione del metodo ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher). Questa implementazione non ha alcun effetto.

IEndpointBehavior.Validate(ServiceEndpoint)

Convalida la descrizione dell'endpoint prima della compilazione del runtime.

Si applica a