MessageEncodingBindingElement Класс

Определение

Элемент привязки, задающий версию сообщения, которая используется для кодирования сообщений.The binding element that specifies the message version used to encode messages.

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
Наследование
MessageEncodingBindingElement
Производный

Примеры

В следующем примере кода показано, как реализовать класс, производный от класса MessageEncodingBindingElement.The following code example shows how to implement a class derived from 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
}

Комментарии

Кодирование — это процесс преобразования сообщения в последовательность байтов.Encoding is the process of transforming a message into a sequence of bytes. Декодирование представляет собой обратный процесс.Decoding is the reverse process. В Windows Communication Foundation (WCF) имеется три типа кодирования для сообщений SOAP: Text, Binary и MTOM.Windows Communication Foundation (WCF) includes three types of encoding for SOAP messages: Text, Binary and Message Transmission Optimization Mechanism (MTOM).

Используйте этот класс, если необходимо реализовать пользовательский кодировщик сообщений.Use this class if you want to implement a custom message encoder. Чтобы реализовать собственный пользовательский кодировщик сообщений, необходимо предоставить пользовательские реализации следующих трех абстрактных базовых классов.To implement your own custom message encoder, you must provide custom implementations of the following three abstract base classes:

Переопределите свойство Encoder, чтобы обеспечить возврат экземпляра пользовательского кодировщика MessageEncoder.Override the Encoder to return an instance of your custom MessageEncoder. Переопределите метод CreateMessageEncoderFactory, чтобы вернуть экземпляр этой фабрики.Override the CreateMessageEncoderFactory method to return an instance of this factory.

Любой тип, унаследованный от класса MessageEncodingBindingElement, отвечает за обновление версии привязки протокола SOAP в документе WSDL, созданном для службы.Any type that derives from MessageEncodingBindingElement is responsible for updating the version of the SOAP binding in the WSDL document generated for the service. Это выполняется реализацией метода ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) для изменения созданного кода WSDL.This is done by implementing the ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) method to modify the generated WSDL.

Windows Communication Foundation (WCF) предоставляет три типа элементов привязки, производных от MessageEncodingBindingElement класса, которые могут предоставлять кодировку Text, binary и механизму оптимизации передачи сообщений (MTOM).Windows Communication Foundation (WCF) provides three types of binding elements derived from the MessageEncodingBindingElement class that can provide for text, binary and Message Transmission Optimization Mechanism (MTOM) encoding.

  • TextMessageEncodingBindingElement. Кодировщик для сообщений XML с наиболее широкими возможностями взаимодействия, но при этом наименее эффективный.TextMessageEncodingBindingElement: the most interoperable, but the least efficient encoder for XML messages. Веб-служба или клиент веб-службы в общем могут понимать XML в текстовом виде.A Web service or Web service client can generally understand textual XML. Однако передача больших блоков двоичных данных в виде текста неэффективна.However, transmitting large blocks of binary data as text is not efficient.

  • BinaryMessageEncodingBindingElement— представляет элемент привязки, указывающий кодировку символов и управление версиями сообщений, используемое для двоичных XML-сообщений.BinaryMessageEncodingBindingElement: represents the binding element that specifies the character encoding and message versioning used for binary-based XML messages. Этот вариант кодирования является наиболее эффективными, но обладает наименьшими возможностями взаимодействия.This is most efficient but least interoperable of the encoding options.

  • MtomMessageEncodingBindingElement— представляет элемент привязки, указывающий кодировку и управление версиями сообщений, используемые для сообщения, использующего шифрование с помощью механизма оптимизации передачи сообщений (MTOM).MtomMessageEncodingBindingElement: represents the binding element that specifies the character encoding and message versioning used for a message using a Message Transmission Optimization Mechanism (MTOM) encoding. MTOM - это эффективный способ передачи двоичных данных в сообщениях WCF.MTOM is an efficient technology for transmitting binary data in WCF messages. Кодировщик MTOM пытается обеспечить баланс между эффективностью и возможностями взаимодействия.The MTOM encoder attempts to balance efficiency and interoperability. Кодирование MTOM передает большую часть XML-данных в текстовой форме, но оптимизирует большие блоки двоичных данных путем передачи их в исходном виде, без преобразования в текст.The MTOM encoding transmits most XML in textual form, but optimizes large blocks of binary data by transmitting them as-is, without conversion to text.

Конструкторы

MessageEncodingBindingElement()

Инициализирует новый экземпляр класса MessageEncodingBindingElement.Initializes a new instance of the MessageEncodingBindingElement class.

MessageEncodingBindingElement(MessageEncodingBindingElement)

Инициализирует новый экземпляр класса MessageEncodingBindingElement, инициализированного из существующего элемента.Initializes a new instance of the MessageEncodingBindingElement class initialized from an existing element.

Свойства

MessageVersion

При переопределении в производном классе возвращает или задает версию сообщения, которая может обрабатываться кодировщиками сообщений, созданными фабрикой кодировщиков сообщений.When overridden in a derived class, gets or sets the message version that can be handled by the message encoders produced by the message encoder factory.

Методы

BuildChannelFactory<TChannel>(BindingContext)

Инициализирует фабрику каналов для создания каналов заданного типа из контекста привязок.Initializes a channel factory for producing channels of a specified type from the binding context.

(Унаследовано от BindingElement)
BuildChannelListener<TChannel>(BindingContext)

Инициализирует прослушиватель каналов для приема каналов заданного типа из контекста привязки.Initializes a channel listener to accept channels of a specified type from the binding context.

(Унаследовано от BindingElement)
CanBuildChannelFactory<TChannel>(BindingContext)

Возвращает значение, показывающее, может ли элемент привязки создавать фабрику каналов для заданного типа канала.Returns a value that indicates whether the binding element can build a channel factory for a specific type of channel.

(Унаследовано от BindingElement)
CanBuildChannelListener<TChannel>(BindingContext)

Возвращает значение, показывающее, может ли элемент привязки создать прослушиватель для заданного типа канала.Returns a value that indicates whether the binding element can build a listener for a specific type of channel.

(Унаследовано от BindingElement)
Clone()

При переопределении в производном классе возвращает копию объекта элемента привязки.When overridden in a derived class, returns a copy of the binding element object.

(Унаследовано от BindingElement)
CreateMessageEncoderFactory()

При переопределении в производном классе создает фабрику для создания кодировщиков сообщений.When overridden in a derived class, creates a factory for producing message encoders.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetProperty<T>(BindingContext)

Возвращает запрошенный типизированный объект, если он имеется, из соответствующего уровня стека каналов.Returns the typed object requested, if present, from the appropriate layer in the channel stack.

GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)

Применяется к