次の方法で共有


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 の実装を示しています。 この例では、IgnoreExtensionDataObjectfalse に設定することで、クライアントが認識する追加データがクライアントにそのまま返送 (ラウンドトリップ) されます。

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、Communication Foundation (WCF) Windowsスキーマが無効なインスタンスを生成することです。 厳しいスキーマ コンプライアンスが重要な場合は、IgnoreExtensionDataObjecttrue に設定すると、この再発行動作をオフにすることができます。

設定に関係なく IgnoreExtensionDataObject 、WCF は常に既知のデータ (入力と出力の両方) を処理し、余分なデータが入ったときに例外をスローしません。 このプロパティは、アプリケーション構成ファイルの <dataContractSerializer> 要素を使用して設定することもできます。

適用対象