MessageEncoder Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
De encoder is het onderdeel dat wordt gebruikt om berichten naar een stream te schrijven en berichten uit een stream te lezen.
public ref class MessageEncoder abstract
public abstract class MessageEncoder
type MessageEncoder = class
Public MustInherit Class MessageEncoder
- Overname
-
MessageEncoder
Voorbeelden
De volgende code toont een voorbeeld van een klasse die is afgeleid van 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();
}
Opmerkingen
MessageEncoder is een basisklasse die implementaties biedt die ondersteuning bieden voor een MIME-inhoudstype (Multipurpose Internet Mail Extensions) en berichtversie, en definieert de interface voor de serialisatie en deserialisatie van berichten op basis van dat inhoudstype. Gebruik deze als basisklasse voor het schrijven van uw eigen aangepaste encoder.
Gebruik deze klasse als u een aangepaste berichtcoderingsprogramma wilt implementeren. Als u uw eigen aangepaste berichtcoderingsprogramma wilt implementeren, moet u aangepaste implementaties van de volgende abstracte basisklassen opgeven:
Overschrijf het Encoder om een exemplaar van uw aangepaste MessageEncoderexemplaar te retourneren. Verbind vervolgens uw aangepaste MessageEncoderFactory bindingselementstack die wordt gebruikt om de service of client te configureren door de CreateMessageEncoderFactory methode te overschrijven om een exemplaar van deze factory te retourneren.
De taak van het converteren tussen de in-memory weergave van een bericht en een XML Information Set (Infoset)-weergave die naar een stroom kan worden geschreven, wordt ingekapseld in de MessageEncoder klasse, die meestal fungeert als een fabriek voor XML-lezers en XML-schrijvers die specifieke typen XML-coderingen ondersteunen.
De belangrijkste methoden zijn MessageEncoderWriteMessage en ReadMessage. WriteMessage neemt een Message object en schrijft het naar een Stream object. ReadMessage neemt een Stream object en een maximale koptekstgrootte en retourneert een Message object.
Constructors
| Name | Description |
|---|---|
| MessageEncoder() |
Initialiseert een nieuw exemplaar van de MessageEncoder klasse. |
Eigenschappen
| Name | Description |
|---|---|
| ContentType |
Wanneer deze wordt overschreven in een afgeleide klasse, haalt u het MIME-inhoudstype op dat door de encoder wordt gebruikt. |
| MediaType |
Wanneer deze wordt overschreven in een afgeleide klasse, haalt u de mediatypewaarde op die door de encoder wordt gebruikt. |
| MessageVersion |
Wanneer deze wordt overschreven in een afgeleide klasse, haalt u de waarde van de berichtversie op die door de encoder wordt gebruikt. |
Methoden
| Name | Description |
|---|---|
| BeginWriteMessage(Message, Stream, AsyncCallback, Object) |
Hiermee start u het schrijven van het bericht voor de berichtcoderingsprogramma met opgegeven bericht, stream, callback en status. |
| EndWriteMessage(IAsyncResult) |
Hiermee beëindigt u het schrijven van berichten voor de berichtcoderingsprogramma. |
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetProperty<T>() |
Retourneert een getypt object dat, indien aanwezig, is aangevraagd vanuit de juiste laag in de kanaalstack. |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| IsContentTypeSupported(String) |
Retourneert een waarde die aangeeft of een opgegeven inhoudstypewaarde op berichtniveau wordt ondersteund door de berichtcoderingsprogramma. |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| ReadMessage(ArraySegment<Byte>, BufferManager, String) |
Wanneer het bericht wordt overschreven in een afgeleide klasse, leest u een bericht uit een opgegeven stream. |
| ReadMessage(ArraySegment<Byte>, BufferManager) |
Wanneer deze wordt overschreven in een afgeleide klasse, leest u een bericht uit een opgegeven buffer. |
| ReadMessage(Stream, Int32, String) |
Wanneer het bericht wordt overschreven in een afgeleide klasse, leest u een bericht uit een opgegeven stream. |
| ReadMessage(Stream, Int32) |
Wanneer het bericht wordt overschreven in een afgeleide klasse, leest u een bericht uit een opgegeven stream. |
| ToString() |
Retourneert het inhoudstype dat wordt gebruikt door de berichtcoderingsprogramma. |
| WriteMessage(Message, Int32, BufferManager, Int32) |
Wanneer deze wordt overschreven in een afgeleide klasse, schrijft u een bericht van minder dan een opgegeven grootte naar een bytematrixbuffer op de opgegeven offset. |
| WriteMessage(Message, Int32, BufferManager) |
Hiermee schrijft u een bericht dat kleiner is dan een opgegeven grootte naar een bytematrixbuffer. |
| WriteMessage(Message, Stream) |
Wanneer deze wordt overschreven in een afgeleide klasse, schrijft u een bericht naar een opgegeven stream. |