CallbackBehaviorAttribute Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
- 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 |
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 |
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. |