CallbackBehaviorAttribute Класс

Определение

Настраивает реализацию службы обратного вызова в клиентском приложении.Configures a callback service implementation in a client application.

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
Наследование
CallbackBehaviorAttribute
Атрибуты
Реализации

Примеры

В следующем примере кода показан CallbackBehaviorAttribute для объекта обратного вызова, в котором используются: объект SynchronizationContext для определения потока, в который требуется маршалировать; свойство ValidateMustUnderstand для принудительной проверки сообщений; свойство IncludeExceptionDetailInFaults для возврата исключений в службу в виде объектов FaultException, используемых для целей отладки.The following code example shows a CallbackBehaviorAttribute on a callback object that uses the SynchronizationContext object to determine which thread to marshal to, the ValidateMustUnderstand property to enforce message validation, and the IncludeExceptionDetailInFaults property to return exceptions as FaultException objects to the service for debugging purposes.

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

Комментарии

Атрибут CallbackBehaviorAttribute используется для настройки или расширения поведения выполнения при реализации контракта обратного вызова в клиентском приложении.Use the CallbackBehaviorAttribute attribute to configure or extend the execution behavior of a callback contract implementation in a client application. Этот атрибут выполняет для класса обратного вызова ту же функцию, что и атрибут ServiceBehaviorAttribute, без учета поведения экземпляров и параметров транзакции.This attribute performs the same function for the callback class as the ServiceBehaviorAttribute attribute with the exception of instancing behavior and transaction settings.

Атрибут CallbackBehaviorAttribute необходимо применять к классу, в котором реализован контракт обратного вызова.The CallbackBehaviorAttribute must be applied to the class that implements the callback contract. Если класс применяется к реализации недуплексного контракта, во время выполнения создается исключение InvalidOperationException.If applied to a non-duplex contract implementation an InvalidOperationException exception is thrown at runtime.

Примечание

Для реализации операции обратного вызова также можно использовать атрибут OperationBehaviorAttribute.You can also use the OperationBehaviorAttribute attribute for the callback operation implementations. Если атрибут OperationBehaviorAttribute используется для операции обратного вызова, свойство ReleaseInstanceMode должно иметь значение None, или во время выполнения выводится исключение InvalidOperationException.However, if OperationBehaviorAttribute is used on a callback operation, the ReleaseInstanceMode property must be None or an InvalidOperationException exception is thrown at runtime.

Доступны следующие свойства.The following properties are available:

  • Свойство AutomaticSessionShutdown автоматически закрывает сеанс после закрытия канала и завершения обработки остающихся сообщений обратным вызовом.The AutomaticSessionShutdown property automatically closes the session when the channel is closed and the callback has finished processing any remaining messages.

  • Свойство ConcurrencyMode управляет внутренней моделью потоков, обеспечивая поддержку многопоточных объектов обратного вызова или объектов с повторными входящими вызовами.The ConcurrencyMode property controls the internal threading model, enabling support for reentrant or multithreaded callback objects.

  • Свойство IgnoreExtensionDataObject позволяет среде выполнения пропускать дополнительную информацию о сериализации, которая не требуется для обработки сообщения.The IgnoreExtensionDataObject property enables the runtime to ignore extra serialization information that is not required to process the message.

  • Свойство IncludeExceptionDetailInFaults указывает на то, выводятся ли необработанные исключения службы для целей отладки как ошибки протокола SOAP.The IncludeExceptionDetailInFaults property specifies whether unhandled exceptions in a service are returned to the service as SOAP faults for debugging purposes.

  • Свойство MaxItemsInObjectGraph ограничивает количество сериализуемых элементов в графе объекта.The MaxItemsInObjectGraph property limits on the number of items in an object graph that are serialized.

  • Свойство TransactionIsolationLevel задает уровень изоляции транзакций, поддерживаемый контрактом.The TransactionIsolationLevel property specifies the transaction isolation level that the contract supports.

  • Свойство TransactionTimeout задает период времени, в течение которого транзакция должна быть завершена или прервана.The TransactionTimeout property specifies the time period within which a transaction must complete or it aborts.

  • Свойство UseSynchronizationContext указывает, нужно ли выполнять синхронизацию входящих вызовов метода автоматически с помощью текущего объекта SynchronizationContext.The UseSynchronizationContext property indicates whether to synchronize inbound method calls automatically using the current SynchronizationContext object.

  • Свойство ValidateMustUnderstand сообщает системе, должна ли она подтверждать, что заголовки SOAP, отмеченные как MustUnderstand, фактически были поняты.The ValidateMustUnderstand property informs the system whether it should confirm that SOAP headers marked as MustUnderstand have, in fact, been understood.

