Partager via


CallbackBehaviorAttribute Classe

Définition

Configure l'implémentation d'un service de rappel dans une application cliente.

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
Héritage
CallbackBehaviorAttribute
Attributs
Implémente

Exemples

L'exemple de code suivant illustre un attribut CallbackBehaviorAttribute sur un objet de rappel qui utilise l'objet SynchronizationContext pour déterminer le thread à marshaler, la propriété ValidateMustUnderstand pour appliquer la validation de message et la propriété IncludeExceptionDetailInFaults pour retourner des exceptions au service sous la forme d'objets FaultException à des fins de débogage.

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

Remarques

Utilisez l'attribut CallbackBehaviorAttribute pour configurer ou étendre le comportement d'exécution de l'implémentation d'un contrat de rappel dans une application cliente. Cet attribut exécute pour la classe de rappel une fonction semblable à l’attribut ServiceBehaviorAttribute, à l’exception du comportement d’instanciation et des paramètres de transaction.

L'attribut CallbackBehaviorAttribute doit être appliqué à la classe chargée d'implémenter le contrat de rappel. En cas d'application à une implémentation de contrat non-duplex, une exception InvalidOperationException est levée au moment de l'exécution.

Notes

Vous pouvez également utiliser l'attribut OperationBehaviorAttribute pour des implémentations d'opérations de rappel. Toutefois, si vous utilisez OperationBehaviorAttribute dans le cadre d'une opération de rappel, la propriété ReleaseInstanceMode doit être None ou une exception InvalidOperationException est levée au moment de l'exécution.

Les propriétés suivantes sont disponibles :

  • La propriété AutomaticSessionShutdown ferme automatiquement la session lorsque le canal est fermé et le rappel a fini de traiter les messages restants.

  • La propriété ConcurrencyMode contrôle le modèle de thread interne et permet ainsi la prise en charge des objets de rappel réentrants ou multithread.

  • La propriété IgnoreExtensionDataObject permet au temps d'exécution d'ignorer les informations de sérialisation supplémentaires qui ne sont pas requises pour le traitement du message.

  • La propriété IncludeExceptionDetailInFaults spécifie si les exceptions non gérées dans un service sont retournées à un service en tant qu'erreurs SOAP à des fins de débogage.

  • La propriété MaxItemsInObjectGraph limite le nombre d'éléments sérialisés dans un graphique d'objets.

  • La propriété TransactionIsolationLevel spécifie le niveau d'isolation de la transaction que le contrat prend en charge.

  • La propriété TransactionTimeout spécifie le délai au cours duquel une transaction doit être exécutée, faute de quoi elle sera abandonnée.

  • La propriété UseSynchronizationContext indique s'il faut synchroniser automatiquement des appels de méthode à l'aide de l'objet SynchronizationContext actuel.

  • La propriété ValidateMustUnderstand informe le système s'il doit confirmer que les en-têtes SOAP marqués comme MustUnderstand ont effectivement été compris.

Constructeurs

CallbackBehaviorAttribute()

Initialise une nouvelle instance de la classe CallbackBehaviorAttribute.

Propriétés

AutomaticSessionShutdown

Spécifie si une session doit être automatiquement fermée lorsqu'un service ferme une session duplex.

ConcurrencyMode

Obtient ou définit si un service prend en charge un thread, plusieurs threads ou des appels réentrants.

IgnoreExtensionDataObject

Obtient ou définit une valeur indiquant si des données de sérialisation inconnues doivent être envoyées sur le réseau.

IncludeExceptionDetailInFaults

Obtient ou définit une valeur qui indique que les exceptions d'exécution générales non prises en charge doivent être converties en FaultException<TDetail> de type String et envoyées en tant que message d'erreur. Affectez la valeur true uniquement lors du développement afin de dépanner un service.

MaxItemsInObjectGraph

Obtient ou définit le nombre maximal d'éléments autorisés dans un objet sérialisé.

TransactionIsolationLevel

Spécifie le niveau d’isolation de la transaction.

TransactionTimeout

Obtient ou définit la période au cours de laquelle une transaction doit se terminer.

TypeId

Lors de l'implémentation dans une classe dérivée, obtient un identificateur unique pour l'objet Attribute.

(Hérité de Attribute)
UseSynchronizationContext

Obtient ou définit une valeur qui spécifie si le contexte de synchronisation actuel doit être utilisé pour sélectionner le thread d’exécution.

ValidateMustUnderstand

Obtient ou définit une valeur qui spécifie si le système ou l'application applique le traitement d'en-tête MustUnderstand SOAP.

Méthodes

Equals(Object)

Retourne une valeur qui indique si cette instance est égale à un objet spécifié.

(Hérité de Attribute)
GetHashCode()

Retourne le code de hachage de cette instance.

(Hérité de Attribute)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
IsDefaultAttribute()

En cas de substitution dans une classe dérivée, indique si la valeur de cette instance est la valeur par défaut pour la classe dérivée.

(Hérité de Attribute)
Match(Object)

En cas de substitution dans une classe dérivée, retourne une valeur indiquant si cette instance équivaut à un objet spécifié.

(Hérité de Attribute)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

Implémentations d’interfaces explicites

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mappe un jeu de noms avec un jeu correspondant d'identificateurs de dispatch.

(Hérité de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Récupère les informations de type pour un objet, qui peuvent être utilisées pour obtenir les informations de type d'une interface.

(Hérité de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Récupère le nombre d'interfaces d'informations de type fourni par un objet (0 ou 1).

(Hérité de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fournit l'accès aux propriétés et aux méthodes exposées par un objet.

(Hérité de Attribute)
IEndpointBehavior.AddBindingParameters(ServiceEndpoint, BindingParameterCollection)

Configure les éléments de liaison afin de prendre en charge le comportement d’appel.

IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint, ClientRuntime)

Configure l'exécution du client pour la prise en charge de l'objet de rappel.

IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher)

Implémentation de la méthode ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher). Cette implémentation n'a aucun effet.

IEndpointBehavior.Validate(ServiceEndpoint)

Valide la description du point de terminaison avant de générer l'exécution.

S’applique à