ServiceBehaviorAttribute.IgnoreExtensionDataObject Vlastnost
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í.
Získá nebo nastaví hodnotu, která určuje, zda se mají odesílat neznámá serializační data do drátu.
public:
property bool IgnoreExtensionDataObject { bool get(); void set(bool value); };
public bool IgnoreExtensionDataObject { get; set; }
member this.IgnoreExtensionDataObject : bool with get, set
Public Property IgnoreExtensionDataObject As Boolean
Hodnota vlastnosti
true
pokud se neznámá data serializace nikdy neodesílají; v opačném případě . false
Výchozí formát je false
.
Příklady
Následující příklad ukazuje použití IgnoreExtensionDataObject a implementaci IExtensibleDataObject. V této ukázce s IgnoreExtensionDataObject nastavenou na false
extra data, o které klient ví, jsou zpět do klienta zaokrouhlená.
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Xml;
namespace Microsoft.WCF.Documentation
{
[ServiceContract(Namespace = "http://microsoft.wcf.documentation")]
public interface ISampleService{
[OperationContract]
Person SampleMethod(Person personParam);
}
[DataContract(Name="OriginalPerson", Namespace="http://microsoft.wcf.documentation")]
public class Person : IExtensibleDataObject
{
[DataMember]
public string firstName;
[DataMember]
public string lastName;
[DataMember]
public string Message;
[DataMember]
public XmlNode[] Blob;
#region IExtensibleDataObject Members
private ExtensionDataObject data = null;
public ExtensionDataObject ExtensionData
{
get
{
return this.data;
}
set
{
this.data = value;
}
}
#endregion
}
[ServiceBehaviorAttribute(
IgnoreExtensionDataObject=false,
ValidateMustUnderstand=false
)]
class SampleService : ISampleService
{
#region ISampleService Members
public Person SampleMethod(Person msg)
{
Console.WriteLine(msg.firstName);
Console.WriteLine(msg.lastName);
Console.WriteLine(msg.Message);
msg.lastName = "First Name";
msg.firstName = "Last Name";
msg.Message = "This is the Reply message.";
return msg;
}
#endregion
}
}
Poznámky
Pokud typ implementuje IExtensibleDataObject rozhraní, uloží všechna další data, která neví o tom, že přichází přes drát při deserializaci do daného typu. Pokud má například typ Person
členy FirstName
a LastName
prvek, který se volá PhoneNumber
, uloží se. Při pozdější serializaci typu PhoneNumber
se znovu vygeneruje. Problém spočívá v tom, že schéma pro Person
exportované danou službou má FirstName
pouze a LastName
, takže Windows Communication Foundation (WCF) vygeneruje instanci schématu neplatnou! Pokud je dodržování předpisů striktním schématem důležité, můžete IgnoreExtensionDataObject true
toto chování znovu vypnout.
IgnoreExtensionDataObject Bez ohledu na nastavení wcf vždy zpracovává známá data (v i mimo) a nevyvolá výjimky, když se přijdou další data. Tuto vlastnost můžete také nastavit pomocí <prvku dataContractSerializer> v konfiguračním souboru aplikace.