Condividi tramite


MessageEncodingBindingElement Classe

Definizione

Elemento di associazione che specifica la versione del messaggio utilizzata per codificare i messaggi.

public ref class MessageEncodingBindingElement abstract : System::ServiceModel::Channels::BindingElement
public abstract class MessageEncodingBindingElement : System.ServiceModel.Channels.BindingElement
type MessageEncodingBindingElement = class
    inherit BindingElement
Public MustInherit Class MessageEncodingBindingElement
Inherits BindingElement
Ereditarietà
MessageEncodingBindingElement
Derivato

Esempio

Nell'esempio di codice seguente viene illustrato come implementare una classe derivata da MessageEncodingBindingElement:

public class CustomTextMessageBindingElement : MessageEncodingBindingElement, IWsdlExportExtension
{
    private MessageVersion msgVersion;
    private string mediaType;
    private string encoding;
    private XmlDictionaryReaderQuotas readerQuotas;

    CustomTextMessageBindingElement(CustomTextMessageBindingElement binding)
        : this(binding.Encoding, binding.MediaType, binding.MessageVersion)
    {
        this.readerQuotas = new XmlDictionaryReaderQuotas();
        binding.ReaderQuotas.CopyTo(this.readerQuotas);
    }

    public CustomTextMessageBindingElement(string encoding, string mediaType,
        MessageVersion msgVersion)
    {
        if (encoding == null)
            throw new ArgumentNullException(nameof(encoding));

        if (mediaType == null)
            throw new ArgumentNullException(nameof(mediaType));

        if (msgVersion == null)
            throw new ArgumentNullException(nameof(msgVersion));

        this.msgVersion = msgVersion;
        this.mediaType = mediaType;
        this.encoding = encoding;
        this.readerQuotas = new XmlDictionaryReaderQuotas();
    }

    public CustomTextMessageBindingElement(string encoding, string mediaType)
        : this(encoding, mediaType, MessageVersion.Soap11WSAddressing10)
    {
    }

    public CustomTextMessageBindingElement(string encoding)
        : this(encoding, "text/xml")
    {
    }

    public CustomTextMessageBindingElement()
        : this("UTF-8")
    {
    }

    public override MessageVersion MessageVersion
    {
        get
        {
            return this.msgVersion;
        }

        set
        {
            if (value == null)
                throw new ArgumentNullException(nameof(value));
            this.msgVersion = value;
        }
    }

    public string MediaType
    {
        get
        {
            return this.mediaType;
        }

        set
        {
            if (value == null)
                throw new ArgumentNullException(nameof(value));
            this.mediaType = value;
        }
    }

    public string Encoding
    {
        get
        {
            return this.encoding;
        }

        set
        {
            if (value == null)
                throw new ArgumentNullException(nameof(value));
            this.encoding = value;
        }
    }

    // This encoder does not enforces any quotas for the unsecure messages. The
    // quotas are enforced for the secure portions of messages when this encoder
    // is used in a binding that is configured with security.
    public XmlDictionaryReaderQuotas ReaderQuotas
    {
        get
        {
            return this.readerQuotas;
        }
    }

    #region IMessageEncodingBindingElement Members
    public override MessageEncoderFactory CreateMessageEncoderFactory()
    {
        return new CustomTextMessageEncoderFactory(this.MediaType,
            this.Encoding, this.MessageVersion);
    }

    #endregion

    public override BindingElement Clone()
    {
        return new CustomTextMessageBindingElement(this);
    }

    public override IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)
    {
        if (context == null)
            throw new ArgumentNullException(nameof(context));

        context.BindingParameters.Add(this);
        return context.BuildInnerChannelFactory<TChannel>();
    }

    public override bool CanBuildChannelFactory<TChannel>(BindingContext context)
    {
        if (context == null)
            throw new ArgumentNullException(nameof(context));

        return context.CanBuildInnerChannelFactory<TChannel>();
    }

    public override IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)
    {
        if (context == null)
            throw new ArgumentNullException(nameof(context));

        context.BindingParameters.Add(this);
        return context.BuildInnerChannelListener<TChannel>();
    }

    public override bool CanBuildChannelListener<TChannel>(BindingContext context)
    {
        if (context == null)
            throw new ArgumentNullException(nameof(context));

        context.BindingParameters.Add(this);
        return context.CanBuildInnerChannelListener<TChannel>();
    }

    public override T GetProperty<T>(BindingContext context)
    {
        if (typeof(T) == typeof(XmlDictionaryReaderQuotas))
        {
            return (T)(object)this.readerQuotas;
        }
        else
        {
            return base.GetProperty<T>(context);
        }
    }

    #region IWsdlExportExtension Members

    void IWsdlExportExtension.ExportContract(WsdlExporter exporter, WsdlContractConversionContext context)
    {
    }

    void IWsdlExportExtension.ExportEndpoint(WsdlExporter exporter, WsdlEndpointConversionContext context)
    {
        // The MessageEncodingBindingElement is responsible for ensuring that the WSDL has the correct
        // SOAP version. We can delegate to the WCF implementation of TextMessageEncodingBindingElement for this.
        TextMessageEncodingBindingElement mebe = new TextMessageEncodingBindingElement();
        mebe.MessageVersion = this.msgVersion;
        ((IWsdlExportExtension)mebe).ExportEndpoint(exporter, context);
    }

    #endregion
}

