Condividi tramite


ServiceBehaviorAttribute.IgnoreExtensionDataObject Proprietà

Definizione

Ottiene o imposta un valore che specifica se inviare i dati di serializzazione sconosciuti in transito.

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

Valore della proprietà

Boolean

true se i dati di serializzazione sconosciuti non vengono mai inviati; in caso contrario, false. Il valore predefinito è false.

Esempio

Nell'esempio seguente viene illustrato l'utilizzo della proprietà IgnoreExtensionDataObject e un'implementazione dell'interfaccia IExtensibleDataObject. In questo esempio, con IgnoreExtensionDataObject impostata su false, i dati aggiuntivi noti al client eseguono una sequenza di andata e ritorno al client.

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

Commenti

Se un tipo implementa l'interfaccia IExtensibleDataObject , archivia tutti i dati aggiuntivi su cui non sa che viene eseguito il collegamento quando si deserializzazione in tale tipo. Ad esempio, se un tipo Person possiede i membri FirstName e LastName e perviene un elemento denominato PhoneNumber, questo viene memorizzato. Quando viene in seguito eseguita la serializzazione del tipo, PhoneNumber verrà emesso di nuovo. Il problema è che lo schema per Person l'esportazione da tale servizio ha FirstName e LastName, quindi Windows Communication Foundation (WCF) genera un'istanza non valida dello schema. Se è importante una rigorosa conformità allo schema, è possibile impostare IgnoreExtensionDataObject su true per disattivare questo comportamento di riemissione.

Indipendentemente dall'impostazione IgnoreExtensionDataObject , WCF elabora sempre dati noti (sia in che out) e non genera eccezioni quando vengono inseriti dati aggiuntivi. È anche possibile impostare questa proprietà usando l'elemento <dataContractSerializer> in un file di configurazione dell'applicazione.

Si applica a