Freigeben über


ServiceContractAttribute.CallbackContract Eigenschaft

Definition

Ruft den Typ des Rückrufvertrags ab oder legt ihn fest, wenn es sich beim Vertrag um einen Duplexvertrag handelt.

public:
 property Type ^ CallbackContract { Type ^ get(); void set(Type ^ value); };
public Type CallbackContract { get; set; }
member this.CallbackContract : Type with get, set
Public Property CallbackContract As Type

Eigenschaftswert

Type

Ein Type, der den Rückrufvertrag angibt. Der Standardwert ist null.

Beispiele

Im folgenden Codebeispiel wird ein Dienst gezeigt, der einen Rückrufvertrag angibt, der angibt, dass ein Dienst eines Typs IDuplexHello über einen Korrespondent verfügen muss, der einen Dienst des Typs IHelloCallbackContractimplementiert. Implementiert außerdem IHelloCallbackContract eine one-Way-Rückrufmethode, mit der der Dienst den Client aufrufen kann, ohne auf eine Antwort zu warten, um einen verteilten, ereignisgesteuerten Client zu unterstützen.

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;

namespace Microsoft.WCF.Documentation
{
  [ServiceContract(
    Name = "SampleDuplexHello",
    Namespace = "http://microsoft.wcf.documentation",
    CallbackContract = typeof(IHelloCallbackContract),
    SessionMode = SessionMode.Required
  )]
  public interface IDuplexHello
  {
    [OperationContract(IsOneWay = true)]
    void Hello(string greeting);
  }

  public interface IHelloCallbackContract
  {
    [OperationContract(IsOneWay = true)]
    void Reply(string responseToGreeting);
  }

  public class DuplexHello : IDuplexHello
  {
    public DuplexHello()
    {
      Console.WriteLine("Service object created: " + this.GetHashCode().ToString());
    }

    ~DuplexHello()
    {
      Console.WriteLine("Service object destroyed: " + this.GetHashCode().ToString());
    }

    public void Hello(string greeting)
    {
      Console.WriteLine("Caller sent: " + greeting);
      Console.WriteLine("Session ID: " + OperationContext.Current.SessionId);
      Console.WriteLine("Waiting two seconds before returning call.");
      // Put a slight delay to demonstrate asynchronous behavior on client.
      Thread.Sleep(2000);
      IHelloCallbackContract callerProxy
        = OperationContext.Current.GetCallbackChannel<IHelloCallbackContract>();
      string response = "Service object " + this.GetHashCode().ToString() + " received: " + greeting;
      Console.WriteLine("Sending back: " + response);
      callerProxy.Reply(response);
    }
  }
}


Imports System.Collections.Generic
Imports System.ServiceModel
Imports System.Threading

Namespace Microsoft.WCF.Documentation
    <ServiceContract(Name:="SampleDuplexHello", Namespace:="http://microsoft.wcf.documentation", _
                     CallbackContract:=GetType(IHelloCallbackContract), SessionMode:=SessionMode.Required)> _
  Public Interface IDuplexHello
        <OperationContract(IsOneWay:=True)> _
        Sub Hello(ByVal greeting As String)
    End Interface

  Public Interface IHelloCallbackContract
    <OperationContract(IsOneWay := True)> _
    Sub Reply(ByVal responseToGreeting As String)
  End Interface

  Public Class DuplexHello
      Implements IDuplexHello
    Public Sub New()
      Console.WriteLine("Service object created: " & Me.GetHashCode().ToString())
    End Sub

    Protected Overrides Sub Finalize()
      Console.WriteLine("Service object destroyed: " & Me.GetHashCode().ToString())
    End Sub

    Public Sub Hello(ByVal greeting As String) Implements IDuplexHello.Hello
      Console.WriteLine("Caller sent: " & greeting)
      Console.WriteLine("Session ID: " & OperationContext.Current.SessionId)
      Console.WriteLine("Waiting two seconds before returning call.")
      ' Put a slight delay to demonstrate asynchronous behavior on client.
      Thread.Sleep(2000)
            Dim callerProxy = OperationContext.Current.GetCallbackChannel(Of IHelloCallbackContract)()
            Dim response = "Service object " & Me.GetHashCode().ToString() & " received: " & greeting
      Console.WriteLine("Sending back: " & response)
      callerProxy.Reply(response)
    End Sub
  End Class
End Namespace

Hinweise

Geben Sie eine Schnittstelle in der CallbackContract Eigenschaft an, die den erforderlichen entgegengesetzten Vertrag in einem Zwei-Wege-Nachrichtenaustausch (oder Duplex)-Nachrichtenaustausch darstellt. Dies ermöglicht es Clientanwendungen, auf eingehende Vorgangsaufrufe zu überwachen, die die Dienstanwendung der Serverseite unabhängig von der Clientaktivität senden kann. Rückrufverträge mit unidirektionalen Vorgängen repräsentieren Aufrufe vom Dienst, die der Client verarbeiten kann.

Hinweis

Das ServiceContractAttribute Attribut wird bei Rückrufverträgen ignoriert. Um das Laufzeitverhalten von Rückrufobjekten zu konfigurieren, verwenden Sie die System.ServiceModel.CallbackBehaviorAttribute.

Gilt für