ServiceBehaviorAttribute.IgnoreExtensionDataObject Свойство

Определение

Возвращает или задает значение, которое указывает, требуется ли передавать по линии связи неизвестные данные сериализации.

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

Значение свойства

Boolean

true, если неизвестные данные сериализации никогда не передаются; в противном случае — false. Значение по умолчанию — false.

Примеры

В следующем примере кода показано использование IgnoreExtensionDataObject и реализация IExtensibleDataObject. В этом примере, где для IgnoreExtensionDataObject задано false, известные клиенту дополнительные данные передаются клиенту и обратно.

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

Комментарии

Если тип реализует IExtensibleDataObject интерфейс, он сохраняет дополнительные данные, которые не знают об этом при десериализации в этот тип. Например, если тип Person имеет члены FirstName и LastName и для него поступает элемент PhoneNumber, этот элемент сохраняется. При последующей сериализации типа объект PhoneNumber создается заново. Проблема заключается в том, что схема, Person экспортируемая только этой службой, имеет FirstName и LastNameпоэтому Windows Communication Foundation (WCF) создает недопустимый экземпляр схемы! Если важно строгое соответствие схеме, можно установить для параметра IgnoreExtensionDataObject значение true, чтобы отключить повторное создание поведения.

Независимо от IgnoreExtensionDataObject параметра WCF всегда обрабатывает известные данные (как в, так и вне) и не создает исключения при возникновении дополнительных данных. Это свойство также можно задать с помощью <элемента dataContractSerializer> в файле конфигурации приложения.

Применяется к