Поделиться через


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

Возвращает или задает значение, указывающее, что общие необработанные исключения выполнения должны быть преобразованы в тип String и отправлены в FaultException<TDetail> виде сообщения об ошибке. Установите это значение 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)

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

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