ServiceBehaviorAttribute.IgnoreExtensionDataObject Proprietà
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à
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.