Compartilhar via


ServiceBehaviorAttribute.IgnoreExtensionDataObject Propriedade

Definição

Obtém ou define um valor que especifica se dados de serialização desconhecidos serão enviados na conexão.

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 da propriedade

Boolean

true se os dados de serialização desconhecidos nunca forem enviados; caso contrário, false. O padrão é false.

Exemplos

O exemplo a seguir mostra o uso e IgnoreExtensionDataObject a implementação de IExtensibleDataObject. Neste exemplo, com IgnoreExtensionDataObject definido como false, os dados extras que o cliente conhece são arredondado de volta para o cliente.

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

Comentários

Se um tipo implementar a IExtensibleDataObject interface, ele armazenará qualquer dado extra que ele não saiba sobre isso será fornecido ao desserializar nesse tipo. Por exemplo, se um tipo Person tiver membros FirstName e LastNameum elemento chamado PhoneNumber entrar, ele será armazenado. Quando posteriormente serializar o tipo, PhoneNumber será remetido. O problema é que o esquema para Person exportado por esse serviço só tem FirstName eLastName, portanto, Windows WCF (Communication Foundation) gera uma instância inválida por esquema! Se a conformidade estrita do esquema for importante, você poderá definir IgnoreExtensionDataObject para true desativar esse comportamento de nova emissão.

Independentemente IgnoreExtensionDataObject da configuração, o WCF sempre processa dados conhecidos (dentro e fora) e não gera exceções quando os dados extras entram. Você também pode definir essa propriedade usando o <elemento dataContractSerializer> em um arquivo de configuração de aplicativo.

Aplica-se a