MessageEncodingBindingElement Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Az üzenetek kódolásához használt üzenetverziót meghatározó kötési elem.
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
- Öröklődés
- Származtatott
Példák
Az alábbi példakód bemutatja, hogyan implementálhat egy osztályt, amely a következőből MessageEncodingBindingElementszármazik:
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
}
Megjegyzések
A kódolás az üzenet bájtok sorozatává alakításának folyamata. A dekódolás a fordított folyamat. A Windows kommunikációs alaprendszer (WCF) a SOAP-üzenetek kódolásának három típusát tartalmazza: Szöveg, Bináris és Üzenetátvitel optimalizálási mechanizmusa (MTOM).
Ezt az osztályt akkor használja, ha egyéni üzenetkódolót szeretne implementálni. A saját egyéni üzenetkódoló implementálásához az alábbi három absztrakt alaposztály egyéni implementációit kell megadnia:
Felül kell bírálni a Encoder-t, hogy visszaadjon egy példányt az egyéni MessageEncoder-ből. Felülbírálja a CreateMessageEncoderFactory gyár egy példányának visszaadására vonatkozó metódust.
Bármely olyan típus, amely a MessageEncodingBindingElement-ből származik, felelős a szolgáltatáshoz létrehozott WSDL-dokumentumban a SOAP-kötés verziójának frissítéséért. Ez a létrehozott WSDL módosítására szolgáló metódus implementálásával ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) történik.
Windows kommunikációs alaprendszer (WCF) a MessageEncodingBindingElement osztályból származó háromféle kötési elemet biztosít, amelyek szöveges, bináris és üzenetátviteli optimalizálási mechanizmus (MTOM) kódolását biztosítják.
TextMessageEncodingBindingElement: a leginkább együttműködő, de az XML-üzenetek legkevésbé hatékony kódolója. A webszolgáltatás vagy a webszolgáltatás-ügyfél általánosan megértheti a szöveges XML-t. A bináris adatok nagy blokkjainak szövegként való továbbítása azonban nem hatékony.
BinaryMessageEncodingBindingElement: a bináris xml-üzenetekhez használt karakterkódolást és üzenetverziót meghatározó kötési elemet jelöli. Ez a leghatékonyabb, de legkevésbé együttműködő a kódolási lehetőségek közül.
MtomMessageEncodingBindingElement: azt a kötési elemet jelöli, amely meghatározza az üzenethez használt karakterkódolást és -verziószámozást egy Üzenetátviteli optimalizálási mechanizmus (MTOM) kódolásával. Az MTOM egy hatékony technológia a bináris adatok WCF-üzenetekben való továbbításához. Az MTOM kódoló megpróbálja kiegyensúlyozni a hatékonyságot és az együttműködési képességet. Az MTOM kódolás a legtöbb XML-t szöveges formában továbbítja, de a bináris adatok nagy blokkjait optimalizálja azáltal, hogy as-istovábbítja őket, szöveggé alakítás nélkül.
Konstruktorok
| Name | Description |
|---|---|
| MessageEncodingBindingElement() |
Inicializálja a MessageEncodingBindingElement osztály új példányát. |
| MessageEncodingBindingElement(MessageEncodingBindingElement) |
Inicializálja az MessageEncodingBindingElement osztály új példányát egy meglévő elemből inicializálva. |
Tulajdonságok
| Name | Description |
|---|---|
| MessageVersion |
Ha egy származtatott osztályban felül van bírálva, lekéri vagy beállítja az üzenetverziót, amelyet az üzenetkódoló-előállító által létrehozott üzenetkódolók kezelhetnek. |
Metódusok
| Name | Description |
|---|---|
| BuildChannelFactory<TChannel>(BindingContext) |
Inicializál egy csatorna-előállítót egy adott típusú csatornák létrehozásához a kötési környezetből. (Öröklődés forrása BindingElement) |
| BuildChannelListener<TChannel>(BindingContext) |
Inicializál egy csatornafigyelőt egy adott típusú csatornák elfogadásához a kötési környezetből. (Öröklődés forrása BindingElement) |
| CanBuildChannelFactory<TChannel>(BindingContext) |
Egy értéket ad vissza, amely jelzi, hogy a kötési elem képes-e csatorna-előállítót létrehozni egy adott csatornatípushoz. (Öröklődés forrása BindingElement) |
| CanBuildChannelListener<TChannel>(BindingContext) |
Olyan értéket ad vissza, amely jelzi, hogy a kötési elem képes-e figyelőt létrehozni egy adott csatornatípushoz. (Öröklődés forrása BindingElement) |
| Clone() |
Ha egy származtatott osztályban felül van bírálva, a kötéselem-objektum másolatát adja vissza. (Öröklődés forrása BindingElement) |
| CreateMessageEncoderFactory() |
Ha felül van bírálva egy származtatott osztályban, létrehoz egy gyárat az üzenetkódolók előállításához. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetProperty<T>(BindingContext) |
A csatornaverem megfelelő rétegéből kért beírt objektumot adja vissza, ha van ilyen. |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |