ServiceBehaviorAttribute.IgnoreExtensionDataObject Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Dient zum Abrufen oder Festlegen eines Werts, der angibt, ob unbekannte Serialisierungsdaten an das Draht gesendet werden sollen.
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
Eigenschaftswert
truewenn unbekannte Serialisierungsdaten niemals gesendet werden; andernfalls . false Der Standardwert lautet false.
Beispiele
Das folgende Beispiel zeigt die Verwendung und IgnoreExtensionDataObject implementierung von IExtensibleDataObject. In diesem Beispiel mit IgnoreExtensionDataObject festgelegter Eigenschaft falsewerden die zusätzlichen Daten, die der Client kennt, auf den Client zurückgerundet.
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
}
}
Hinweise
Wenn ein Typ die IExtensibleDataObject Schnittstelle implementiert, speichert er zusätzliche Daten, über die er nicht weiß, dass dies über das Kabel erfolgt, wenn die Deserialisierung in diesen Typ erfolgt. Wenn ein Typ Person z. B. Member FirstName und LastNameein aufgerufenes PhoneNumber Element enthält, wird er gespeichert. Wenn Sie den Typ später serialisieren, PhoneNumber wird dieser erneut ausgegeben. Das Problem besteht darin, dass das Schema für Person den Export durch diesen Dienst nur verfügt FirstName und LastName, sodass Windows Communication Foundation (WCF) eine schema ungültige Instanz generiert! Wenn die strikte Schemakompatibilität wichtig ist, können Sie festlegen IgnoreExtensionDataObjecttrue , dass dieses Verhalten beim erneuten Ausstellen deaktiviert wird.
Unabhängig von der IgnoreExtensionDataObject Einstellung verarbeitet WCF immer bekannte Daten (sowohl in als auch außerhalb) und löst keine Ausnahmen aus, wenn zusätzliche Daten eingecheckt werden. Sie können diese Eigenschaft auch mithilfe des <dataContractSerializer-Elements> in einer Anwendungskonfigurationsdatei festlegen.