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

属性值

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 类型具有 FirstNameLastName 成员,且有一个名为 PhoneNumber 的元素进入,则系统会存储该元素。 在以后序列化该类型时,会重新发出 PhoneNumber。 问题是,该服务导出的Person架构仅具有FirstNameLastName因此Windows Communication Foundation (WCF) 生成架构无效的实例! 如果一定要严格遵从架构,则可以将 IgnoreExtensionDataObject 设置为 true,以关闭此重新发出行为。

无论设置如何 IgnoreExtensionDataObject ,WCF 始终处理已知数据 () ,在额外数据传入时不会引发异常。 还可以使用 <应用程序配置文件中的 dataContractSerializer> 元素设置此属性。

适用于