Udostępnij za pośrednictwem


ServiceBehaviorAttribute.IgnoreExtensionDataObject Właściwość

Definicja

Pobiera lub ustawia wartość określającą, czy wysyłać nieznane dane serializacji do przewodu.

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

Wartość właściwości

Boolean

true jeśli nieznane dane serializacji nigdy nie są wysyłane; w przeciwnym razie , false. Wartość domyślna to false.

Przykłady

W poniższym przykładzie pokazano użycie IgnoreExtensionDataObject i implementację elementu IExtensibleDataObject. W tym przykładzie z ustawioną IgnoreExtensionDataObject wartością false, dodatkowe dane, o których klient wie, jest zaokrąglony z powrotem do klienta.

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

Uwagi

Jeśli typ implementuje IExtensibleDataObject interfejs, przechowuje wszelkie dodatkowe dane, które nie wiedzą o tym podczas deserializacji do tego typu. Jeśli na przykład typ Person zawiera elementy członkowskie FirstName i LastName, a element o nazwie PhoneNumber jest przechowywany. Po późniejszej serializacji typu PhoneNumber zostanie ponownie wyemitowany. Problem polega na tym, że schemat wyeksportowany Person przez usługę ma FirstName tylko element i LastName, więc Windows Communication Foundation (WCF) generuje nieprawidłowe wystąpienie schematu. Jeśli ścisła zgodność schematu jest ważna, możesz ustawić IgnoreExtensionDataObject ustawienie , aby wyłączyć true to zachowanie ponownego emitowania.

Niezależnie od IgnoreExtensionDataObject ustawienia, program WCF zawsze przetwarza znane dane (zarówno w systemie, jak i na wył.) i nie zgłasza wyjątków, gdy są dostępne dodatkowe dane. Tę właściwość można również ustawić przy użyciu <elementu dataContractSerializer> w pliku konfiguracji aplikacji.

Dotyczy