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
}

注解

在某些情况下,绑定使用同步 ReceiveRequest 方法处理消息可能更加有效。 Binding 类可以选择实现 IBindingRuntimePreferences,从而指示调用方这是优先选择。

如果绑定未实现 IBindingRuntimePreferences,则 Windows Communication Foundation (WCF) 服务模型运行时层默认使用 和 Request 方法的Receive异步版本。 如果绑定确实实现了 IBindingRuntimePreferences,则 WCF 服务模型运行时层会检查 的值 ReceiveSynchronously ,并使用该值确定是否调用这些方法的同步版本 (ReceiveRequest) 或异步版本 (BeginReceiveEndReceive(IAsyncResult)BeginRequestEndRequest(IAsyncResult) 和) 。 如果绑定实现 IBindingRuntimePreferences 并从 true 属性返回 ReceiveSynchronously,则建议使用同步的 ReceiveRequest 方法从通道接收消息。 如果绑定不实现 IBindingRuntimePreferences,或从 false 属性返回 ReceiveSynchronously,则建议使用异步的 BeginReceiveEndReceive(IAsyncResult)BeginRequestEndRequest(IAsyncResult) 方法。

无论 ReceiveSynchronously 属性返回什么值,所有绑定仍然必须为所实现的特定通道类型提供 Receive 方法同步版本和异步版本的有效实现。 有关实现自定义通道的详细信息,请参阅 开发通道

属性

ReceiveSynchronously

获取一个值,该值指示传入请求是由同步处理更加有效还是异步处理更加有效。

适用于