Share via


MessageEncodingBindingElement Třída

Definice

Element vazby, který určuje verzi zprávy použité ke kódování zpráv.

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
Dědičnost
MessageEncodingBindingElement
Odvozené

Příklady

Následující příklad kódu ukazuje, jak implementovat třídu odvozenou z 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
}

Poznámky

Kódování je proces transformace zprávy na sekvenci bajtů. Dekódování je opačný proces. Windows Communication Foundation (WCF) obsahuje tři typy kódování zpráv SOAP: Text, Binary a Message Transmission Optimization Mechanism (MTOM).

Tuto třídu použijte, pokud chcete implementovat vlastní kodér zpráv. Pokud chcete implementovat vlastní kodér zpráv, musíte poskytnout vlastní implementace následujících tří abstraktních základních tříd:

Přepište, Encoder aby se vrátila instance vlastního MessageEncoderobjektu . Přepište metodu CreateMessageEncoderFactory pro vrácení instance této továrny.

Jakýkoli typ, který je odvozen z MessageEncodingBindingElement , je zodpovědný za aktualizaci verze vazby SOAP v dokumentu WSDL vygenerovaném pro službu. To se provádí implementací ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) metody pro úpravu vygenerovaného WSDL.

Windows Communication Foundation (WCF) poskytuje tři typy vazeb elementů odvozených z MessageEncodingBindingElement třídy, které mohou poskytovat kódování textu, binárního kódu a mechanismu optimalizace přenosu zpráv (MTOM).

  • TextMessageEncodingBindingElement: nejvíce interoperabilní, ale nejméně efektivní kodér pro zprávy XML. Webová služba nebo klient webové služby obecně rozumí textovému kódu XML. Přenos velkých bloků binárních dat jako textu však není efektivní.

  • BinaryMessageEncodingBindingElement: představuje element vazby, který určuje kódování znaků a správu verzí zpráv používaných pro binární zprávy XML. To je nejúčinnější, ale nejméně interoperabilní z možností kódování.

  • MtomMessageEncodingBindingElement: představuje element vazby, který určuje kódování znaků a správu verzí zpráv používané pro zprávu pomocí mechanismu MTOM (Message Transmission Optimization Mechanism). MTOM je efektivní technologie pro přenos binárních dat ve zprávách WCF. Kodér MTOM se snaží vyvážit efektivitu a interoperabilitu. Kódování MTOM přenáší většinu XML v textové podobě, ale optimalizuje velké bloky binárních dat tím, že je přenáší tak, jak jsou, bez převodu na text.

Konstruktory

MessageEncodingBindingElement()

Inicializuje novou instanci MessageEncodingBindingElement třídy.

MessageEncodingBindingElement(MessageEncodingBindingElement)

Inicializuje novou instanci MessageEncodingBindingElement třídy inicializované z existujícího elementu.

Vlastnosti

MessageVersion

Při přepsání v odvozené třídě získá nebo nastaví verzi zprávy, která může být zpracována kodéry zpráv vytvořené továrnou kodéru zpráv.

Metody

BuildChannelFactory<TChannel>(BindingContext)

Inicializuje objekt pro vytváření kanálů zadaného typu z kontextu vazby.

(Zděděno od BindingElement)
BuildChannelListener<TChannel>(BindingContext)

Inicializuje naslouchací proces kanálu pro příjem kanálů zadaného typu z kontextu vazby.

(Zděděno od BindingElement)
CanBuildChannelFactory<TChannel>(BindingContext)

Vrátí hodnotu, která označuje, zda element vazby může vytvořit kanál factory pro konkrétní typ kanálu.

(Zděděno od BindingElement)
CanBuildChannelListener<TChannel>(BindingContext)

Vrátí hodnotu, která označuje, zda element vazby může vytvořit naslouchací proces pro konkrétní typ kanálu.

(Zděděno od BindingElement)
Clone()

Při přepsání v odvozené třídě vrátí kopii objektu elementu vazby.

(Zděděno od BindingElement)
CreateMessageEncoderFactory()

Při přepsání v odvozené třídě vytvoří továrnu pro výrobu kodérů zpráv.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetProperty<T>(BindingContext)

Vrátí zadaný objekt požadovaný, pokud je k dispozici, z příslušné vrstvy v zásobníku kanálů.

GetType()

Získá aktuální Type instanci.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro