ServiceBehaviorAttribute.IgnoreExtensionDataObject Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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
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.