MessageEncodingBindingElement Klas

Definitie

Het bindingselement waarmee de berichtversie wordt opgegeven die wordt gebruikt om berichten te coderen.

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
Overname
MessageEncodingBindingElement
Afgeleid

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u een klasse implementeert die is afgeleid van 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
}

Opmerkingen

Encoding is het proces van het transformeren van een bericht in een reeks bytes. Decodering is het omgekeerde proces. Windows Communication Foundation (WCF) bevat drie typen codering voor SOAP-berichten: Text, Binary and Message Transmission Optimization Mechanism (MTOM).

Gebruik deze klasse als u een aangepaste berichtcoderingsprogramma wilt implementeren. Als u uw eigen aangepaste berichtcoderingsprogramma wilt implementeren, moet u aangepaste implementaties van de volgende drie abstracte basisklassen opgeven:

Overschrijf het Encoder om een exemplaar van uw aangepaste MessageEncoderexemplaar te retourneren. Overschrijf de CreateMessageEncoderFactory methode om een exemplaar van deze factory te retourneren.

Elk type dat is afgeleid van MessageEncodingBindingElement , is verantwoordelijk voor het bijwerken van de versie van de SOAP-binding in het WSDL-document dat voor de service is gegenereerd. Dit wordt gedaan door de ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) methode te implementeren om de gegenereerde WSDL te wijzigen.

Windows Communication Foundation (WCF) biedt drie typen bindingselementen die zijn afgeleid van de klasse MessageEncodingBindingElement die kunnen voorzien in tekst-, binaire en MTOM-codering (Message Transmission Optimization Mechanism).

  • TextMessageEncodingBindingElement: de meest interoperabele, maar de minst efficiënte encoder voor XML-berichten. Een webservice- of webserviceclient kan over het algemeen tekstuele XML begrijpen. Het verzenden van grote blokken binaire gegevens als tekst is niet efficiënt.

  • BinaryMessageEncodingBindingElement: vertegenwoordigt het bindingselement dat het tekencoderings- en berichtversiebeheer specificeert dat wordt gebruikt voor XML-berichten op basis van binaire bestanden. Dit is de meest efficiënte maar minst interoperabele van de coderingsopties.

  • MtomMessageEncodingBindingElement: vertegenwoordigt het bindingselement dat het tekencoderings- en berichtversiebeheer aangeeft dat wordt gebruikt voor een bericht met behulp van een MTOM-codering (Message Transmission Optimization Mechanism). MTOM is een efficiënte technologie voor het verzenden van binaire gegevens in WCF-berichten. De MTOM-encoder probeert de efficiëntie en interoperabiliteit te verdelen. De MTOM-codering verzendt de meeste XML in tekstvorm, maar optimaliseert grote blokken binaire gegevens door ze as-iste verzenden, zonder conversie naar tekst.

Constructors

Name Description
MessageEncodingBindingElement()

Initialiseert een nieuw exemplaar van de MessageEncodingBindingElement klasse.

MessageEncodingBindingElement(MessageEncodingBindingElement)

Initialiseert een nieuw exemplaar van de MessageEncodingBindingElement klasse die is geïnitialiseerd op basis van een bestaand element.

Eigenschappen

Name Description
MessageVersion

Wanneer deze wordt overschreven in een afgeleide klasse, haalt of stelt u de berichtversie in die kan worden verwerkt door de berichtcoderingsprogramma's die door de factory van de berichtencoderingsprogramma's worden geproduceerd.

Methoden

Name Description
BuildChannelFactory<TChannel>(BindingContext)

Initialiseert een kanaalfactory voor het produceren van kanalen van een opgegeven type vanuit de bindingscontext.

(Overgenomen van BindingElement)
BuildChannelListener<TChannel>(BindingContext)

Initialiseert een kanaallistener om kanalen van een opgegeven type te accepteren vanuit de bindingscontext.

(Overgenomen van BindingElement)
CanBuildChannelFactory<TChannel>(BindingContext)

Retourneert een waarde die aangeeft of het bindingselement een kanaalfactory kan bouwen voor een specifiek type kanaal.

(Overgenomen van BindingElement)
CanBuildChannelListener<TChannel>(BindingContext)

Retourneert een waarde die aangeeft of het bindingselement een listener kan bouwen voor een specifiek type kanaal.

(Overgenomen van BindingElement)
Clone()

Wanneer deze wordt overschreven in een afgeleide klasse, retourneert u een kopie van het object voor het bindingselement.

(Overgenomen van BindingElement)
CreateMessageEncoderFactory()

Wanneer deze wordt overschreven in een afgeleide klasse, maakt u een fabriek voor het produceren van berichtcoderingsprogramma's.

Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetProperty<T>(BindingContext)

Retourneert het aangevraagde getypte object, indien aanwezig, van de juiste laag in de kanaalstack.

GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Van toepassing op