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


IBindingRuntimePreferences Интерфейс

Определение

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

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

Примеры

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

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) по умолчанию использует асинхронные Receive версии методов и Request . Если привязка реализует IBindingRuntimePreferences, уровень среды выполнения модели службы WCF проверяет значение ReceiveSynchronously и использует его для определения того, следует ли вызывать синхронные версии этих методов (Receive или Request) или асинхронные версии (BeginReceive и EndReceive(IAsyncResult) или BeginRequest и ).EndRequest(IAsyncResult) Если в привязке реализован класс IBindingRuntimePreferences и его свойство true возвращает значение ReceiveSynchronously, рекомендуется использовать синхронные методы Receive и Request для получения сообщений из этого канала. Если класс IBindingRuntimePreferences не реализован в привязке или его свойство false возвращает значение ReceiveSynchronously, рекомендуется использовать методы BeginReceive и EndReceive(IAsyncResult) или BeginRequest и EndRequest(IAsyncResult).

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

Свойства

ReceiveSynchronously

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

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