MessageEncodingBindingElement Klass

Definition

Bindningselementet som anger den meddelandeversion som används för att koda meddelanden.

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
Arv
MessageEncodingBindingElement
Härledda

Exempel

Följande kodexempel visar hur du implementerar en klass som härletts från 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
}

Kommentarer

Kodning är processen att omvandla ett meddelande till en sekvens med byte. Avkodning är den omvända processen. Windows Communication Foundation (WCF) innehåller tre typer av kodning för SOAP-meddelanden: MTOM (Text, Binary and Message Transmission Optimization Mechanism).

Använd den här klassen om du vill implementera en anpassad meddelandekodare. Om du vill implementera en egen anpassad meddelandekodare måste du tillhandahålla anpassade implementeringar av följande tre abstrakta basklasser:

Åsidosätt Encoder för att returnera en instans av ditt anpassade MessageEncoder. Åsidosätt CreateMessageEncoderFactory metoden för att returnera en instans av den här fabriken.

Alla typer som härleds från MessageEncodingBindingElement ansvarar för att uppdatera versionen av SOAP-bindningen i det WSDL-dokument som genereras för tjänsten. Detta görs genom att implementera ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) metoden för att ändra den genererade WSDL:n.

Windows Communication Foundation (WCF) innehåller tre typer av bindningselement som härleds från klassen MessageEncodingBindingElement som kan tillhandahålla MTOM-kodning (text- och binär- och meddelandeöverföringsoptimeringsmekanism).

  • TextMessageEncodingBindingElement: den mest driftskompatibla men minst effektiva kodaren för XML-meddelanden. En webbtjänst- eller webbtjänstklient kan i allmänhet förstå textbaserad XML. Det är dock inte effektivt att överföra stora block med binära data som text.

  • BinaryMessageEncodingBindingElement: representerar bindningselementet som anger teckenkodning och versionshantering av meddelanden som används för binärbaserade XML-meddelanden. Detta är mest effektivt men minst driftskompatibelt med kodningsalternativen.

  • MtomMessageEncodingBindingElement: representerar bindningselementet som anger teckenkodning och versionshantering av meddelanden som används för ett meddelande med hjälp av en MTOM-kodning (Message Transmission Optimization Mechanism). MTOM är en effektiv teknik för överföring av binära data i WCF-meddelanden. MTOM-kodaren försöker balansera effektivitet och samverkan. MTOM-kodningen överför de flesta XML i textformat, men optimerar stora block med binära data genom att överföra dem as-is, utan konvertering till text.

Konstruktorer

Name Description
MessageEncodingBindingElement()

Initierar en ny instans av MessageEncodingBindingElement klassen.

MessageEncodingBindingElement(MessageEncodingBindingElement)

Initierar en ny instans av MessageEncodingBindingElement klassen som initierats från ett befintligt element.

Egenskaper

Name Description
MessageVersion

När den åsidosätts i en härledd klass hämtar eller anger du den meddelandeversion som kan hanteras av meddelandekodarna som skapas av meddelandekodarens fabrik.

Metoder

Name Description
BuildChannelFactory<TChannel>(BindingContext)

Initierar en kanalfabrik för att producera kanaler av en angiven typ från bindningskontexten.

(Ärvd från BindingElement)
BuildChannelListener<TChannel>(BindingContext)

Initierar en kanallyssnare för att acceptera kanaler av en angiven typ från bindningskontexten.

(Ärvd från BindingElement)
CanBuildChannelFactory<TChannel>(BindingContext)

Returnerar ett värde som anger om bindningselementet kan skapa en kanalfabrik för en viss typ av kanal.

(Ärvd från BindingElement)
CanBuildChannelListener<TChannel>(BindingContext)

Returnerar ett värde som anger om bindningselementet kan skapa en lyssnare för en viss typ av kanal.

(Ärvd från BindingElement)
Clone()

När det åsidosättas i en härledd klass returnerar en kopia av bindningselementobjektet.

(Ärvd från BindingElement)
CreateMessageEncoderFactory()

När du åsidosättas i en härledd klass skapar du en fabrik för att producera meddelandekodare.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetProperty<T>(BindingContext)

Returnerar det typerade objektet som begärs, om det finns, från lämpligt lager i kanalstacken.

GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Gäller för