Udostępnij za pośrednictwem


MessageEncodingBindingElement Klasa

Definicja

Element powiązania określający wersję komunikatu używaną do kodowania komunikatów.

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
Dziedziczenie
MessageEncodingBindingElement
Pochodne

Przykłady

Poniższy przykład kodu pokazuje, jak zaimplementować klasę pochodzącą z MessageEncodingBindingElementklasy :

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
}

Uwagi

Kodowanie to proces przekształcania komunikatu w sekwencję bajtów. Dekodowanie jest procesem odwrotnym. Program Windows Communication Foundation (WCF) zawiera trzy typy kodowania komunikatów PROTOKOŁU SOAP: mechanizm optymalizacji tekstu, binarnej i transmisji komunikatów (MTOM).

Użyj tej klasy, jeśli chcesz zaimplementować niestandardowy koder komunikatów. Aby zaimplementować własny niestandardowy koder komunikatów, należy podać niestandardowe implementacje następujących trzech abstrakcyjnych klas bazowych:

Zastąpij element , Encoder aby zwrócić wystąpienie niestandardowego MessageEncoderelementu . Zastąpij metodę CreateMessageEncoderFactory , aby zwrócić wystąpienie tej fabryki.

Każdy typ pochodzący z MessageEncodingBindingElement programu jest odpowiedzialny za aktualizowanie wersji powiązania protokołu SOAP w dokumencie WSDL wygenerowanym dla usługi. Odbywa się to przez zaimplementowanie ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) metody w celu zmodyfikowania wygenerowanego pliku WSDL.

Program Windows Communication Foundation (WCF) udostępnia trzy typy elementów powiązań pochodzących z MessageEncodingBindingElement klasy, które mogą zapewnić kodowanie mechanizmu optymalizacji tekstu, binarnej i transmisji komunikatów (MTOM).

  • TextMessageEncodingBindingElement: najbardziej współdziałalny, ale najmniej wydajny koder dla komunikatów XML. Usługa sieci Web lub klient usługi sieci Web może ogólnie zrozumieć tekstowy kod XML. Jednak przesyłanie dużych bloków danych binarnych jako tekstu nie jest wydajne.

  • BinaryMessageEncodingBindingElement: reprezentuje element powiązania, który określa kodowanie znaków i przechowywanie wersji komunikatów używanych dla komunikatów XML opartych na binarnej bazie danych. Jest to najbardziej wydajne, ale najmniej współdziałanie opcji kodowania.

  • MtomMessageEncodingBindingElement: reprezentuje element powiązania, który określa kodowanie znaków i przechowywanie wersji komunikatów używanych dla komunikatu przy użyciu kodowania mechanizmu optymalizacji transmisji komunikatów (MTOM). MTOM to wydajna technologia do przesyłania danych binarnych w komunikatach WCF. Koder MTOM próbuje zrównoważyć wydajność i współdziałanie. Kodowanie MTOM przesyła większość kodu XML w postaci tekstowej, ale optymalizuje duże bloki danych binarnych, przesyłając je zgodnie z rzeczywistym użyciem bez konwersji na tekst.

Konstruktory

MessageEncodingBindingElement()

Inicjuje nowe wystąpienie klasy MessageEncodingBindingElement.

MessageEncodingBindingElement(MessageEncodingBindingElement)

Inicjuje MessageEncodingBindingElement nowe wystąpienie klasy zainicjowane z istniejącego elementu.

Właściwości

MessageVersion

Po zastąpieniu w klasie pochodnej program pobiera lub ustawia wersję komunikatu, która może być obsługiwana przez kodery komunikatów utworzone przez fabrykę kodera komunikatów.

Metody

BuildChannelFactory<TChannel>(BindingContext)

Inicjuje fabrykę kanałów do tworzenia kanałów określonego typu z kontekstu powiązania.

(Odziedziczone po BindingElement)
BuildChannelListener<TChannel>(BindingContext)

Inicjuje odbiornik kanału, aby akceptował kanały określonego typu z kontekstu powiązania.

(Odziedziczone po BindingElement)
CanBuildChannelFactory<TChannel>(BindingContext)

Zwraca wartość wskazującą, czy element powiązania może utworzyć fabrykę kanału dla określonego typu kanału.

(Odziedziczone po BindingElement)
CanBuildChannelListener<TChannel>(BindingContext)

Zwraca wartość wskazującą, czy element powiązania może skompilować odbiornik dla określonego typu kanału.

(Odziedziczone po BindingElement)
Clone()

Po zastąpieniu w klasie pochodnej zwraca kopię obiektu elementu powiązania.

(Odziedziczone po BindingElement)
CreateMessageEncoderFactory()

Po zastąpieniu w klasie pochodnej tworzy fabrykę do tworzenia koderów komunikatów.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetProperty<T>(BindingContext)

Zwraca żądany obiekt, jeśli istnieje, z odpowiedniej warstwy w stosie kanału.

GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy