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, ovvero testo, binaria e MTOM (Message Transmission Optimization Mechanism).

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

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

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

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

  • TextMessageEncodingBindingElement: il codificatore più interoperativo, ma il meno efficiente, per i messaggi XML. In genere un servizio Web o un client di servizio Web è in grado di comprendere codice XML in formato testo. La trasmissione di grandi blocchi di dati binari in formato testo non è tuttavia 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 binari. Tra le opzioni di codifica questa è la più efficiente ma la meno interoperativa.

  • 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 di WCF. Il codificatore MTOM tenta di trovare un equilibrio tra efficienza e interoperabilità. La codifica MTOM trasmette la maggior parte del codice XML in formato testo, ma ottimizza grandi blocchi di dati binari trasmettendoli senza introdurre modifiche e senza convertirli in formato testo.

Costruttori

MessageEncodingBindingElement()

Inizializza una nuova istanza della classe MessageEncodingBindingElement.

MessageEncodingBindingElement(MessageEncodingBindingElement)

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

Proprietà

MessageVersion

Quando sottoposto a override in una classe derivata, ottiene o imposta la versione del messaggio che può essere gestita dai codificatori di messaggi generati dalla factory di codificatori di messaggi.

Metodi

BuildChannelFactory<TChannel>(BindingContext)

Inizializza una channel factory per la creazione di canali di un tipo specificato dal contesto dell'associazione.

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

Inizializza un listener del canale per accettare canali di un tipo specificato dal contesto dell'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 di canale specifico.

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

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

(Ereditato da BindingElement)
Clone()

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

(Ereditato da BindingElement)
CreateMessageEncoderFactory()

Quando viene sottoposto a override in una classe derivata, crea una factory per la generazione 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 disponibile, dal livello appropriato nello stack dei canali.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a