Condividi tramite


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 viene illustrato un CallbackBehaviorAttribute oggetto su un oggetto callback che utilizza l'oggetto SynchronizationContext per determinare il thread a cui eseguire il marshalling, la proprietà per applicare la ValidateMustUnderstand convalida dei messaggi e la IncludeExceptionDetailInFaults proprietà per restituire eccezioni come FaultException oggetti 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

Usare l'attributo CallbackBehaviorAttribute per configurare o estendere il comportamento di esecuzione di un'implementazione del contratto di callback in un'applicazione client. Questo attributo esegue la stessa funzione per la classe di callback dell'attributo ServiceBehaviorAttribute , ad eccezione del comportamento di creazione di istanze e delle impostazioni delle transazioni.

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

Annotazioni

È anche possibile usare l'attributo OperationBehaviorAttribute per le implementazioni dell'operazione di callback. Tuttavia, se OperationBehaviorAttribute viene usato in un'operazione di callback, la ReleaseInstanceMode proprietà deve essere None o viene generata un'eccezione InvalidOperationException in fase di esecuzione.

Sono disponibili le proprietà seguenti:

  • La AutomaticSessionShutdown proprietà chiude automaticamente la sessione quando il canale viene chiuso e il callback ha terminato l'elaborazione di eventuali messaggi rimanenti.

  • La ConcurrencyMode proprietà controlla il modello di threading interno, abilitando il supporto per gli oggetti callback reentrant o multithreading.

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

  • La IncludeExceptionDetailInFaults proprietà specifica se le eccezioni non gestite in un servizio vengono restituite al servizio come errori SOAP a scopo di debug.

  • La MaxItemsInObjectGraph proprietà limita il numero di elementi in un oggetto grafico serializzato.

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

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

  • La UseSynchronizationContext proprietà indica se sincronizzare automaticamente le chiamate al metodo in ingresso usando l'oggetto corrente SynchronizationContext .

  • La ValidateMustUnderstand proprietà informa il sistema se deve confermare che le intestazioni SOAP contrassegnate come MustUnderstand sono state effettivamente comprese.

Costruttori

Nome Descrizione
CallbackBehaviorAttribute()

Inizializza una nuova istanza della classe CallbackBehaviorAttribute.

Proprietà

Nome Descrizione
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 thread, più thread o chiamate reentranti.

IgnoreExtensionDataObject

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

IncludeExceptionDetailInFaults

Ottiene o imposta un valore che specifica che le eccezioni generali di esecuzione non gestite devono essere convertite in un FaultException<TDetail> oggetto di tipo String e inviate come messaggio di errore. Impostare questa opzione true su solo durante lo sviluppo per risolvere i 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 entro il quale deve essere completata una transazione.

TypeId

Se implementato in una classe derivata, ottiene un identificatore univoco per questo 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 SOAP MustUnderstand .

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)
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 ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher) metodo . Questa implementazione non ha alcun effetto.

IEndpointBehavior.Validate(ServiceEndpoint)

Convalida la descrizione dell'endpoint prima di compilare il runtime.

Si applica a