MessageEncoder Classe
Definição
O codificador é o componente usado para gravar e ler mensagens em um fluxo.The encoder is the component that is used to write messages to a stream and to read messages from a stream.
public ref class MessageEncoder abstract
public abstract class MessageEncoder
type MessageEncoder = class
Public MustInherit Class MessageEncoder
- Herança
-
MessageEncoder
Exemplos
O código a seguir mostra um exemplo de uma classe derivada de MessageEncoder .The following code shows an example of a class that is derived from MessageEncoder.
public class CustomTextMessageEncoder : MessageEncoder
{
private CustomTextMessageEncoderFactory factory;
private XmlWriterSettings writerSettings;
private string contentType;
public CustomTextMessageEncoder(CustomTextMessageEncoderFactory factory)
{
this.factory = factory;
this.writerSettings = new XmlWriterSettings();
this.writerSettings.Encoding = Encoding.GetEncoding(factory.CharSet);
this.contentType = string.Format("{0}; charset={1}",
this.factory.MediaType, this.writerSettings.Encoding.HeaderName);
}
public override string ContentType
{
get
{
return this.contentType;
}
}
public override string MediaType
{
get
{
return factory.MediaType;
}
}
public override MessageVersion MessageVersion
{
get
{
return this.factory.MessageVersion;
}
}
public override bool IsContentTypeSupported(string contentType)
{
if (base.IsContentTypeSupported(contentType))
{
return true;
}
if (contentType.Length == this.MediaType.Length)
{
return contentType.Equals(this.MediaType, StringComparison.OrdinalIgnoreCase);
}
else
{
if (contentType.StartsWith(this.MediaType, StringComparison.OrdinalIgnoreCase)
&& (contentType[this.MediaType.Length] == ';'))
{
return true;
}
}
return false;
}
public override Message ReadMessage(ArraySegment<byte> buffer, BufferManager bufferManager, string contentType)
{
byte[] msgContents = new byte[buffer.Count];
Array.Copy(buffer.Array, buffer.Offset, msgContents, 0, msgContents.Length);
bufferManager.ReturnBuffer(buffer.Array);
MemoryStream stream = new MemoryStream(msgContents);
return ReadMessage(stream, int.MaxValue);
}
public override Message ReadMessage(Stream stream, int maxSizeOfHeaders, string contentType)
{
XmlReader reader = XmlReader.Create(stream);
return Message.CreateMessage(reader, maxSizeOfHeaders, this.MessageVersion);
}
public override ArraySegment<byte> WriteMessage(Message message, int maxMessageSize, BufferManager bufferManager, int messageOffset)
{
MemoryStream stream = new MemoryStream();
XmlWriter writer = XmlWriter.Create(stream, this.writerSettings);
message.WriteMessage(writer);
writer.Close();
byte[] messageBytes = stream.GetBuffer();
int messageLength = (int)stream.Position;
stream.Close();
int totalLength = messageLength + messageOffset;
byte[] totalBytes = bufferManager.TakeBuffer(totalLength);
Array.Copy(messageBytes, 0, totalBytes, messageOffset, messageLength);
ArraySegment<byte> byteArray = new ArraySegment<byte>(totalBytes, messageOffset, messageLength);
return byteArray;
}
public override void WriteMessage(Message message, Stream stream)
{
XmlWriter writer = XmlWriter.Create(stream, this.writerSettings);
message.WriteMessage(writer);
writer.Close();
}
Comentários
MessageEncoder é uma classe base que fornece implementações que dão suporte a um tipo de conteúdo de MIME (Multipurpose Internet Mail Extensions) e à versão de mensagem e define a interface para a serialização e desserialização de mensagens de acordo com esse tipo de conteúdo.MessageEncoder is a base class that provides implementations that support a Multipurpose Internet Mail Extensions (MIME) content type and message version, and defines the interface for the serialization and deserialization of messages according to that content type. Use-o como uma classe base para escrever seu próprio codificador personalizado.Use it as a base class for writing your own custom encoder.
Use essa classe se desejar implementar um codificador de mensagem personalizado.Use this class if you want to implement a custom message encoder. Para implementar seu próprio codificador de mensagem personalizado, você deve fornecer implementações personalizadas das seguintes classes base abstratas:To implement your own custom message encoder, you must provide custom implementations of the following abstract base classes:
Substitua o Encoder para retornar uma instância de seu personalizado MessageEncoder .Override the Encoder to return an instance of your custom MessageEncoder. Em seguida, conecte seu personalizado MessageEncoderFactory à pilha de elementos de associação usada para configurar o serviço ou cliente substituindo o CreateMessageEncoderFactory método para retornar uma instância dessa fábrica.Then wire up your custom MessageEncoderFactory to the binding element stack used to configure the service or client by overriding the CreateMessageEncoderFactory method to return an instance of this factory.
A tarefa de converter entre a representação na memória de uma mensagem e uma representação do conjunto de informações XML (Infoset) que pode ser gravada em um fluxo é encapsulada dentro da MessageEncoder classe, que geralmente funciona como um alocador para leitores de XML e gravadores de XML que dão suporte a tipos específicos de codificações XML.The task of converting between the in-memory representation of a message and an XML Information Set (Infoset) representation that can be written to a stream is encapsulated within the MessageEncoder class, which most commonly serves as a factory for XML readers and XML writers that support specific types of XML encodings.
Os principais métodos do MessageEncoder são WriteMessage e ReadMessage .The key methods on MessageEncoder are WriteMessage and ReadMessage. WriteMessage Pega um Message objeto e o grava em um Stream objeto.WriteMessage takes a Message object and writes it into a Stream object. ReadMessage usa um Stream objeto e um tamanho máximo de cabeçalho e retorna um Message objeto.ReadMessage takes a Stream object and a maximum header size and returns a Message object.
Construtores
| MessageEncoder() |
Inicializa uma nova instância da classe MessageEncoder.Initializes a new instance of the MessageEncoder class. |
Propriedades
| ContentType |
Quando substituído em uma classe derivada, obtém o tipo de conteúdo MIME usado pelo codificador.When overridden in a derived class, gets the MIME content type used by the encoder. |
| MediaType |
Quando substituído em uma classe derivada, obtém o valor de tipo de mídia usado pelo codificador.When overridden in a derived class, gets the media type value that is used by the encoder. |
| MessageVersion |
Quando substituído em uma classe derivada, obtém o valor de versão de mensagem usado pelo codificador.When overridden in a derived class, gets the message version value that is used by the encoder. |
Métodos
| BeginWriteMessage(Message, Stream, AsyncCallback, Object) |
Inicia a gravação de mensagem para o codificador de mensagem com a mensagem, o fluxo, o retorno de chamada e o estado especificados.Starts the writing of message for the message encoder with specified message, stream, callback and state. |
| EndWriteMessage(IAsyncResult) |
Termina a gravação de mensagens para o codificador de mensagem.Ends the writing of messages for the message encoder. |
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual.Determines whether the specified object is equal to the current object. (Herdado de Object) |
| GetHashCode() |
Serve como a função de hash padrão.Serves as the default hash function. (Herdado de Object) |
| GetProperty<T>() |
Retorna um objeto tipado solicitado, se presente, da camada apropriada na pilha de canais.Returns a typed object requested, if present, from the appropriate layer in the channel stack. |
| GetType() |
Obtém o Type da instância atual.Gets the Type of the current instance. (Herdado de Object) |
| IsContentTypeSupported(String) |
Retorna um valor que indica se um valor de tipo de conteúdo de nível de mensagem especificado tem suporte no codificador de mensagem.Returns a value that indicates whether a specified message-level content-type value is supported by the message encoder. |
| MemberwiseClone() |
Cria uma cópia superficial do Object atual.Creates a shallow copy of the current Object. (Herdado de Object) |
| ReadMessage(ArraySegment<Byte>, BufferManager) |
Quando substituído em uma classe derivada, lê uma mensagem de um buffer especificado.When overridden in a derived class, reads a message from a specified buffer. |
| ReadMessage(ArraySegment<Byte>, BufferManager, String) |
Quando substituído em uma classe derivada, lê uma mensagem de um fluxo especificado.When overridden in a derived class, reads a message from a specified stream. |
| ReadMessage(Stream, Int32) |
Quando substituído em uma classe derivada, lê uma mensagem de um fluxo especificado.When overridden in a derived class, reads a message from a specified stream. |
| ReadMessage(Stream, Int32, String) |
Quando substituído em uma classe derivada, lê uma mensagem de um fluxo especificado.When overridden in a derived class, reads a message from a specified stream. |
| ToString() |
Retorna o tipo de conteúdo usado pelo codificador de mensagem.Returns the content type that is used by the message encoder. |
| WriteMessage(Message, Int32, BufferManager) |
Grava uma mensagem menor do que um tamanho especificado em um buffer de matriz de bytes.Writes a message less than a specified size to a byte array buffer. |
| WriteMessage(Message, Int32, BufferManager, Int32) |
Quando substituído em uma classe derivada, grava uma mensagem de um tamanho menor que o especificado em um buffer de matriz de bytes no deslocamento especificado.When overridden in a derived class, writes a message of less than a specified size to a byte array buffer at the specified offset. |
| WriteMessage(Message, Stream) |
Quando substituído em uma classe derivada, grava uma mensagem a um fluxo especificado.When overridden in a derived class, writes a message to a specified stream. |