Конструкторы

CallbackBehaviorAttribute()

Инициализирует новый экземпляр класса CallbackBehaviorAttribute.Initializes a new instance of the CallbackBehaviorAttribute class.

Свойства

AutomaticSessionShutdown

Указывает, необходимо ли автоматически закрывать сеанс при закрытии службой дуплексного сеанса.Specifies whether to automatically close a session when a service closes a duplex session.

ConcurrencyMode

Возвращает или задает поддержку службой одного потока, нескольких потоков или повторных входящих вызовов.Gets or sets whether a service supports one thread, multiple threads, or reentrant calls.

IgnoreExtensionDataObject

Возвращает или задает значение, которое указывает, требуется ли передавать по линии связи неизвестные данные сериализации.Gets or sets a value that specifies whether to send unknown serialization data onto the wire.

IncludeExceptionDetailInFaults

Возвращает или задает значение, указывающее, что общие необработанные исключения выполнения должны преобразовываться в исключения FaultException<TDetail> типа String и передаваться в виде сообщения об ошибке.Gets or sets a value that specifies that general unhandled execution exceptions are to be converted into a FaultException<TDetail> of type String and sent as a fault message. Задавайте значение true только во время разработки для устранения неполадок службы.Set this to true only during development to troubleshoot a service.

MaxItemsInObjectGraph

Возвращает или задает максимальное количество элементов, допустимое в сериализованном объекте.Gets or sets the maximum number of items allowed in a serialized object.

TransactionIsolationLevel

Указывает уровень изоляции транзакции.Specifies the transaction isolation level.

TransactionTimeout

Возвращает или задает период времени, в течение которого транзакция должна быть завершена.Gets or sets the period within which a transaction must complete.

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Унаследовано от Attribute)
UseSynchronizationContext

Возвращает или задает значение, определяющее, следует ли использовать текущий контекст синхронизации для выбора потока исполнения.Gets or sets a value that specifies whether to use the current synchronization context to choose the thread of execution.

ValidateMustUnderstand

Возвращает или задает значение, определяющее, кем выполняется принудительная обработка заголовка SOAP MustUnderstand: системой или приложением.Gets or sets a value that specifies whether the system or the application enforces SOAP MustUnderstand header processing.

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.Returns a value that indicates whether this instance is equal to a specified object.

(Унаследовано от Attribute)
GetHashCode()

Возвращает хэш-код данного экземпляра.Returns the hash code for this instance.

(Унаследовано от Attribute)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
IsDefaultAttribute()

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Унаследовано от Attribute)
Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Унаследовано от Attribute)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)

Явные реализации интерфейса

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

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.Maps a set of names to a corresponding set of dispatch identifiers.

(Унаследовано от Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Унаследовано от Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Унаследовано от Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.Provides access to properties and methods exposed by an object.

(Унаследовано от Attribute)
IEndpointBehavior.AddBindingParameters(ServiceEndpoint, BindingParameterCollection)

Настраивает элементы привязки для поддержки поведения обратного вызова.Configures the binding elements to support the callback behavior.

IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint, ClientRuntime)

Настраивает среду выполнения клиента для поддержки объекта обратного вызова.Configures the client runtime to support the callback object.

IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher)

Реализация метода ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher).Implementation of the ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher) method. Данная реализация не используется.This implementation has no effect.

IEndpointBehavior.Validate(ServiceEndpoint)

Проверяет описание конечной точки до построения среды выполнения.Validates the endpoint description prior to building the runtime.

Применяется к