MessageEncodingBindingElement 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.
Elemen pengikatan yang menentukan versi pesan yang digunakan untuk mengodekan pesan.
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
- Warisan
- Turunan
Contoh
Contoh kode berikut menunjukkan cara mengimplementasikan kelas yang berasal dari 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
}
Keterangan
Pengodean adalah proses mengubah pesan menjadi urutan byte. Decoding adalah proses terbalik. Windows Communication Foundation (WCF) mencakup tiga jenis pengodean untuk pesan SOAP: Teks, Biner dan Mekanisme Pengoptimalan Transmisi Pesan (MTOM).
Gunakan kelas ini jika Anda ingin menerapkan encoder pesan kustom. Untuk menerapkan encoder pesan kustom Anda sendiri, Anda harus menyediakan implementasi kustom dari tiga kelas dasar abstrak berikut:
Ambil alih Encoder untuk mengembalikan instance kustom MessageEncoder Anda. Ambil alih CreateMessageEncoderFactory metode untuk mengembalikan instans pabrik ini.
Jenis apa pun yang berasal dari MessageEncodingBindingElement bertanggung jawab untuk memperbarui versi pengikatan SOAP dalam dokumen WSDL yang dihasilkan untuk layanan. Ini dilakukan dengan menerapkan ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) metode untuk memodifikasi WSDL yang dihasilkan.
Windows Communication Foundation (WCF) menyediakan tiga jenis elemen pengikatan yang berasal dari MessageEncodingBindingElement kelas yang dapat menyediakan pengodean teks, biner, dan Message Transmission Optimization Mechanism (MTOM).
TextMessageEncodingBindingElement: yang paling dapat dioperasikan, tetapi encoder yang paling tidak efisien untuk pesan XML. Layanan Web atau klien layanan Web umumnya dapat memahami XML tekstual. Namun, mengirimkan blok besar data biner sebagai teks tidak efisien.
BinaryMessageEncodingBindingElement: mewakili elemen pengikatan yang menentukan pengodean karakter dan penerapan versi pesan yang digunakan untuk pesan XML berbasis biner. Ini paling efisien tetapi paling tidak dapat dioperasikan dari opsi pengodean.
MtomMessageEncodingBindingElement: mewakili elemen pengikatan yang menentukan pengodean karakter dan penerapan versi pesan yang digunakan untuk pesan menggunakan pengodean Message Transmission Optimization Mechanism (MTOM). MTOM adalah teknologi yang efisien untuk mengirimkan data biner dalam pesan WCF. Encoder MTOM mencoba menyeimbangkan efisiensi dan interoperabilitas. Pengodean MTOM mengirimkan sebagian besar XML dalam bentuk tekstual, tetapi mengoptimalkan blok besar data biner dengan mengirimkannya as-is, tanpa konversi ke teks.
Konstruktor
| Nama | Deskripsi |
|---|---|
| MessageEncodingBindingElement() |
Menginisialisasi instans baru dari kelas MessageEncodingBindingElement. |
| MessageEncodingBindingElement(MessageEncodingBindingElement) |
Menginisialisasi instans baru kelas yang diinisialisasi MessageEncodingBindingElement dari elemen yang ada. |
Properti
| Nama | Deskripsi |
|---|---|
| MessageVersion |
Saat ditimpa di kelas turunan, mendapatkan atau mengatur versi pesan yang dapat ditangani oleh encoder pesan yang dihasilkan oleh pabrik encoder pesan. |
Metode
| Nama | Deskripsi |
|---|---|
| BuildChannelFactory<TChannel>(BindingContext) |
Menginisialisasi pabrik saluran untuk menghasilkan saluran dari jenis tertentu dari konteks pengikatan. (Diperoleh dari BindingElement) |
| BuildChannelListener<TChannel>(BindingContext) |
Menginisialisasi pendengar saluran untuk menerima saluran dari jenis tertentu dari konteks pengikatan. (Diperoleh dari BindingElement) |
| CanBuildChannelFactory<TChannel>(BindingContext) |
Mengembalikan nilai yang menunjukkan apakah elemen pengikatan dapat membangun pabrik saluran untuk jenis saluran tertentu. (Diperoleh dari BindingElement) |
| CanBuildChannelListener<TChannel>(BindingContext) |
Mengembalikan nilai yang menunjukkan apakah elemen pengikatan dapat membangun pendengar untuk jenis saluran tertentu. (Diperoleh dari BindingElement) |
| Clone() |
Saat ditimpa di kelas turunan, mengembalikan salinan objek elemen pengikatan. (Diperoleh dari BindingElement) |
| CreateMessageEncoderFactory() |
Saat ditimpa di kelas turunan, membuat pabrik untuk memproduksi 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>(BindingContext) |
Mengembalikan objek yang dititik yang diminta, jika ada, dari lapisan yang sesuai di tumpukan saluran. |
| GetType() |
Mendapatkan Type instans saat ini. (Diperoleh dari Object) |
| MemberwiseClone() |
Membuat salinan dangkal dari Objectsaat ini. (Diperoleh dari Object) |
| ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |