MessageEncodingBindingElement Classe

Definição

O elemento de ligação que especifica a versão da mensagem usada para codificar as mensagens.

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
Herança
MessageEncodingBindingElement
Derivado

Exemplos

O seguinte exemplo de código mostra como implementar uma classe derivada de 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
}

Observações

A codificação é o processo de transformar uma mensagem numa sequência de bytes. A decodificação é o processo inverso. O Windows Communication Foundation (WCF) inclui três tipos de codificação para mensagens SOAP: Texto, Binário e Mecanismo de Otimização de Transmissão de Mensagens (MTOM).

Use esta classe se quiser implementar um codificador de mensagens personalizado. Para implementar o seu próprio codificador de mensagens personalizado, deve fornecer implementações personalizadas das seguintes três classes base abstratas:

Substitua o método Encoder para devolver uma instância da sua classe personalizada MessageEncoder. Substitua o CreateMessageEncoderFactory método para devolver uma instância desta fábrica.

Qualquer tipo que derive de MessageEncodingBindingElement é responsável por atualizar a versão da ligação SOAP no documento WSDL gerado para o serviço. Isto é feito implementando o ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) método para modificar a WSDL gerada.

Windows Communication Foundation (WCF) fornece três tipos de elementos de ligação derivados da classe MessageEncodingBindingElement que podem fornecer codificação de texto, binário e Mecanismo de Otimização de Transmissão de Mensagens (MTOM).

  • TextMessageEncodingBindingElement: o codificador mais interoperável, mas o menos eficiente para mensagens XML. Um serviço Web ou cliente de serviço Web geralmente pode entender XML textual. No entanto, a transmissão de grandes blocos de dados binários como texto não é eficiente.

  • BinaryMessageEncodingBindingElement: representa o elemento de ligação que especifica a codificação de caracteres e o versionamento de mensagens usados para mensagens XML baseadas em binário. Esta é a opção de codificação mais eficiente, mas menos interoperável.

  • MtomMessageEncodingBindingElement: representa o elemento de ligação que especifica a codificação de caracteres e o versionamento de mensagens usados para uma mensagem usando uma codificação do Mecanismo de Otimização da Transmissão de Mensagens (MTOM). MTOM é uma tecnologia eficiente para transmitir dados binários em mensagens WCF. O codificador MTOM procura equilibrar eficiência e interoperabilidade. A codificação MTOM transmite a maioria dos XML em forma textual, mas otimiza grandes blocos de dados binários transmitindo-os as-is, sem conversão em texto.

Construtores

Name Description
MessageEncodingBindingElement()

Inicializa uma nova instância da MessageEncodingBindingElement classe.

MessageEncodingBindingElement(MessageEncodingBindingElement)

Inicializa uma nova instância da MessageEncodingBindingElement classe inicializada a partir de um elemento existente.

Propriedades

Name Description
MessageVersion

Quando sobrescrito numa classe derivada, obtém ou define a versão da mensagem que pode ser tratada pelos codificadores de mensagens produzidos pela fábrica de codificadores de mensagens.

Métodos

Name Description
BuildChannelFactory<TChannel>(BindingContext)

Inicializa uma fábrica de canais para produzir canais de um tipo especificado a partir do contexto de ligação.

(Herdado de BindingElement)
BuildChannelListener<TChannel>(BindingContext)

Inicializa um ouvinte de canal para aceitar canais de um tipo especificado do contexto de ligação.

(Herdado de BindingElement)
CanBuildChannelFactory<TChannel>(BindingContext)

Devolve um valor que indica se o elemento de ligação pode construir uma fábrica de canal para um tipo específico de canal.

(Herdado de BindingElement)
CanBuildChannelListener<TChannel>(BindingContext)

Devolve um valor que indica se o elemento de ligação pode construir um ouvinte para um tipo específico de canal.

(Herdado de BindingElement)
Clone()

Quando sobrescrito numa classe derivada, devolve uma cópia do objeto elemento de ligação.

(Herdado de BindingElement)
CreateMessageEncoderFactory()

Quando sobreposto numa classe derivada, cria-se uma fábrica para produzir codificadores de mensagens.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetProperty<T>(BindingContext)

Devolve o objeto tipado solicitado, se presente, da camada apropriada na pilha de canais.

GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Aplica-se a