CallbackBehaviorAttribute Klasa

Definicja

Konfiguruje implementację usługi wywołania zwrotnego w aplikacji klienckiej.

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
Dziedziczenie
CallbackBehaviorAttribute
Atrybuty
Implementuje

Przykłady

Poniższy przykład kodu przedstawia CallbackBehaviorAttribute obiekt w obiekcie wywołania zwrotnego, który używa SynchronizationContext obiektu w celu określenia wątku do marshalingu, ValidateMustUnderstand właściwości wymuszania weryfikacji komunikatów oraz IncludeExceptionDetailInFaults właściwości zwracania wyjątków jako FaultException obiektów do usługi na potrzeby debugowania.

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

Uwagi

Użyj atrybutu CallbackBehaviorAttribute , aby skonfigurować lub rozszerzyć zachowanie wykonywania implementacji kontraktu wywołania zwrotnego w aplikacji klienckiej. Ten atrybut wykonuje tę samą funkcję dla klasy wywołania zwrotnego co ServiceBehaviorAttribute atrybut z wyjątkiem zachowania instancing i ustawień transakcji.

Należy CallbackBehaviorAttribute zastosować element do klasy, która implementuje kontrakt wywołania zwrotnego. W przypadku zastosowania do implementacji InvalidOperationException kontraktu niedupleksowego wyjątek jest zgłaszany w czasie wykonywania.

Uwaga

Można również użyć atrybutu OperationBehaviorAttribute dla implementacji operacji wywołania zwrotnego. Jeśli OperationBehaviorAttribute jednak jest używana w operacji wywołania zwrotnego, ReleaseInstanceMode właściwość musi być None lub wyjątek InvalidOperationException jest zgłaszany w czasie wykonywania.

Dostępne są następujące właściwości:

  • Właściwość AutomaticSessionShutdown automatycznie zamyka sesję po zamknięciu kanału, a wywołanie zwrotne zakończyło przetwarzanie pozostałych komunikatów.

  • Właściwość ConcurrencyMode steruje wewnętrznym modelem wątków, umożliwiając obsługę obiektów wywołania zwrotnego wielowątkowego lub wielowątkowego.

  • Właściwość IgnoreExtensionDataObject umożliwia środowisku uruchomieniowemu ignorowanie dodatkowych informacji o serializacji, które nie są wymagane do przetworzenia komunikatu.

  • Właściwość IncludeExceptionDetailInFaults określa, czy nieobsługiwane wyjątki w usłudze są zwracane do usługi jako błędy protokołu SOAP na potrzeby debugowania.

  • Właściwość MaxItemsInObjectGraph ogranicza liczbę elementów na grafie obiektu, które są serializowane.

  • Właściwość TransactionIsolationLevel określa poziom izolacji transakcji, który obsługuje kontrakt.

  • Właściwość TransactionTimeout określa okres, w którym transakcja musi zostać zakończona lub przerwana.

  • Właściwość UseSynchronizationContext wskazuje, czy synchronizować wywołania metody przychodzącej automatycznie przy użyciu bieżącego SynchronizationContext obiektu.

  • Właściwość ValidateMustUnderstand informuje system, czy powinien potwierdzić, że nagłówki protokołu SOAP oznaczone jako MustUnderstand zostały w rzeczywistości zrozumiałe.

Konstruktory

CallbackBehaviorAttribute()

Inicjuje nowe wystąpienie klasy CallbackBehaviorAttribute.

Właściwości

AutomaticSessionShutdown

Określa, czy ma być automatycznie zamykana sesja, gdy usługa zamyka sesję dwukierunkową.

ConcurrencyMode

Pobiera lub ustawia, czy usługa obsługuje jeden wątek, wiele wątków lub wywołań powtarzających.

IgnoreExtensionDataObject

Pobiera lub ustawia wartość określającą, czy wysyłać nieznane dane serializacji do przewodu.

IncludeExceptionDetailInFaults

Pobiera lub ustawia wartość określającą, że ogólne nieobsługiwane wyjątki wykonywania mają być konwertowane na FaultException<TDetail> typ String i wysyłane jako komunikat o błędzie. Ustaw tę wartość true na wartość tylko podczas programowania, aby rozwiązać problemy z usługą.

MaxItemsInObjectGraph

Pobiera lub ustawia maksymalną liczbę elementów dozwolonych w serializowanym obiekcie.

TransactionIsolationLevel

Określa poziom izolacji transakcji.

TransactionTimeout

Pobiera lub ustawia okres, w którym transakcja musi zostać ukończona.

TypeId

Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego Attributeelementu .

(Odziedziczone po Attribute)
UseSynchronizationContext

Pobiera lub ustawia wartość, która określa, czy używać bieżącego kontekstu synchronizacji do wybrania wątku wykonywania.

ValidateMustUnderstand

Pobiera lub ustawia wartość, która określa, czy system lub aplikacja wymusza przetwarzanie nagłówka protokołu SOAP MustUnderstand .

Metody

Equals(Object)

Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi.

(Odziedziczone po Attribute)
GetHashCode()

Zwraca wartość skrótu dla tego wystąpienia.

(Odziedziczone po Attribute)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
IsDefaultAttribute()

Podczas zastępowania w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną dla klasy pochodnej.

(Odziedziczone po Attribute)
Match(Object)

Po przesłonięciu w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi.

(Odziedziczone po Attribute)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Jawne implementacje interfejsu

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

Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Pobiera informacje o typie dla obiektu, który może służyć do pobierania informacji o typie dla interfejsu.

(Odziedziczone po Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1).

(Odziedziczone po Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt.

(Odziedziczone po Attribute)
IEndpointBehavior.AddBindingParameters(ServiceEndpoint, BindingParameterCollection)

Konfiguruje elementy powiązania w celu obsługi zachowania wywołania zwrotnego.

IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint, ClientRuntime)

Konfiguruje środowisko uruchomieniowe klienta do obsługi obiektu wywołania zwrotnego.

IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher)

Implementacja ApplyDispatchBehavior(ServiceEndpoint, EndpointDispatcher) metody . Ta implementacja nie ma wpływu.

IEndpointBehavior.Validate(ServiceEndpoint)

Sprawdza poprawność opisu punktu końcowego przed utworzeniem środowiska uruchomieniowego.

Dotyczy