MessageEncoder Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Encoder adalah komponen yang digunakan untuk menulis pesan ke streaming dan membaca pesan dari aliran.
public ref class MessageEncoder abstract
public abstract class MessageEncoder
type MessageEncoder = class
Public MustInherit Class MessageEncoder
- Warisan
-
MessageEncoder
Contoh
Kode berikut menunjukkan contoh kelas yang berasal dari 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();
}
Keterangan
MessageEncoder adalah kelas dasar yang menyediakan implementasi yang mendukung jenis konten dan versi pesan Multipurpose Internet Mail Extensions (MIME), dan menentukan antarmuka untuk serialisasi dan deserialisasi pesan sesuai dengan jenis konten tersebut. Gunakan sebagai kelas dasar untuk menulis encoder kustom Anda sendiri.
Gunakan kelas ini jika Anda ingin menerapkan encoder pesan kustom. Untuk mengimplementasikan encoder pesan kustom Anda sendiri, Anda harus menyediakan implementasi kustom dari kelas dasar abstrak berikut:
Ambil alih Encoder untuk mengembalikan instance kustom MessageEncoder Anda. Kemudian kawat kustom MessageEncoderFactory Anda ke tumpukan elemen pengikatan yang digunakan untuk mengonfigurasi layanan atau klien dengan mengambil alih CreateMessageEncoderFactory metode untuk mengembalikan instans pabrik ini.
Tugas konversi antara representasi dalam memori pesan dan representasi SET Informasi XML (Infoset) yang dapat ditulis ke aliran dienkapsulasi dalam MessageEncoder kelas, yang paling umum berfungsi sebagai pabrik untuk pembaca XML dan penulis XML yang mendukung jenis pengodean XML tertentu.
Metode kunci pada MessageEncoder adalah WriteMessage dan ReadMessage. WriteMessage Message mengambil objek dan menulisnya ke dalam objekStream. ReadMessage mengambil Stream objek dan ukuran header maksimum dan mengembalikan Message objek.
Konstruktor
| Nama | Deskripsi |
|---|---|
| MessageEncoder() |
Menginisialisasi instans baru dari kelas MessageEncoder. |
Properti
| Nama | Deskripsi |
|---|---|
| ContentType |
Saat ditimpa di kelas turunan, mendapatkan jenis konten MIME yang digunakan oleh encoder. |
| MediaType |
Ketika ditimpa dalam kelas turunan, mendapatkan nilai jenis media yang digunakan oleh encoder. |
| MessageVersion |
Saat ditimpa di kelas turunan, mendapatkan nilai versi pesan yang digunakan oleh encoder. |
Metode
| Nama | Deskripsi |
|---|---|
| BeginWriteMessage(Message, Stream, AsyncCallback, Object) |
Memulai penulisan pesan untuk encoder pesan dengan pesan, streaming, panggilan balik, dan status tertentu. |
| EndWriteMessage(IAsyncResult) |
Mengakhiri penulisan pesan untuk encoder pesan. |
| Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
| GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
| GetProperty<T>() |
Mengembalikan objek yang dititik yang diminta, jika ada, dari lapisan yang sesuai di tumpukan saluran. |
| GetType() |
Mendapatkan Type instans saat ini. (Diperoleh dari Object) |
| IsContentTypeSupported(String) |
Mengembalikan nilai yang menunjukkan apakah nilai tipe konten tingkat pesan tertentu didukung oleh encoder pesan. |
| MemberwiseClone() |
Membuat salinan dangkal dari Objectsaat ini. (Diperoleh dari Object) |
| ReadMessage(ArraySegment<Byte>, BufferManager, String) |
Saat ditimpa di kelas turunan, membaca pesan dari aliran tertentu. |
| ReadMessage(ArraySegment<Byte>, BufferManager) |
Saat ditimpa di kelas turunan, membaca pesan dari buffer tertentu. |
| ReadMessage(Stream, Int32, String) |
Saat ditimpa di kelas turunan, membaca pesan dari aliran tertentu. |
| ReadMessage(Stream, Int32) |
Saat ditimpa di kelas turunan, membaca pesan dari aliran tertentu. |
| ReadMessageAsync(ArraySegment<Byte>, BufferManager, String) |
Encoder adalah komponen yang digunakan untuk menulis pesan ke streaming dan membaca pesan dari aliran. |
| ReadMessageAsync(Stream, Int32, String) |
Encoder adalah komponen yang digunakan untuk menulis pesan ke streaming dan membaca pesan dari aliran. |
| ToString() |
Mengembalikan tipe konten yang digunakan oleh encoder pesan. |
| WriteMessage(Message, Int32, BufferManager, Int32) |
Saat ditimpa di kelas turunan, menulis pesan dengan ukuran kurang dari yang ditentukan ke buffer array byte pada offset yang ditentukan. |
| WriteMessage(Message, Int32, BufferManager) |
Menulis pesan kurang dari ukuran yang ditentukan ke buffer array byte. |
| WriteMessage(Message, Stream) |
Saat ditimpa di kelas turunan, menulis pesan ke aliran tertentu. |
| WriteMessageAsync(Message, Int32, BufferManager, Int32) |
Encoder adalah komponen yang digunakan untuk menulis pesan ke streaming dan membaca pesan dari aliran. |
| WriteMessageAsync(Message, Stream) |
Encoder adalah komponen yang digunakan untuk menulis pesan ke streaming dan membaca pesan dari aliran. |