MessageEncodingBindingElement Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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
- 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) |