Compartir a través de


CallbackBehaviorAttribute Clase

Definición

Configura una implementación de servicio de devolución de llamada en una aplicación 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
Herencia
CallbackBehaviorAttribute
Atributos
Implementaciones

Ejemplos

El ejemplo de código siguiente muestra un CallbackBehaviorAttribute en un objeto de devolución de llamada que usa el objeto SynchronizationContext para determinar el subproceso a serializar, la propiedad ValidateMustUnderstand para exigir la validación del mensaje y la propiedad IncludeExceptionDetailInFaults para devolver las excepciones como objetos FaultException al servicio para fines de depuración.

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

Comentarios

Utilice el atributo CallbackBehaviorAttribute para configurar o extender el comportamiento de ejecución de una implementación de contrato de devolución de llamada en una aplicación cliente. Este atributo realiza la misma función para la clase de devolución de llamada que el atributo ServiceBehaviorAttribute, con la excepción de que crea instancias del comportamiento y de valores de la transacción.

CallbackBehaviorAttribute se debe aplicar a la clase que implementa el contrato de devolución de llamada. Si se aplica a una implementación de contrato de no dúplex, se produce una excepción InvalidOperationException en tiempo de ejecución.

Nota:

También puede utilizar el atributo OperationBehaviorAttribute para las implementaciones de operación de devolución de llamada. Sin embargo, si OperationBehaviorAttribute se utiliza en una operación de devolución de llamada, la propiedad ReleaseInstanceMode debe ser None o se produce una excepción InvalidOperationException en tiempo de ejecución.

Están disponibles las propiedades siguientes:

  • La propiedad AutomaticSessionShutdown cierra automáticamente la sesión cuando se cierra el canal y la devolución de llamadas ha acabado de procesar todos los mensajes restantes.

  • La propiedad ConcurrencyMode controla el modelo de subprocesos interno, habilitando la compatibilidad para los objetos de devolución de llamada reentrantes o multithreading.

  • La propiedad IgnoreExtensionDataObject permite que el tiempo de ejecución omita información de serialización adicional que no se exige para procesar el mensaje.

  • La propiedad IncludeExceptionDetailInFaults especifica si las excepciones no controladas en un servicio se devuelven al servicio como errores de SOAP para fines de depuración.

  • La propiedad MaxItemsInObjectGraph limita el número de elementos en un gráfico de objetos que se serializan.

  • La propiedad TransactionIsolationLevel especifica el nivel del aislamiento de transacción que el contrato admite.

  • La propiedad TransactionTimeout especifica el período de tiempo dentro del que una nueva transacción creada en el servicio debe completarse o se anula.

  • La propiedad UseSynchronizationContext indica si sincronizar las llamadas del método entrantes de forma automática utilizando el objeto SynchronizationContext actual.

  • La propiedad ValidateMustUnderstand informa al sistema sobre si debe confirmar que los encabezados SOAP marcados como MustUnderstand han sido, de hecho, entendidos.

Constructores

CallbackBehaviorAttribute()

Inicializa una nueva instancia de la clase CallbackBehaviorAttribute.

Propiedades

AutomaticSessionShutdown

Especifica si cerrar automáticamente una sesión cuando un servicio cierra una sesión dúplex.

ConcurrencyMode

Obtiene o establece si un servicio admite un subproceso, varios subprocesos o llamadas reentrantes.

IgnoreExtensionDataObject

Obtiene o establece un valor que especifica si enviar o no datos de serialización desconocidos hacia la conexión.

IncludeExceptionDetailInFaults

Obtiene o establece un valor que especifica que las excepciones de ejecución generales no controladas se convertirán en una FaultException<TDetail> de tipo String, y se enviarán como mensaje de error. Establezca este valor como true sólo durante el desarrollo para solucionar problemas de un servicio.

MaxItemsInObjectGraph

Obtiene o establece el número máximo de elementos permitido en un objeto serializado.

TransactionIsolationLevel

Especifica el nivel de aislamiento de la transacción.

TransactionTimeout

Obtiene o establece el período dentro del que una transacción se debe completar.

TypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.

(Heredado de Attribute)
UseSynchronizationContext

Obtiene o establece un valor que especifica si utilizar el contexto de sincronización actual para elegir el subproceso de ejecución.

ValidateMustUnderstand

Obtiene o establece un valor que especifica si el sistema o la aplicación exige el procesamiento de encabezados MustUnderstand de SOAP.

Métodos

Equals(Object)

Devuelve un valor que indica si esta instancia es igual que un objeto especificado.

(Heredado de Attribute)
GetHashCode()

Devuelve el código hash de esta instancia.

(Heredado de Attribute)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
IsDefaultAttribute()

Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.

(Heredado de Attribute)
Match(Object)

Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado.

(Heredado de Attribute)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Implementaciones de interfaz explícitas

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

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.

(Heredado de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz.

(Heredado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1).

(Heredado de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.

(Heredado de Attribute)
IEndpointBehavior.AddBindingParameters(ServiceEndpoint, BindingParameterCollection)

Configura los elementos de enlace para admitir el comportamiento de devolución de llamada.

IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint, ClientRuntime)

Configura el cliente en tiempo de ejecución para admitir el objeto de devolución de llamada.

IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher)

Implementación del método ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher). Esta implementación no tiene ningún efecto.

IEndpointBehavior.Validate(ServiceEndpoint)

Valida la descripción del punto de conexión antes de compilar el tiempo de ejecución.

Se aplica a