MessageEncodingBindingElement Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Element vazby, který určuje verzi zprávy použité ke kódování zpráv.
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
- Dědičnost
- Odvozené
Příklady
Následující příklad kódu ukazuje, jak implementovat třídu odvozenou z 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
}
Poznámky
Kódování je proces transformace zprávy na sekvenci bajtů. Dekódování je opačný proces. Windows Communication Foundation (WCF) obsahuje tři typy kódování zpráv SOAP: Text, Binary a Message Transmission Optimization Mechanism (MTOM).
Tuto třídu použijte, pokud chcete implementovat vlastní kodér zpráv. Pokud chcete implementovat vlastní kodér zpráv, musíte poskytnout vlastní implementace následujících tří abstraktních základních tříd:
Přepište, Encoder aby se vrátila instance vlastního MessageEncoderobjektu . Přepište metodu CreateMessageEncoderFactory pro vrácení instance této továrny.
Jakýkoli typ, který je odvozen z MessageEncodingBindingElement , je zodpovědný za aktualizaci verze vazby SOAP v dokumentu WSDL vygenerovaném pro službu. To se provádí implementací ExportEndpoint(WsdlExporter, WsdlEndpointConversionContext) metody pro úpravu vygenerovaného WSDL.
Windows Communication Foundation (WCF) poskytuje tři typy vazeb elementů odvozených z MessageEncodingBindingElement třídy, které mohou poskytovat kódování textu, binárního kódu a mechanismu optimalizace přenosu zpráv (MTOM).
TextMessageEncodingBindingElement: nejvíce interoperabilní, ale nejméně efektivní kodér pro zprávy XML. Webová služba nebo klient webové služby obecně rozumí textovému kódu XML. Přenos velkých bloků binárních dat jako textu však není efektivní.
BinaryMessageEncodingBindingElement: představuje element vazby, který určuje kódování znaků a správu verzí zpráv používaných pro binární zprávy XML. To je nejúčinnější, ale nejméně interoperabilní z možností kódování.
MtomMessageEncodingBindingElement: představuje element vazby, který určuje kódování znaků a správu verzí zpráv používané pro zprávu pomocí mechanismu MTOM (Message Transmission Optimization Mechanism). MTOM je efektivní technologie pro přenos binárních dat ve zprávách WCF. Kodér MTOM se snaží vyvážit efektivitu a interoperabilitu. Kódování MTOM přenáší většinu XML v textové podobě, ale optimalizuje velké bloky binárních dat tím, že je přenáší tak, jak jsou, bez převodu na text.
Konstruktory
MessageEncodingBindingElement() |
Inicializuje novou instanci MessageEncodingBindingElement třídy. |
MessageEncodingBindingElement(MessageEncodingBindingElement) |
Inicializuje novou instanci MessageEncodingBindingElement třídy inicializované z existujícího elementu. |
Vlastnosti
MessageVersion |
Při přepsání v odvozené třídě získá nebo nastaví verzi zprávy, která může být zpracována kodéry zpráv vytvořené továrnou kodéru zpráv. |
Metody
BuildChannelFactory<TChannel>(BindingContext) |
Inicializuje objekt pro vytváření kanálů zadaného typu z kontextu vazby. (Zděděno od BindingElement) |
BuildChannelListener<TChannel>(BindingContext) |
Inicializuje naslouchací proces kanálu pro příjem kanálů zadaného typu z kontextu vazby. (Zděděno od BindingElement) |
CanBuildChannelFactory<TChannel>(BindingContext) |
Vrátí hodnotu, která označuje, zda element vazby může vytvořit kanál factory pro konkrétní typ kanálu. (Zděděno od BindingElement) |
CanBuildChannelListener<TChannel>(BindingContext) |
Vrátí hodnotu, která označuje, zda element vazby může vytvořit naslouchací proces pro konkrétní typ kanálu. (Zděděno od BindingElement) |
Clone() |
Při přepsání v odvozené třídě vrátí kopii objektu elementu vazby. (Zděděno od BindingElement) |
CreateMessageEncoderFactory() |
Při přepsání v odvozené třídě vytvoří továrnu pro výrobu kodérů zpráv. |
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetProperty<T>(BindingContext) |
Vrátí zadaný objekt požadovaný, pokud je k dispozici, z příslušné vrstvy v zásobníku kanálů. |
GetType() |
Získá aktuální Type instanci. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (Zděděno od Object) |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |