MessageEncodingBindingElement Classe

Definizione

Elemento di associazione che specifica la versione del messaggio utilizzata per codificare i messaggi.The binding element that specifies the message version used to encode messages.

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:The following code example shows how to implement a class derived from 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.Encoding is the process of transforming a message into a sequence of bytes. La decodifica è il processo inverso.Decoding is the reverse process. Windows Communication Foundation (WCF) include tre tipi di codifica per i messaggi SOAP, ovvero testo, binaria e MTOM (Message Transmission Optimization Mechanism).Windows Communication Foundation (WCF) includes three types of encoding for SOAP messages: Text, Binary and Message Transmission Optimization Mechanism (MTOM).

Utilizzare questa classe se si desidera implementare un codificatore di messaggi personalizzato.Use this class if you want to implement a custom message encoder. Per implementare un codificatore di messaggi personalizzato, è necessario fornire implementazioni personalizzate delle tre classi base astratte seguenti:To implement your own custom message encoder, you must provide custom implementations of the following three abstract base classes:

Eseguire l'override di Encoder per restituire un'istanza del codificatore MessageEncoder personalizzato.Override the Encoder to return an instance of your custom MessageEncoder. Eseguire l'override del metodo CreateMessageEncoderFactory per restituire un'istanza di questa factory.Override the CreateMessageEncoderFactory method to return an instance of this factory.

Qualsiasi tipo che deriva da MessageEncodingBindingElement deve eseguire l'aggiornamento della versione dell'associazione SOAP nel documento WSDL generato per il servizio.Any type that derives from MessageEncodingBindingElement is responsible for updating the version of the SOAP binding in the WSDL document generated for the service. Questa operazione viene eseguita implementando il metodo ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) per modificare il documento WSDL generato.This is done by implementing the ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) method to modify the generated WSDL.

Windows Communication Foundation (WCF) fornisce tre tipi di elementi di associazione derivati dalla MessageEncodingBindingElement classe che può fornire per la codifica di testo, binaria e MTOM (Message Transmission Optimization Mechanism).Windows Communication Foundation (WCF) provides three types of binding elements derived from the MessageEncodingBindingElement class that can provide for text, binary and Message Transmission Optimization Mechanism (MTOM) encoding.

  • TextMessageEncodingBindingElement: il codificatore più interoperativo, ma il meno efficiente, per i messaggi XML.TextMessageEncodingBindingElement: the most interoperable, but the least efficient encoder for XML messages. In genere un servizio Web o un client di servizio Web è in grado di comprendere codice XML in formato testo.A Web service or Web service client can generally understand textual XML. La trasmissione di grandi blocchi di dati binari in formato testo non è tuttavia efficiente.However, transmitting large blocks of binary data as text is not efficient.

  • BinaryMessageEncodingBindingElement: rappresenta l'elemento di associazione che specifica la codifica dei caratteri e la versione dei messaggi utilizzati per i messaggi XML basati su binari.BinaryMessageEncodingBindingElement: represents the binding element that specifies the character encoding and message versioning used for binary-based XML messages. Tra le opzioni di codifica questa è la più efficiente ma la meno interoperativa.This is most efficient but least interoperable of the encoding options.

  • MtomMessageEncodingBindingElement: rappresenta l'elemento di associazione che specifica la codifica dei caratteri e la versione dei messaggi utilizzati per un messaggio utilizzando una codifica Message Transmission Optimization Mechanism (MTOM).MtomMessageEncodingBindingElement: represents the binding element that specifies the character encoding and message versioning used for a message using a Message Transmission Optimization Mechanism (MTOM) encoding. MTOM è una tecnologia efficiente per la trasmissione di dati binari nei messaggi di WCF.MTOM is an efficient technology for transmitting binary data in WCF messages. Il codificatore MTOM tenta di trovare un equilibrio tra efficienza e interoperabilità.The MTOM encoder attempts to balance efficiency and interoperability. 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.The MTOM encoding transmits most XML in textual form, but optimizes large blocks of binary data by transmitting them as-is, without conversion to text.

Costruttori

MessageEncodingBindingElement()

Inizializza una nuova istanza della classe MessageEncodingBindingElement.Initializes a new instance of the MessageEncodingBindingElement class.

MessageEncodingBindingElement(MessageEncodingBindingElement)

Inizializza una nuova istanza della classe MessageEncodingBindingElement inizializzata da un elemento esistente.Initializes a new instance of the MessageEncodingBindingElement class initialized from an existing element.

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.When overridden in a derived class, gets or sets the message version that can be handled by the message encoders produced by the message encoder factory.

Metodi

BuildChannelFactory<TChannel>(BindingContext)

Inizializza una channel factory per la creazione di canali di un tipo specificato dal contesto dell'associazione.Initializes a channel factory for producing channels of a specified type from the binding context.

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

Inizializza un listener del canale per accettare canali di un tipo specificato dal contesto dell'associazione.Initializes a channel listener to accept channels of a specified type from the binding context.

(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.Returns a value that indicates whether the binding element can build a channel factory for a specific type of channel.

(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.Returns a value that indicates whether the binding element can build a listener for a specific type of channel.

(Ereditato da BindingElement)
Clone()

Quando sottoposto a override in una classe derivata, restituisce una copia dell'oggetto dell'elemento di associazione.When overridden in a derived class, returns a copy of the binding element object.

(Ereditato da BindingElement)
CreateMessageEncoderFactory()

Quando viene sottoposto a override in una classe derivata, crea una factory per la generazione di codificatori di messaggi.When overridden in a derived class, creates a factory for producing message encoders.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

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

Restituisce l'oggetto tipizzato richiesto, se disponibile, dal livello appropriato nello stack dei canali.Returns the typed object requested, if present, from the appropriate layer in the channel stack.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)

Si applica a