Sdílet prostřednictvím


ServiceBehaviorAttribute.IgnoreExtensionDataObject Vlastnost

Definice

Získá nebo nastaví hodnotu, která určuje, zda se mají odesílat neznámá serializační data do drátu.

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

Hodnota vlastnosti

truepokud se neznámá data serializace nikdy neodesílají; v opačném případě . false Výchozí hodnota je false.

Příklady

Následující příklad ukazuje použití IgnoreExtensionDataObject a implementaci IExtensibleDataObject. V této ukázce s nastavenou IgnoreExtensionDataObject na falsehodnotu extra data, o které klient ví, se přepne zpět 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
  }
}

Poznámky

Pokud typ implementuje IExtensibleDataObject rozhraní, uloží všechna další data, o kterých neví, že při deserializaci do daného typu dojde k přenosu. Pokud například typ Person obsahuje členy FirstName a LastNamea volá PhoneNumber se prvek, je uložen. Při pozdější serializaci typu PhoneNumber se znovu vygeneruje. Problémem je, že schéma pro Person exportované pomocí této služby má FirstName pouze a LastName, takže Windows Communication Foundation (WCF) generuje instanci typu schéma-neplatný! Pokud je dodržování striktního schématu důležité, můžete nastavit IgnoreExtensionDataObject , aby true se toto chování znovu vygenerování vypnulo.

IgnoreExtensionDataObject Bez ohledu na nastavení WCF vždy zpracovává známá data (v i mimo) a nevyvolá výjimky, když přicházejí další data. Tuto vlastnost můžete také nastavit pomocí <prvku dataContractSerializer> v konfiguračním souboru aplikace.

Platí pro