Sdílet prostřednictvím


MessageEncodingBindingElement Třída

Definice

Element vazby, který určuje verzi zprávy použitou 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 posloupnost bajtů. Dekódování je reverzní proces. Windows Communication Foundation (WCF) obsahuje tři typy kódování pro zprávy SOAP: Text, Binary and 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 zadat vlastní implementace následujících tří abstraktních základních tříd:

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

Jakýkoli typ 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.

Technologie 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 souboru a mechanismu optimalizace přenosu zpráv (MTOM).

  • TextMessageEncodingBindingElement: nejoperabilní, ale nejméně efektivní kodér pro zprávy XML. Klient webové služby nebo samotná webová služba může obecně rozumět textovému XML. Přenos velkých bloků binárních dat jako text není efektivní.

  • BinaryMessageEncodingBindingElement: představuje element vazby, který určuje kódování znaků a správu verzí zpráv používané pro binární zprávy XML. To je nejúčinnější, ale nejméně interoperabilní s možnostmi 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í kódování 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 pokouší 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áší as-is, bez převodu na text.

Konstruktory

Name Description
MessageEncodingBindingElement()

Inicializuje novou instanci MessageEncodingBindingElement třídy.

MessageEncodingBindingElement(MessageEncodingBindingElement)

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

Vlastnosti

Name Description
MessageVersion

Při přepsání v odvozené třídě získá nebo nastaví verzi zprávy, kterou můžou zpracovat kodéry zpráv vytvořené továrnou kodéru pro kódování zpráv.

Metody

Name Description
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á určuje, zda element vazby může vytvořit objekt pro vytváření kanálů pro určitý typ kanálu.

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

Vrátí hodnotu, která označuje, zda element vazby může sestavit naslouchací proces pro určitý typ kanálu.

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

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

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

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

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

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

Slouží jako výchozí funkce hash.

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

Vrátí požadovaný typ objektu z příslušné vrstvy v zásobníku kanálu.

GetType()

Získá Type aktuální instance.

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

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

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

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

(Zděděno od Object)

Platí pro