ServiceBehaviorAttribute.IgnoreExtensionDataObject Свойство
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает или задает значение, указывающее, следует ли отправлять неизвестные данные сериализации в провод.
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
Значение свойства
true Если неизвестные данные сериализации никогда не отправляются; falseв противном случае . Значение по умолчанию — false.
Примеры
В следующем примере показано использование IgnoreExtensionDataObject и реализация IExtensibleDataObject. В этом примере с IgnoreExtensionDataObject заданным значением falseдополнительных данных, о том, что клиент знает о том, что клиент споткнулся обратно клиенту.
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
}
}
Комментарии
Если тип реализует IExtensibleDataObject интерфейс, он сохраняет дополнительные данные, которые не знают об этом при десериализации в этом типе. Например, если тип Person содержит элементы FirstName и LastNameэлемент, который вызывается PhoneNumber , он сохраняется. При последующей сериализации типа PhoneNumber будет повторно выдаваться. Проблема заключается в том, что схема, экспортируемая только Person этой службой, имеет FirstName и LastNameпоэтому Windows Communication Foundation (WCF) создает недопустимый экземпляр схемы! Если важно строгое соответствие схем, можно IgnoreExtensionDataObjecttrue настроить для отключения этого повторного создания поведения.
Независимо от IgnoreExtensionDataObject параметра WCF всегда обрабатывает известные данные (как в, так и вне) и не создает исключения при возникновении дополнительных данных. Это свойство также можно задать с помощью <элемента dataContractSerializer> в файле конфигурации приложения.