Bagikan melalui


ServiceBehaviorAttribute.IgnoreExtensionDataObject Properti

Definisi

Mendapatkan atau menetapkan nilai yang menentukan apakah akan mengirim data serialisasi yang tidak diketahui ke kawat.

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

Nilai Properti

true jika data serialisasi yang tidak diketahui tidak pernah dikirim; jika tidak, false. Defaultnya adalah false.

Contoh

Contoh berikut menunjukkan penggunaan IgnoreExtensionDataObject dan implementasi .IExtensibleDataObject Dalam sampel ini, dengan IgnoreExtensionDataObject diatur ke false, data tambahan yang diketahui klien disandingkan kembali ke klien.

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
  }
}

Keterangan

Jika jenis mengimplementasikan IExtensibleDataObject antarmuka, ia menyimpan data tambahan yang tidak diketahuinya tentang yang muncul di atas kawat saat deserialisasi ke dalam jenis tersebut. Misalnya, jika jenis Person memiliki anggota FirstName dan LastName, dan elemen yang disebut PhoneNumber masuk, maka akan disimpan. Ketika nanti menserialisasikan jenis, PhoneNumber akan dipancarkan kembali. Masalahnya adalah bahwa skema untuk Person diekspor oleh layanan tersebut hanya memiliki FirstName dan LastName, sehingga Windows Communication Foundation (WCF) menghasilkan instans yang tidak valid skema! Jika kepatuhan skema yang ketat penting, Anda dapat mengatur IgnoreExtensionDataObject ke true untuk menonaktifkan perilaku pemancaran ulang ini.

Terlepas dari pengaturannya IgnoreExtensionDataObject , WCF selalu memproses data yang diketahui (baik masuk maupun keluar) dan tidak melemparkan pengecualian ketika data tambahan masuk. Anda juga dapat mengatur properti ini menggunakan <elemen dataContractSerializer> dalam file konfigurasi aplikasi.

Berlaku untuk