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
、Communication Foundation (WCF) Windowsスキーマが無効なインスタンスを生成することです。 厳しいスキーマ コンプライアンスが重要な場合は、IgnoreExtensionDataObject を true
に設定すると、この再発行動作をオフにすることができます。
設定に関係なく IgnoreExtensionDataObject 、WCF は常に既知のデータ (入力と出力の両方) を処理し、余分なデータが入ったときに例外をスローしません。 このプロパティは、アプリケーション構成ファイルの <dataContractSerializer> 要素を使用して設定することもできます。