Commenti

La codifica è il processo di trasformazione di un messaggio in una sequenza di byte. La decodifica è il processo inverso. Windows Communication Foundation (WCF) include tre tipi di codifica per i messaggi SOAP: Text, Binary and Message Transmission Optimization Mechanism (MTOM).

Usare questa classe se si vuole implementare un codificatore di messaggi personalizzato. Per implementare un codificatore di messaggi personalizzato, è necessario fornire implementazioni personalizzate delle tre classi di base astratte seguenti:

Esegui l'override di Encoder per restituire un'istanza del tuo MessageEncoder personalizzato. Eseguire l'override del CreateMessageEncoderFactory metodo per restituire un'istanza di questa factory.

Qualsiasi tipo che deriva da MessageEncodingBindingElement è responsabile dell'aggiornamento della versione dell'associazione SOAP nel documento WSDL generato per il servizio. Questa operazione viene eseguita implementando il ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) metodo per modificare il file WSDL generato.

Windows Communication Foundation (WCF) fornisce tre tipi di elementi di associazione derivati dalla MessageEncodingBindingElement classe che possono fornire la codifica MTOM (Text, Binary And Message Transmission Optimization Mechanism).

  • TextMessageEncodingBindingElement: il codificatore più interoperabile, ma il codificatore meno efficiente per i messaggi XML. Un servizio Web o un client del servizio Web può in genere comprendere il codice XML testuale. Tuttavia, la trasmissione di grandi blocchi di dati binari come testo non è efficiente.

  • BinaryMessageEncodingBindingElement: rappresenta l'elemento di associazione che specifica la codifica dei caratteri e il controllo delle versioni dei messaggi utilizzati per i messaggi XML basati su binario. Questa opzione è più efficiente ma meno interoperabile delle opzioni di codifica.

  • MtomMessageEncodingBindingElement: rappresenta l'elemento di associazione che specifica la codifica dei caratteri e il controllo delle versioni dei messaggi utilizzati per un messaggio tramite una codifica MTOM (Message Transmission Optimization Mechanism). MTOM è una tecnologia efficiente per la trasmissione di dati binari nei messaggi WCF. Il codificatore MTOM tenta di bilanciare l'efficienza e l'interoperabilità. La codifica MTOM trasmette la maggior parte dei dati XML in formato testuale, ma ottimizza grandi blocchi di dati binari trasmettendoli as-is, senza conversione in testo.

Costruttori

Nome Descrizione
MessageEncodingBindingElement()

Inizializza una nuova istanza della classe MessageEncodingBindingElement.

MessageEncodingBindingElement(MessageEncodingBindingElement)

Inizializza una nuova istanza della MessageEncodingBindingElement classe inizializzata da un elemento esistente.

Proprietà

Nome Descrizione
MessageVersion

In caso di override in una classe derivata, ottiene o imposta la versione del messaggio che può essere gestita dai codificatori di messaggi prodotti dalla factory del codificatore di messaggi.

Metodi

Nome Descrizione
BuildChannelFactory<TChannel>(BindingContext)

Inizializza una channel factory per la produzione di canali di un tipo specificato dal contesto di associazione.

(Ereditato da BindingElement)
BuildChannelListener<TChannel>(BindingContext)

Inizializza un listener del canale per accettare canali di un tipo specificato dal contesto di associazione.

(Ereditato da BindingElement)
CanBuildChannelFactory<TChannel>(BindingContext)

Restituisce un valore che indica se l'elemento di associazione può compilare una channel factory per un tipo specifico di canale.

(Ereditato da BindingElement)
CanBuildChannelListener<TChannel>(BindingContext)

Restituisce un valore che indica se l'elemento di associazione può compilare un listener per un tipo specifico di canale.

(Ereditato da BindingElement)
Clone()

Quando sottoposto a override in una classe derivata, restituisce una copia dell'oggetto elemento di associazione.

(Ereditato da BindingElement)
CreateMessageEncoderFactory()

Quando sottoposto a override in una classe derivata, crea una factory per la produzione di codificatori di messaggi.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetProperty<T>(BindingContext)

Restituisce l'oggetto tipizzato richiesto, se presente, dal livello appropriato nello stack di canali.

GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a