ServiceBehaviorAttribute.IgnoreExtensionDataObject Egenskap

Definition

Hämtar eller anger ett värde som anger om okända serialiseringsdata ska skickas till tråden.

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

Egenskapsvärde

trueom okända serialiseringsdata aldrig skickas; annars . false Standardvärdet är false.

Exempel

I följande exempel visas användningen av IgnoreExtensionDataObject och en implementering av IExtensibleDataObject. I det här exemplet, med IgnoreExtensionDataObject inställt på false, avrundas de extra data som klienten känner till tillbaka till klienten.

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
  }
}

Kommentarer

Om en typ implementerar gränssnittet lagrar den IExtensibleDataObject eventuella extra data som den inte känner till som kommer över kabeln när deserialiseras till den typen. Om en typ Person till exempel har medlemmar FirstName och LastName, och ett element med namnet PhoneNumber kommer in, lagras den. När du senare serialiserar typen PhoneNumber genereras den igen. Problemet är att schemat för Person som exporteras av tjänsten endast har FirstName och LastName, så Windows Communication Foundation (WCF) genererar en schema-ogiltig instans! Om strikt schemaefterlevnad är viktigt kan du ställa in IgnoreExtensionDataObject på för att true inaktivera det här återutgivna beteendet.

Oavsett IgnoreExtensionDataObject inställning bearbetar WCF alltid kända data (både in och ut) och utlöser inte undantag när extra data kommer in. Du kan också ange den här egenskapen med hjälp av elementet< dataContractSerializer> i en programkonfigurationsfil.

Gäller för