Aracılığıyla paylaş


ServiceContractAttribute.CallbackContract Özellik

Tanım

Sözleşme çift yönlü bir sözleşme olduğunda geri çağırma sözleşmesinin türünü alır veya ayarlar.

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

Özellik Değeri

Type

Type Geri çağırma sözleşmesini gösteren bir. Varsayılan değer: null.

Örnekler

Aşağıdaki kod örneği, türündeki bir hizmetin IDuplexHello türünde bir hizmet uygulayan bir karşılık gelene sahip olması gerektiğini belirten bir geri çağırma sözleşmesi belirten bir hizmeti IHelloCallbackContractgösterir. Ayrıca, dağıtılmış, IHelloCallbackContract olay odaklı bir istemciyi desteklemek için yanıt beklemeden hizmetin istemciyi çağırmasını sağlayan tek yönlü bir geri çağırma yöntemi uygular.

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

Açıklamalar

özelliğinde CallbackContract , iki yönlü (veya çift yönlü) ileti değişiminde gerekli karşıt sözleşmeyi temsil eden bir arabirim belirtin. Bu, istemci uygulamalarının sunucu tarafı hizmet uygulamasının istemci etkinliğinden bağımsız olarak gönderebileceği gelen işlem çağrılarını dinlemesini sağlar. Tek yönlü işlemleri olan geri çağırma sözleşmeleri, istemcinin işleyebileceği hizmet çağrılarını temsil edebilir.

Not

Geri ServiceContractAttribute çağırma sözleşmelerinde özniteliği yoksayılır. Geri çağırma nesnelerinin çalışma zamanı davranışını yapılandırmak için kullanın System.ServiceModel.CallbackBehaviorAttribute.

Şunlara uygulanır