ServiceBehaviorAttribute.IgnoreExtensionDataObject Propriedade
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
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 LastName
um 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.