Compartir vía


IBindingRuntimePreferences Interfaz

Definición

Define el contrato opcional que un enlace puede implementar para especificar si el servicio administra de forma asincrónica o asincrónica las solicitudes entrantes.

public interface class IBindingRuntimePreferences
public interface IBindingRuntimePreferences
type IBindingRuntimePreferences = interface
Public Interface IBindingRuntimePreferences
Derivado

Ejemplos

El ejemplo siguiente muestra la implementación de un enlace que implementa la interfaz IBindingRuntimePreferences. Este código se toma del ejemplo de canal de fragmentación :

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
}

Comentarios

Puede ser más eficaz para un enlace procesar los mensajes con los métodos sincrónicos Receive o Request en algunos casos. Una clase Binding puede implementar opcionalmente IBindingRuntimePreferences para indicar a los llamadores que se prefiere esto.

Si un enlace no implementa IBindingRuntimePreferences, el nivel de tiempo de ejecución del modelo de servicio de Windows Communication Foundation (WCF) usa de forma predeterminada las versiones asincrónicas de los Receive métodos y Request . Si un enlace implementa IBindingRuntimePreferences, el nivel de tiempo de ejecución del modelo de servicio WCF comprueba el valor de ReceiveSynchronously y usa para determinar si se deben llamar a las versiones sincrónicas de estos métodos (Receive o Request) o las versiones asincrónicas (BeginReceive y EndReceive(IAsyncResult) o BeginRequest y EndRequest(IAsyncResult)). Si IBindingRuntimePreferences es implementado por el enlace y devuelve true desde la propiedad ReceiveSynchronously, se recomienda que utilice los métodos sincrónicos Receive y Request para recibir los mensajes del canal. Si el enlace no implementa IBindingRuntimePreferences ni devuelve false desde la propiedad ReceiveSynchronously, se recomienda que utilice los métodos asincrónicos BeginReceive y EndReceive(IAsyncResult) o BeginRequest y EndRequest(IAsyncResult).

Sin tener en cuenta el valor devuelto por la propiedad ReceiveSynchronously, todos los enlaces deben proporcionar implementaciones válidas de la versión sincrónica y de la asincrónica de los métodos Receive para los tipos de canal concretos implementados. Para obtener más información sobre la implementación de canales personalizados, consulte Desarrollo de canales.

Propiedades

ReceiveSynchronously

Obtiene un valor que indica si se pueden administrar más eficazmente las solicitudes entrantes de forma sincrónica o asincrónica.

Se aplica a