MessageEncodingBindingElement Klasse

Definition

Das Bindungselement, das die Nachrichtenversion angibt, die verwendet wird, um Nachrichten zu codieren.

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
Vererbung
MessageEncodingBindingElement
Abgeleitet

Beispiele

Das folgende Codebeispiel veranschaulicht, wie eine von MessageEncodingBindingElement abgeleitete Klasse implementiert wird.

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
}

Hinweise

Beim Codieren wird eine Nachricht in eine Bytefolge transformiert. Beim Decodieren wird dieser Prozess umgekehrt. Windows Communication Foundation (WCF) enthält drei Typen für die Codierung von SOAP-Nachrichten: Text, binär und Message Transmission Optimization Mechanism (MTOM).

Mit dieser Klasse können Sie einen benutzerdefinierten Nachrichtenencoder implementieren. Um einen eigenen Nachrichtenencoder zu implementieren, müssen Sie benutzerdefinierte Implementierungen der folgenden drei abstrakten Basisklassen bereitstellen:

Überschreiben Sie den Encoder, um eine Instanz des benutzerdefinierten MessageEncoder zurückzugeben. Überschreiben Sie die CreateMessageEncoderFactory-Methode, um eine Instanz von dieser Factory zurückzugeben.

Jeder Typ, der aus MessageEncodingBindingElement abgeleitet wird, ist für die Aktualisierung der Version der SOAP-Bindung im für den Dienst generierten WSDL-Dokument verantwortlich. Dies wird gemacht, indem man die ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext)-Methode implementiert, um die generierte WSDL zu ändern.

Windows Communication Foundation (WCF) stellt drei Arten von Bindungselementen bereit, die von der MessageEncodingBindingElement -Klasse abgeleitet werden und die text-, binär- und Message Transmission Optimization Mechanism-Codierung (Message Transmission Optimization Mechanism, MTOM) bereitstellen können.

  • TextMessageEncodingBindingElement: Der am wenigsten effiziente Encoder für XML-Nachrichten, der jedoch das höchste Maß an Interoperabilität bietet. Text-XML kann in der Regel von Webdiensten oder Webdienstclients interpretiert werden. Das Übermitteln umfangreicher Blöcke binärer Daten in Textform ist jedoch wenig effizient.

  • BinaryMessageEncodingBindingElement: stellt das Bindungselement dar, das die Zeichencodierung und Nachrichtenversionsverwaltung angibt, die für binärbasierte XML-Nachrichten verwendet werden. Dies ist bezüglich der Codierungsoptionen am effizientesten, aber am wenigsten interoperabel.

  • MtomMessageEncodingBindingElement: stellt das Bindungselement dar, das die Zeichencodierung und Nachrichtenversionsverwaltung angibt, die für eine Nachricht mithilfe einer MTOM-Codierung (Message Transmission Optimization Mechanism) verwendet wird. MTOM ist eine effiziente Technologie zum Übertragen von Binärdaten in WCF-Nachrichten. Mit dem MTOM-Encoder wird versucht, eine Balance zwischen Effizienz und Interoperabilität zu schaffen. Die MTOM-Verschlüsselung überträgt die meisten XML-Daten in Textform, optimiert aber große Binärdatenblöcke durch Übertragung ohne Textkonvertierung.

Konstruktoren

MessageEncodingBindingElement()

Initialisiert eine neue Instanz der MessageEncodingBindingElement-Klasse.

MessageEncodingBindingElement(MessageEncodingBindingElement)

Initialisiert eine neue Instanz der MessageEncodingBindingElement-Klasse, die aus einem vorhandenen Element initialisiert wurde.

Eigenschaften

MessageVersion

Beim Überschreiben in einer abgeleiteten Klasse wird die Nachrichtenversion abgerufen, die durch die von der Factory erzeugten Nachrichtenencoder verarbeitet werden kann.

Methoden

BuildChannelFactory<TChannel>(BindingContext)

Initialisiert eine Kanalfactory zum Erstellen von Kanälen eines bestimmten Typs aus dem Bindungskontext.

(Geerbt von BindingElement)
BuildChannelListener<TChannel>(BindingContext)

Initialisiert einen Kanallistener, der Kanäle eines bestimmten Typs aus dem Bindungskontext annimmt.

(Geerbt von BindingElement)
CanBuildChannelFactory<TChannel>(BindingContext)

Gibt einen Wert zurück, der angibt, ob das Bindungselement eine Kanalfactory für einen bestimmten Typ von Kanälen erstellen kann.

(Geerbt von BindingElement)
CanBuildChannelListener<TChannel>(BindingContext)

Gibt einen Wert zurück, der angibt, ob das Bindungselement einen Listener für einen bestimmten Typ von Kanal erstellen kann.

(Geerbt von BindingElement)
Clone()

Gibt beim Überschreiben in einer abgeleiteten Klasse eine Kopie des Bindungselementobjekts zurück.

(Geerbt von BindingElement)
CreateMessageEncoderFactory()

Beim Überschreiben in einer abgeleiteten Klasse wird eine Factory zum Erzeugen von Nachrichtenencodern erstellt.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetProperty<T>(BindingContext)

Gibt ggf. das angeforderte typisierte Objekt von der entsprechenden Ebene im Kanalstapel zurück.

GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für: