CallbackBehaviorAttribute Класс

Определение

Настраивает реализацию службы обратного вызова в клиентском приложении.

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, используемых для целей отладки.

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 используется для настройки или расширения поведения выполнения при реализации контракта обратного вызова в клиентском приложении. Этот атрибут выполняет для класса обратного вызова ту же функцию, что и атрибут ServiceBehaviorAttribute, без учета поведения экземпляров и параметров транзакции.

Атрибут CallbackBehaviorAttribute необходимо применять к классу, в котором реализован контракт обратного вызова. Если класс применяется к реализации недуплексного контракта, во время выполнения создается исключение InvalidOperationException.

Примечание

Для реализации операции обратного вызова также можно использовать атрибут OperationBehaviorAttribute. Если атрибут OperationBehaviorAttribute используется для операции обратного вызова, свойство ReleaseInstanceMode должно иметь значение None, или во время выполнения выводится исключение InvalidOperationException.

Доступны следующие свойства.

  • Свойство AutomaticSessionShutdown автоматически закрывает сеанс после закрытия канала и завершения обработки остающихся сообщений обратным вызовом.

  • Свойство ConcurrencyMode управляет внутренней моделью потоков, обеспечивая поддержку многопоточных объектов обратного вызова или объектов с повторными входящими вызовами.

  • Свойство IgnoreExtensionDataObject позволяет среде выполнения пропускать дополнительную информацию о сериализации, которая не требуется для обработки сообщения.

  • Свойство IncludeExceptionDetailInFaults указывает на то, выводятся ли необработанные исключения службы для целей отладки как ошибки протокола SOAP.

  • Свойство MaxItemsInObjectGraph ограничивает количество сериализуемых элементов в графе объекта.

  • Свойство TransactionIsolationLevel задает уровень изоляции транзакций, поддерживаемый контрактом.

  • Свойство TransactionTimeout задает период времени, в течение которого транзакция должна быть завершена или прервана.

  • Свойство UseSynchronizationContext указывает, нужно ли выполнять синхронизацию входящих вызовов метода автоматически с помощью текущего объекта SynchronizationContext.

  • Свойство ValidateMustUnderstand сообщает системе, должна ли она подтверждать, что заголовки SOAP, отмеченные как MustUnderstand, фактически были поняты.

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

CallbackBehaviorAttribute()

Инициализирует новый экземпляр класса CallbackBehaviorAttribute.

Свойства

AutomaticSessionShutdown

Указывает, необходимо ли автоматически закрывать сеанс при закрытии службой дуплексного сеанса.

ConcurrencyMode

Возвращает или задает поддержку службой одного потока, нескольких потоков или повторных входящих вызовов.

IgnoreExtensionDataObject

Возвращает или задает значение, которое указывает, требуется ли передавать по линии связи неизвестные данные сериализации.

IncludeExceptionDetailInFaults

Возвращает или задает значение, указывающее, что общие необработанные исключения выполнения должны преобразовываться в исключения FaultException<TDetail> типа String и передаваться в виде сообщения об ошибке. Задавайте значение true только во время разработки для устранения неполадок службы.

MaxItemsInObjectGraph

Возвращает или задает максимальное количество элементов, допустимое в сериализованном объекте.

TransactionIsolationLevel

Указывает уровень изоляции транзакции.

TransactionTimeout

Возвращает или задает период времени, в течение которого транзакция должна быть завершена.

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.

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

Возвращает или задает значение, определяющее, следует ли использовать текущий контекст синхронизации для выбора потока исполнения.

ValidateMustUnderstand

Возвращает или задает значение, определяющее, кем выполняется принудительная обработка заголовка SOAP MustUnderstand: системой или приложением.

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.

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

Возвращает хэш-код данного экземпляра.

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

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

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

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.

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

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.

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

Создает неполную копию текущего объекта Object.

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

Возвращает строку, представляющую текущий объект.

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

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

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

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

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

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.

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

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

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

Предоставляет доступ к открытым свойствам и методам объекта.

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

Настраивает элементы привязки для поддержки поведения обратного вызова.

IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint, ClientRuntime)

Настраивает среду выполнения клиента для поддержки объекта обратного вызова.

IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher)

Реализация метода ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher). Данная реализация не используется.

IEndpointBehavior.Validate(ServiceEndpoint)

Проверяет описание конечной точки до построения среды выполнения.

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