Поделиться через


IBindingRuntimePreferences Интерфейс

Определение

Определяет необязательный контракт, который может реализовать привязка, чтобы указать, обрабатываются ли входящие запросы синхронно или асинхронно службой.

public interface class IBindingRuntimePreferences
public interface IBindingRuntimePreferences
type IBindingRuntimePreferences = interface
Public Interface IBindingRuntimePreferences
Производный

Примеры

В следующем примере показана реализация привязки, реализующей IBindingRuntimePreferences интерфейс. Этот код взят из примера канала Chunking Channel :

public class TcpChunkingBinding : Binding, IBindingRuntimePreferences
{
    TcpTransportBindingElement tcpbe;
    ChunkingBindingElement be;
    public TcpChunkingBinding()
        : base()
    {
        Initialize();
    }
    public TcpChunkingBinding(string name, string ns)
        : base(name, ns)
    {
        Initialize();
    }
    public override BindingElementCollection CreateBindingElements()
    {
        BindingElementCollection col = new BindingElementCollection();
        col.Add(be);
        col.Add(tcpbe);
        return col;
    }

    public override string Scheme
    {
        get { return tcpbe.Scheme;  }
    }
    public int MaxBufferedChunks
    {
        get { return this.be.MaxBufferedChunks; }
        set { this.be.MaxBufferedChunks = value; }
    }

    void Initialize()
    {
         be = new ChunkingBindingElement();
         tcpbe = new TcpTransportBindingElement();
        tcpbe.TransferMode=TransferMode.Buffered; //no transport streaming
        tcpbe.MaxReceivedMessageSize = ChunkingUtils.ChunkSize + 100 * 1024; //add 100KB for headers
         this.SendTimeout = new TimeSpan(0, 5, 0);
         this.ReceiveTimeout = this.SendTimeout;
    }

    #region IBindingRuntimePreferences Members
    public bool ReceiveSynchronously
    {
        get { return true; }
    }
    #endregion
}

Комментарии

В некоторых случаях привязка может быть более эффективной для обработки сообщений с синхронными Receive или Request методами. Класс Binding может при необходимости реализовать IBindingRuntimePreferences , чтобы указать вызывающим абонентам, что это предпочтительнее.

Если привязка не реализуетсяIBindingRuntimePreferences, уровень среды выполнения модели службы Windows Communication Foundation (WCF) по умолчанию использует асинхронные версии и Request методыReceive. Если привязка реализуетсяIBindingRuntimePreferences, уровень среды выполнения модели WCF проверяет значение ReceiveSynchronously и использует его для определения того, следует ли вызывать синхронные версии этих методов (Receiveили) или Requestасинхронные версии (BeginReceiveи или EndReceive(IAsyncResult)BeginRequest).EndRequest(IAsyncResult) Если IBindingRuntimePreferences привязка реализуется и возвращается true из ReceiveSynchronously свойства, рекомендуется использовать синхронные Receive и Request методы для получения сообщений из канала. Если привязка не реализует IBindingRuntimePreferences или не возвращается false из ReceiveSynchronously свойства, рекомендуется использовать асинхронные BeginReceive и EndReceive(IAsyncResult) методы.BeginRequestEndRequest(IAsyncResult)

Независимо от значения, возвращаемого свойством ReceiveSynchronously , все привязки по-прежнему должны предоставлять допустимые реализации синхронных и асинхронных версий Receive методов для определенных типов каналов. Дополнительные сведения о реализации пользовательских каналов см. в разделе "Разработка каналов".

Свойства

Имя Описание
ReceiveSynchronously

Возвращает значение, указывающее, можно ли обрабатывать входящие запросы более эффективно синхронно или асинхронно.

Применяется к