ServiceBehaviorAttribute.IgnoreExtensionDataObject Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bilinmeyen serileştirme verilerinin kabloya gönderilip gönderilmeymeyeceğini belirten bir değer alır veya ayarlar.
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
Özellik Değeri
true bilinmeyen serileştirme verileri hiçbir zaman gönderilmezse; aksi takdirde , false. Varsayılan değer: false.
Örnekler
Aşağıdaki örnekte ve uygulamasının IgnoreExtensionDataObject kullanımı gösterilmektedir IExtensibleDataObject. Bu örnekte, ayarı olarak ayarlanmış falseolan bu örnekte, IgnoreExtensionDataObject istemcinin bildiği ek veriler istemciye geri yuvarlanmış durumdadır.
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
}
}
Açıklamalar
Bir tür arabirimi uygularsa IExtensibleDataObject , bu türe seri durumdan çıkarılırken kablo üzerinden gelen hakkında bilmediği ek verileri depolar. Örneğin, bir türün Person üyeleri FirstName ve varsa ve LastNameadlı PhoneNumber bir öğe gelirse, depolanır. Daha sonra türü seri hale getirildiğinde, PhoneNumber yeniden gönderilir. Sorun, bu hizmet tarafından dışarı aktarılan şemada Person yalnızca ve LastNameolmasıdırFirstName, bu nedenle Windows Communication Foundation (WCF) şema geçersiz bir örnek oluşturur! Sıkı şema uyumluluğu önemliyse, bu yeniden yayma davranışını kapatmak için true olarak ayarlayabilirsinizIgnoreExtensionDataObject.
Ayarı ne olursa olsun IgnoreExtensionDataObject , WCF bilinen verileri her zaman işler (hem içeri hem de dışarı) ve ek veriler geldiğinde özel durumlar oluşturmaz. Bu özelliği, bir uygulama yapılandırma dosyasındaki <dataContractSerializer> öğesini kullanarak da ayarlayabilirsiniz.