Questa documentazione è stata archiviata e non viene gestita.

Classe CallbackBehaviorAttribute

Aggiornamento: novembre 2007

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

Spazio dei nomi:  System.ServiceModel
Assembly:  System.ServiceModel (in System.ServiceModel.dll)

[AttributeUsageAttribute(AttributeTargets.Class)]
public sealed class CallbackBehaviorAttribute : Attribute, 
	IEndpointBehavior
/** @attribute AttributeUsageAttribute(AttributeTargets.Class) */
public final class CallbackBehaviorAttribute extends Attribute implements IEndpointBehavior
public final class CallbackBehaviorAttribute extends Attribute implements IEndpointBehavior

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.

ms586338.alert_note(it-it,VS.90).gifNota:

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.

Nell'esempio di codice seguente vengono illustrati CallbackBehaviorAttribute su un oggetto callback che utilizza l'oggetto SynchronizationContext per determinare il thread su cui eseguire 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();
    }
  }
}


System.Object
  System.Attribute
    System.ServiceModel.CallbackBehaviorAttribute

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Windows Vista, Windows XP SP2, Windows Server 2003

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0
Mostra: