MessageEncodingBindingElement Clase

Definición

El elemento de enlace que especifica la versión de mensaje utilizada para codificar los mensajes.

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
Herencia
MessageEncodingBindingElement
Derivado

Ejemplos

El ejemplo de código siguiente muestra cómo implementar una clase 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
}

Comentarios

La codificación es el proceso de transformación de un mensaje en una secuencia de bytes. La descodificación es el proceso inverso. Windows Communication Foundation (WCF) incluye tres tipos de codificación para los mensajes SOAP: Texto, Binario y Mecanismo de optimización de transmisión del mensaje (MTOM).

Utilice esta clase si desea implementar un codificador del mensaje personalizado. Para implementar su propio codificador de mensajes personalizado, debe proporcionar implementaciones personalizadas de las tres clases base abstractas siguientes:

Invalide Encoder para devolver una instancia de su MessageEncoder personalizado. Invalide el método CreateMessageEncoderFactory para devolver una instancia para este generador.

Cualquier tipo que deriva de MessageEncodingBindingElement es responsable de actualizar la versión del enlace SOAP en el documento WSDL generado para el servicio. Esto se hace implementando el método ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) para modificar el WSDL generado.

Windows Communication Foundation (WCF) proporciona tres tipos de elementos de enlace derivados de la MessageEncodingBindingElement clase que pueden proporcionar codificación de texto, binario y de mecanismo de optimización de transmisión de mensajes (MTOM).

  • TextMessageEncodingBindingElement: el codificador más interoperable, pero el menos eficaz con mensajes XML. En general, un servicio web, o un cliente de servicios web, pueden entender XML textual. No obstante, la transmisión de grandes bloques de datos binarios en forma de texto no es eficaz.

  • BinaryMessageEncodingBindingElement: representa el elemento de enlace que especifica la codificación de caracteres y el control de versiones de mensajes usados para los mensajes XML basados en binarios. Esta es la más eficaz pero la menos interoperable de las opciones de codificación.

  • MtomMessageEncodingBindingElement: representa el elemento de enlace que especifica la codificación de caracteres y el control de versiones de mensajes usados para un mensaje mediante una codificación de mecanismo de optimización de transmisión de mensajes (MTOM). MTOM es una tecnología eficaz para la transmisión de datos binarios en mensajes de WCF. El codificador MTOM intenta equilibrar la eficacia y la interoperabilidad. El codificador MTOM transmite la mayoría del XML en formato de texto, pero optimiza bloques grandes de datos binarios transmitiéndolos como son, sin convertirlos en texto.

Constructores

MessageEncodingBindingElement()

Inicializa una nueva instancia de la clase MessageEncodingBindingElement.

MessageEncodingBindingElement(MessageEncodingBindingElement)

Inicializa una instancia nueva de la clase MessageEncodingBindingElement inicializada a partir de un elemento existente.

Propiedades

MessageVersion

Cuando se invalida en una clase derivada, obtiene o establece la versión de mensaje que puede ser controlada por los codificadores de mensaje producidos por el generador de codificadores de mensajes.

Métodos

BuildChannelFactory<TChannel>(BindingContext)

Inicializa un generador de canales para generar canales de un tipo especificado a partir del contexto de enlace.

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

Inicializa una escucha de canales para aceptar canales de un tipo especificado a partir del contexto de enlace.

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

Devuelve un valor que indica si el elemento de enlace puede crear un generador de canales para un tipo específico de canal.

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

Devuelve un valor que indica si el elemento de enlace puede compilar una escucha para un tipo específico de canal.

(Heredado de BindingElement)
Clone()

Devuelve una copia del objeto de elemento de enlace cuando se invalida en una clase derivada.

(Heredado de BindingElement)
CreateMessageEncoderFactory()

Cuando se invalida en una clase derivada, crea un generador para generar los codificadores del mensaje.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

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

Devuelve el objeto con tipo solicitado del nivel adecuado de la pila de canales, si está presente.

GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a