Aracılığıyla paylaş


MessageEncodingBindingElement Sınıf

Tanım

İletileri kodlamak için kullanılan ileti sürümünü belirten bağlama öğesi.

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
Devralma
MessageEncodingBindingElement
Türetilmiş

Örnekler

Aşağıdaki kod örneği, öğesinden MessageEncodingBindingElementtüretilen bir sınıfın nasıl uygulanacaklarını gösterir:

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
}

Açıklamalar

Kodlama, bir iletiyi bayt dizisine dönüştürme işlemidir. Kod çözme ters işlemdir. Windows Communication Foundation (WCF), SOAP iletileri için üç tür kodlama içerir: Metin, İkili ve İleti İletim İyileştirme Mekanizması (MTOM).

Özel bir ileti kodlayıcı uygulamak istiyorsanız bu sınıfı kullanın. Kendi özel ileti kodlayıcınızı uygulamak için aşağıdaki üç soyut temel sınıfın özel uygulamalarını sağlamanız gerekir:

Özel MessageEncoderörneğinizi döndürmek için öğesini Encoder geçersiz kılın. Bu fabrikanın CreateMessageEncoderFactory bir örneğini döndürmek için yöntemini geçersiz kılın.

türetilen her tür, hizmet için oluşturulan WSDL belgesindeki SOAP bağlamasının sürümünü güncelleştirmekten MessageEncodingBindingElement sorumludur. Bu, oluşturulan WSDL'yi ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) değiştirmek için yöntemi uygulanarak yapılır.

Windows Communication Foundation (WCF), sınıfından türetilen MessageEncodingBindingElement ve metin, ikili ve İleti İletim İyileştirme Mekanizması (MTOM) kodlaması sağlayabilen üç tür bağlama öğesi sağlar.

  • TextMessageEncodingBindingElement: XML iletileri için en çok birlikte çalışabilen ancak en az verimli kodlayıcı. Web hizmeti veya Web hizmeti istemcisi genellikle metin xml'sini anlayabilir. Ancak, büyük ikili veri bloklarının metin olarak iletilmesi verimli değildir.

  • BinaryMessageEncodingBindingElement: ikili tabanlı XML iletileri için kullanılan karakter kodlamasını ve ileti sürümünü belirten bağlama öğesini temsil eder. Bu, kodlama seçeneklerinin en verimli ama en az birlikte çalışabilen özelliğidir.

  • MtomMessageEncodingBindingElement: İleti İletim İyileştirme Mekanizması (MTOM) kodlaması kullanan bir ileti için kullanılan karakter kodlamasını ve ileti sürümü oluşturmayı belirten bağlama öğesini temsil eder. MTOM, WCF iletilerinde ikili verileri iletmek için verimli bir teknolojidir. MTOM kodlayıcı verimliliği ve birlikte çalışabilirliği dengelemeye çalışır. MTOM kodlaması çoğu XML'yi metin biçiminde iletir, ancak büyük ikili veri bloklarını metne dönüştürmeden olduğu gibi ileterek iyileştirir.

Oluşturucular

MessageEncodingBindingElement()

MessageEncodingBindingElement sınıfının yeni bir örneğini başlatır.

MessageEncodingBindingElement(MessageEncodingBindingElement)

Mevcut bir öğeden başlatılan sınıfın MessageEncodingBindingElement yeni bir örneğini başlatır.

Özellikler

MessageVersion

Türetilmiş bir sınıfta geçersiz kılındığında, ileti kodlayıcı fabrikası tarafından üretilen ileti kodlayıcıları tarafından işlenebilen ileti sürümünü alır veya ayarlar.

Yöntemler

BuildChannelFactory<TChannel>(BindingContext)

Bağlama bağlamından belirtilen türdeki kanalları oluşturmak için bir kanal fabrikası başlatır.

(Devralındığı yer: BindingElement)
BuildChannelListener<TChannel>(BindingContext)

Bağlama bağlamından belirtilen türde kanalları kabul etmek için bir kanal dinleyicisi başlatır.

(Devralındığı yer: BindingElement)
CanBuildChannelFactory<TChannel>(BindingContext)

Bağlama öğesinin belirli bir kanal türü için kanal fabrikası oluşturup oluşturamayacağını belirten bir değer döndürür.

(Devralındığı yer: BindingElement)
CanBuildChannelListener<TChannel>(BindingContext)

Bağlama öğesinin belirli bir kanal türü için dinleyici oluşturup oluşturamayacağını belirten bir değer döndürür.

(Devralındığı yer: BindingElement)
Clone()

Türetilmiş bir sınıfta geçersiz kılındığında, bağlama öğesi nesnesinin bir kopyasını döndürür.

(Devralındığı yer: BindingElement)
CreateMessageEncoderFactory()

Türetilmiş bir sınıfta geçersiz kılındığında, ileti kodlayıcıları oluşturmak için bir fabrika oluşturur.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetProperty<T>(BindingContext)

Kanal yığınındaki uygun katmandan istenen türü belirtilen nesneyi (varsa) döndürür.

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır