ServiceBehaviorAttribute.IgnoreExtensionDataObject Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Obtient ou définit une valeur indiquant si des données de sérialisation inconnues doivent être envoyées sur le réseau.
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
Valeur de propriété
true
si les données de sérialisation inconnues ne sont jamais envoyées ; sinon false
. La valeur par défaut est false
.
Exemples
L'exemple suivant illustre l'utilisation de IgnoreExtensionDataObject et une implémentation de IExtensibleDataObject. Dans cet exemple, comme IgnoreExtensionDataObject a la valeur false
, les données supplémentaires connues par le client font l'objet d'un aller-retour vers le 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
}
}
Remarques
Si un type implémente l’interface IExtensibleDataObject , il stocke des données supplémentaires qu’il ne sait pas sur ce réseau lors de la désérialisation dans ce type. Par exemple, si un type Person
contient des membres FirstName
et LastName
et un élément appelé PhoneNumber
apparaît, il est stocké. Lors de la sérialisation ultérieure du type, PhoneNumber
est mis à nouveau. Le problème est que le schéma pour Person
exporté par ce service n’a FirstName
que etLastName
, par conséquent, Windows Communication Foundation (WCF) génère une instance non valide de schéma! Si la stricte conformité du schéma est primordiale, vous pouvez définir IgnoreExtensionDataObject sur true
pour désactiver ce comportement d'émission réitérée.
Quel que soit IgnoreExtensionDataObject le paramètre, WCF traite toujours les données connues (entrantes et sortantes) et ne lève pas d’exceptions lorsque des données supplémentaires entrent. Vous pouvez également définir cette propriété à l’aide de l’élément <dataContractSerializer> dans un fichier de configuration d’application.