Freigeben über


ServiceBehaviorAttribute.IgnoreExtensionDataObject Eigenschaft

Definition

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

Boolean

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.

Gilt für