ServiceBehaviorAttribute.IgnoreExtensionDataObject 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置一个值,该值指定是否将未知序列化数据发送到网络上。
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) 生成架构无效的实例! 如果一定要严格遵从架构,则可以将 IgnoreExtensionDataObject 设置为 true
,以关闭此重新发出行为。
无论设置如何 IgnoreExtensionDataObject ,WCF 始终处理已知数据 () ,在额外数据传入时不会引发异常。 还可以使用 <应用程序配置文件中的 dataContractSerializer> 元素设置此属性。