MessageEncodingBindingElement Osztály

Definíció

Az üzenetek kódolásához használt üzenetverziót meghatározó kötési elem.

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
Öröklődés
MessageEncodingBindingElement
Származtatott

Példák

Az alábbi példakód bemutatja, hogyan implementálhat egy osztályt, amely a következőből MessageEncodingBindingElementszármazik:

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
}

Megjegyzések

A kódolás az üzenet bájtok sorozatává alakításának folyamata. A dekódolás a fordított folyamat. A Windows kommunikációs alaprendszer (WCF) a SOAP-üzenetek kódolásának három típusát tartalmazza: Szöveg, Bináris és Üzenetátvitel optimalizálási mechanizmusa (MTOM).

Ezt az osztályt akkor használja, ha egyéni üzenetkódolót szeretne implementálni. A saját egyéni üzenetkódoló implementálásához az alábbi három absztrakt alaposztály egyéni implementációit kell megadnia:

Felül kell bírálni a Encoder-t, hogy visszaadjon egy példányt az egyéni MessageEncoder-ből. Felülbírálja a CreateMessageEncoderFactory gyár egy példányának visszaadására vonatkozó metódust.

Bármely olyan típus, amely a MessageEncodingBindingElement-ből származik, felelős a szolgáltatáshoz létrehozott WSDL-dokumentumban a SOAP-kötés verziójának frissítéséért. Ez a létrehozott WSDL módosítására szolgáló metódus implementálásával ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) történik.

Windows kommunikációs alaprendszer (WCF) a MessageEncodingBindingElement osztályból származó háromféle kötési elemet biztosít, amelyek szöveges, bináris és üzenetátviteli optimalizálási mechanizmus (MTOM) kódolását biztosítják.

  • TextMessageEncodingBindingElement: a leginkább együttműködő, de az XML-üzenetek legkevésbé hatékony kódolója. A webszolgáltatás vagy a webszolgáltatás-ügyfél általánosan megértheti a szöveges XML-t. A bináris adatok nagy blokkjainak szövegként való továbbítása azonban nem hatékony.

  • BinaryMessageEncodingBindingElement: a bináris xml-üzenetekhez használt karakterkódolást és üzenetverziót meghatározó kötési elemet jelöli. Ez a leghatékonyabb, de legkevésbé együttműködő a kódolási lehetőségek közül.

  • MtomMessageEncodingBindingElement: azt a kötési elemet jelöli, amely meghatározza az üzenethez használt karakterkódolást és -verziószámozást egy Üzenetátviteli optimalizálási mechanizmus (MTOM) kódolásával. Az MTOM egy hatékony technológia a bináris adatok WCF-üzenetekben való továbbításához. Az MTOM kódoló megpróbálja kiegyensúlyozni a hatékonyságot és az együttműködési képességet. Az MTOM kódolás a legtöbb XML-t szöveges formában továbbítja, de a bináris adatok nagy blokkjait optimalizálja azáltal, hogy as-istovábbítja őket, szöveggé alakítás nélkül.

Konstruktorok

Name Description
MessageEncodingBindingElement()

Inicializálja a MessageEncodingBindingElement osztály új példányát.

MessageEncodingBindingElement(MessageEncodingBindingElement)

Inicializálja az MessageEncodingBindingElement osztály új példányát egy meglévő elemből inicializálva.

Tulajdonságok

Name Description
MessageVersion

Ha egy származtatott osztályban felül van bírálva, lekéri vagy beállítja az üzenetverziót, amelyet az üzenetkódoló-előállító által létrehozott üzenetkódolók kezelhetnek.

Metódusok

Name Description
BuildChannelFactory<TChannel>(BindingContext)

Inicializál egy csatorna-előállítót egy adott típusú csatornák létrehozásához a kötési környezetből.

(Öröklődés forrása BindingElement)
BuildChannelListener<TChannel>(BindingContext)

Inicializál egy csatornafigyelőt egy adott típusú csatornák elfogadásához a kötési környezetből.

(Öröklődés forrása BindingElement)
CanBuildChannelFactory<TChannel>(BindingContext)

Egy értéket ad vissza, amely jelzi, hogy a kötési elem képes-e csatorna-előállítót létrehozni egy adott csatornatípushoz.

(Öröklődés forrása BindingElement)
CanBuildChannelListener<TChannel>(BindingContext)

Olyan értéket ad vissza, amely jelzi, hogy a kötési elem képes-e figyelőt létrehozni egy adott csatornatípushoz.

(Öröklődés forrása BindingElement)
Clone()

Ha egy származtatott osztályban felül van bírálva, a kötéselem-objektum másolatát adja vissza.

(Öröklődés forrása BindingElement)
CreateMessageEncoderFactory()

Ha felül van bírálva egy származtatott osztályban, létrehoz egy gyárat az üzenetkódolók előállításához.

Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetProperty<T>(BindingContext)

A csatornaverem megfelelő rétegéből kért beírt objektumot adja vissza, ha van ilyen.

GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

A következőre érvényes: