ServiceBehaviorAttribute.IgnoreExtensionDataObject Właściwość
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Pobiera lub ustawia wartość określającą, czy wysyłać nieznane dane serializacji do przewodu.
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
Wartość właściwości
true
jeśli nieznane dane serializacji nigdy nie są wysyłane; w przeciwnym razie , false
. Wartość domyślna to false
.
Przykłady
W poniższym przykładzie pokazano użycie IgnoreExtensionDataObject i implementację elementu IExtensibleDataObject. W tym przykładzie z ustawioną IgnoreExtensionDataObject wartością false
, dodatkowe dane, o których klient wie, jest zaokrąglony z powrotem do klienta.
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
}
}
Uwagi
Jeśli typ implementuje IExtensibleDataObject interfejs, przechowuje wszelkie dodatkowe dane, które nie wiedzą o tym podczas deserializacji do tego typu. Jeśli na przykład typ Person
zawiera elementy członkowskie FirstName
i LastName
, a element o nazwie PhoneNumber
jest przechowywany. Po późniejszej serializacji typu PhoneNumber
zostanie ponownie wyemitowany. Problem polega na tym, że schemat wyeksportowany Person
przez usługę ma FirstName
tylko element i LastName
, więc Windows Communication Foundation (WCF) generuje nieprawidłowe wystąpienie schematu. Jeśli ścisła zgodność schematu jest ważna, możesz ustawić IgnoreExtensionDataObject ustawienie , aby wyłączyć true
to zachowanie ponownego emitowania.
Niezależnie od IgnoreExtensionDataObject ustawienia, program WCF zawsze przetwarza znane dane (zarówno w systemie, jak i na wył.) i nie zgłasza wyjątków, gdy są dostępne dodatkowe dane. Tę właściwość można również ustawić przy użyciu <elementu dataContractSerializer> w pliku konfiguracji aplikacji.