ServiceBehaviorAttribute.IgnoreExtensionDataObject Propiedad

Definición

Obtiene o establece un valor que especifica si enviar o no datos de serialización desconocidos hacia la conexión.

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

Valor de propiedad

Boolean

true si nunca se envían datos de serialización desconocidos; de lo contrario, false. De manera predeterminada, es false.

Ejemplos

En el siguiente ejemplo se muestra el uso de IgnoreExtensionDataObject y una implementación de IExtensibleDataObject. En este ejemplo, con IgnoreExtensionDataObject establecido como false, los datos adicionales que el cliente conoce regresan al cliente después de un viaje de ida y vuelta (round trip).

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

Comentarios

Si un tipo implementa la IExtensibleDataObject interfaz, almacena los datos adicionales que no sabe sobre eso a través de la conexión al deserializar en ese tipo. Por ejemplo, si un tipo Person tiene miembros FirstName y LastName, y entra un elemento llamado PhoneNumber, se almacena. Al serializar después el tipo, se remitirá PhoneNumber. El problema es que el esquema para Person exportado por ese servicio solo tiene FirstName y LastName, por lo que Windows Communication Foundation (WCF) genera una instancia no válida del esquema. Si la compatibilidad del esquema estricta es importante, puede establecer IgnoreExtensionDataObject como true para desactivar este comportamiento de reemisión.

Independientemente IgnoreExtensionDataObject de la configuración, WCF siempre procesa los datos conocidos (tanto dentro como fuera) y no produce excepciones cuando entran datos adicionales. También puede establecer esta propiedad mediante el <elemento dataContractSerializer> en un archivo de configuración de la aplicación.

Se aplica a