ServiceContractAttribute.CallbackContract Właściwość

Definicja

Pobiera lub ustawia typ kontraktu wywołania zwrotnego, gdy kontrakt jest kontraktem dupleksowym.

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

Wartość właściwości

Type

Element Type wskazujący kontrakt wywołania zwrotnego. Wartość domyślna to null.

Przykłady

Poniższy przykład kodu przedstawia usługę, która określa kontrakt wywołania zwrotnego, który wskazuje, że usługa typu IDuplexHello musi mieć korespondenta, który implementuje usługę typu IHelloCallbackContract. Ponadto IHelloCallbackContract implementuje jednokierunkową metodę wywołania zwrotnego, umożliwiając usłudze wywoływanie klienta bez oczekiwania na odpowiedź na obsługę rozproszonego klienta sterowanego zdarzeniami.

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

Uwagi

Określ interfejs we CallbackContract właściwości, który reprezentuje wymagany przeciwny kontrakt w dwukierunkowej (lub dwukierunkowej) wymiany komunikatów. Dzięki temu aplikacje klienckie mogą nasłuchiwać wywołań operacji przychodzących, które aplikacja usługi po stronie serwera może wysyłać niezależnie od aktywności klienta. Kontrakty wywołania zwrotnego, które mają jednokierunkowe operacje reprezentują wywołania z usługi, którą klient może obsłużyć.

Uwaga

Atrybut ServiceContractAttribute jest ignorowany w kontraktach wywołania zwrotnego. Aby skonfigurować zachowanie środowiska uruchomieniowego obiektów wywołania zwrotnego, użyj elementu System.ServiceModel.CallbackBehaviorAttribute.

Dotyczy