Condividi tramite


IBindingRuntimePreferences Interfaccia

Definizione

Definisce il contratto facoltativo che un'associazione può implementare per specificare se le richieste in entrata sono gestite in modo sincrono o asincrono dal servizio.

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

Esempio

Nell'esempio seguente viene illustrata l'implementazione di un'associazione che implementa l'interfaccia IBindingRuntimePreferences. Questo codice è tratto dall'esempio del canale di suddivisione in blocchi :

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
}

Commenti

In alcuni casi può essere più efficiente per un'associazione elaborare i messaggi con i metodi sincroni Receive o Request. Una classe Binding può implementare facoltativamente IBindingRuntimePreferences per indicare ai chiamanti che questo è il metodo preferito.

Se un'associazione non implementa IBindingRuntimePreferences, per impostazione predefinita il livello Runtime del modello di servizio Windows Communication Foundation (WCF) usa le versioni asincrone dei Receive metodi e Request . Se un'associazione implementa IBindingRuntimePreferences, il livello runtime del modello di servizio WCF controlla il valore di ReceiveSynchronously e lo usa per determinare se chiamare le versioni sincrone di questi metodi (Receive o Request) o le versioni asincrone (BeginReceive e EndReceive(IAsyncResult) o BeginRequest e EndRequest(IAsyncResult)). Se IBindingRuntimePreferences viene implementato dall'associazione e restituisce true dalla proprietà ReceiveSynchronously, è consigliabile utilizzare i metodi sincroni Receive e Request per ricevere messaggi dal canale. Se l'associazione non implementa IBindingRuntimePreferences o restituisce false dalla proprietà ReceiveSynchronously, è consigliabile utilizzare i metodi asincroni BeginReceive e EndReceive(IAsyncResult) o BeginRequest e EndRequest(IAsyncResult).

Indipendentemente dal valore restituito dalla proprietà ReceiveSynchronously, tutte le associazioni devono fornire comunque implementazioni valide di entrambe le versioni sincrone e asincrone dei metodi Receive, per i tipi di canale specifici implementati. Per altre informazioni sull'implementazione di canali personalizzati, vedere Sviluppo di canali.

Proprietà

ReceiveSynchronously

Ottiene un valore che indica se le richieste in entrata possono essere gestite più efficientemente in modo sincrono o in modo asincrono.

Si applica a