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 для объекта обратного вызова, в котором используются: объект 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 и передаваться в виде сообщения об ошибке. Задавайте значение |
MaxItemsInObjectGraph |
Возвращает или задает максимальное количество элементов, допустимое в сериализованном объекте. |
TransactionIsolationLevel |
Указывает уровень изоляции транзакции. |
TransactionTimeout |
Возвращает или задает период времени, в течение которого транзакция должна быть завершена. |
TypeId |
В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute. (Унаследовано от Attribute) |
UseSynchronizationContext |
Возвращает или задает значение, определяющее, следует ли использовать текущий контекст синхронизации для выбора потока исполнения. |
ValidateMustUnderstand |
Возвращает или задает значение, определяющее, кем выполняется принудительная обработка заголовка SOAP |
Методы
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) |
Проверяет описание конечной точки до построения среды выполнения. |