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.
Ruft einen Wert ab, der angibt, ob unbekannte Serialisierungsdaten gesendet werden sollen, oder legt ihn fest.
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
true
, wenn unbekannte Serialisierungsdaten nie gesendet werden, andernfalls false
. Der Standardwert ist false
.
Beispiele
Das folgende Beispiel veranschaulicht die Verwendung von IgnoreExtensionDataObject und eine Implementierung von IExtensibleDataObject. In diesem Beispiel, in dem IgnoreExtensionDataObject auf false
festgelegt ist, werden die zusätzlichen Daten, die dem Client bekannt sind, wieder zum Client zurückgeleitet.
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 es keine zusätzlichen Daten, die nicht über den Draht kommen, wenn die Deerialisierung in diesen Typ erfolgt. Wenn der Person
-Typ beispielsweise über die Member FirstName
und LastName
verfügt und ein Element mit der Bezeichnung PhoneNumber
eingeht, wird dieses gespeichert. Wenn der Typ später serialisiert wird, wird PhoneNumber
erneut ausgegeben. Das Problem besteht darin, dass das Schema für Person
den Export durch diesen Dienst nur vorhanden ist FirstName
und LastName
, daher generiert Windows Communication Foundation (WCF) eine schema ungültige Instanz! Wenn die strikte Schemaeinhaltung wichtig ist, können Sie IgnoreExtensionDataObject auf true
festlegen, um dieses Verhalten der erneuten Ausgabe zu deaktivieren.
IgnoreExtensionDataObject Unabhängig von der Einstellung verarbeitet WCF immer bekannte Daten (sowohl in als auch aus), und löst keine Ausnahmen aus, wenn zusätzliche Daten vorhanden sind. Sie können diese Eigenschaft auch mithilfe des <DataContractSerializer-Elements> in einer Anwendungskonfigurationsdatei festlegen.