MessageEncodingBindingElement Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Elemento de enlace que especifica la versión del 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
- Derivado
Ejemplos
En el ejemplo de código siguiente se 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 transformar 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 mensajes SOAP: Text, Binary and Message Transmission Optimization Mechanism (MTOM).
Use esta clase si desea implementar un codificador de mensajes 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 CreateMessageEncoderFactory método para devolver una instancia de este generador.
Cualquier tipo derivado de MessageEncodingBindingElement es responsable de actualizar la versión del enlace SOAP en el documento WSDL generado para el servicio. Para ello, se implementa el ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) método 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 optimización de transmisión de mensajes (MTOM).
TextMessageEncodingBindingElement: el codificador más interoperable, pero el codificador menos eficaz para los mensajes XML. Por lo general, un servicio web o cliente de servicio web puede comprender XML textual. Sin embargo, transmitir bloques grandes de datos binarios como texto no es eficiente.
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. Esto es más eficaz pero 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 del Mecanismo de optimización de transmisión de mensajes (MTOM). MTOM es una tecnología eficaz para transmitir datos binarios en mensajes WCF. El codificador MTOM intenta equilibrar la eficiencia y la interoperabilidad. La codificación MTOM transmite la mayoría de xml en formato textual, pero optimiza grandes bloques de datos binarios transmitiéndolos as-is, sin conversión al texto.
Constructores
| Nombre | Description |
|---|---|
| MessageEncodingBindingElement() |
Inicializa una nueva instancia de la clase MessageEncodingBindingElement. |
| MessageEncodingBindingElement(MessageEncodingBindingElement) |
Inicializa una nueva instancia de la MessageEncodingBindingElement clase inicializada a partir de un elemento existente. |
Propiedades
| Nombre | Description |
|---|---|
| MessageVersion |
Cuando se reemplaza en una clase derivada, obtiene o establece la versión del mensaje que pueden controlar los codificadores de mensajes generados por el generador de codificadores de mensajes. |
Métodos
| Nombre | Description |
|---|---|
| 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 un agente de escucha de canal para aceptar canales de un tipo especificado desde el 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 crear un agente de escucha para un tipo específico de canal. (Heredado de BindingElement) |
| Clone() |
Cuando se reemplaza en una clase derivada, devuelve una copia del objeto de elemento de enlace. (Heredado de BindingElement) |
| CreateMessageEncoderFactory() |
Cuando se reemplaza en una clase derivada, crea un generador para generar codificadores de mensajes. |
| Equals(Object) |
Determina si el objeto especificado es igual al objeto actual. (Heredado de Object) |
| GetHashCode() |
Actúa como función hash predeterminada. (Heredado de Object) |
| GetProperty<T>(BindingContext) |
Devuelve el objeto con tipo solicitado, si está presente, de la capa adecuada en la pila del canal. |
| GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
| MemberwiseClone() |
Crea una copia superficial del Objectactual. (Heredado de Object) |
| ToString() |
Devuelve una cadena que representa el objeto actual. (Heredado de Object) |