Bagikan melalui


IContractBehavior Antarmuka

Definisi

Menerapkan metode yang dapat digunakan untuk memperpanjang perilaku run-time untuk kontrak baik dalam layanan atau aplikasi klien.

public interface class IContractBehavior
public interface IContractBehavior
type IContractBehavior = interface
Public Interface IContractBehavior
Turunan

Contoh

Contoh kode berikut mengasumsikan implementasi kustom IInstanceProvider yang disebut ObjectProviderBehavior yang menyediakan perilaku "singleton"; selalu mengembalikan instans layanan yang sama dan tidak mendaur ulangnya.

Untuk menyisipkan kustomisasi penyedia instans, contoh menunjukkan cara mengimplementasikan atribut kustom (SingletonBehaviorAttribute) yang menerapkan untuk menyisipkan penyedia instans IContractBehavior layanan kustom. Ini juga mengimplementasikan IContractBehaviorAttribute, yang mengikat penggunaannya ke ISampleService kontrak.

public class SingletonBehaviorAttribute : Attribute, IContractBehaviorAttribute, IContractBehavior
{

  #region IContractBehaviorAttribute Members

  public Type TargetContract
  {
    get { return typeof(ISampleService); }
  }

  #endregion

  #region IContractBehavior Members

  public void AddBindingParameters(ContractDescription description, ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection parameters)
  {
    return;
  }

  public void ApplyClientBehavior(ContractDescription description, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
  {
    return;
  }

  public void ApplyDispatchBehavior(ContractDescription description, ServiceEndpoint endpoint, DispatchRuntime dispatch)
  {
    dispatch.InstanceProvider = new ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.");
  }

  public void Validate(ContractDescription description, ServiceEndpoint endpoint)
  {
    return;
  }

  #endregion
}
Public Class SingletonBehaviorAttribute
    Inherits Attribute
    Implements IContractBehaviorAttribute, IContractBehavior

  #Region "IContractBehaviorAttribute Members"

  Public ReadOnly Property TargetContract() As Type Implements IContractBehaviorAttribute.TargetContract
    Get
        Return GetType(ISampleService)
    End Get
  End Property

  #End Region

  #Region "IContractBehavior Members"

  Public Sub AddBindingParameters(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal parameters As System.ServiceModel.Channels.BindingParameterCollection) Implements IContractBehavior.AddBindingParameters
    Return
  End Sub

  Public Sub ApplyClientBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal clientRuntime As ClientRuntime) Implements IContractBehavior.ApplyClientBehavior
    Return
  End Sub

  Public Sub ApplyDispatchBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal dispatch As DispatchRuntime) Implements IContractBehavior.ApplyDispatchBehavior
    dispatch.InstanceProvider = New ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.")
  End Sub

  Public Sub Validate(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint) Implements IContractBehavior.Validate
    Return
  End Sub

  #End Region
End Class

Keterangan

Terapkan IContractBehavior antarmuka untuk memodifikasi, memeriksa, atau memperluas beberapa aspek eksekusi di seluruh kontrak di tingkat aplikasi. Tidak seperti IServiceBehavior objek dan IEndpointBehavior , IContractBehavior objek tidak dapat ditambahkan ke runtime menggunakan file konfigurasi aplikasi; objek hanya dapat ditambahkan secara terprogram atau menggunakan atribut.

Untuk informasi selengkapnya tentang memilih antara perilaku layanan, titik akhir, dan kontrak, lihat Mengonfigurasi dan Memperpanjang Runtime dengan Perilaku.

  • AddBindingParameters Gunakan metode untuk menyediakan elemen pengikatan dengan data kustom untuk mendukung perilaku.

  • ApplyClientBehavior Gunakan metode untuk memodifikasi, memeriksa, atau menyisipkan ekstensi ke kontrak dalam aplikasi klien.

  • ApplyDispatchBehavior Gunakan metode untuk memodifikasi, memeriksa, atau menyisipkan ekstensi ke kontrak dalam aplikasi layanan.

  • Validate Gunakan metode untuk memastikan bahwa kontrak dapat mendukung fitur tertentu.

IContractBehavior objek dapat menggunakan salah satu metode ini, tetapi seringkali hanya satu yang penting; dalam kasus seperti itu, metode yang tidak digunakan dapat kembali tanpa nilai apa pun.

Nota

IContractBehavior Semua metode lolos System.ServiceModel.Description.ContractDescription dan System.ServiceModel.Description.ServiceEndpoint sebagai parameter. Parameter ini untuk pemeriksaan; jika Anda mengubah objek, perilaku eksekusi tidak ditentukan.

IContractBehavior jenis dapat digunakan pada layanan atau klien, atau keduanya. Untuk melakukan tugas penyesuaian pada layanan, IContractBehavior objek harus ditambahkan ke Behaviors properti sebelum konstruksi runtime layanan, yang terjadi ketika ICommunicationObject.Open metode dipanggil pada System.ServiceModel.ServiceHost objek. Ada dua cara untuk melakukan ini.

Metode pertama adalah menambahkan perilaku kontrak kustom secara terprogram ke Behaviors properti sebelum titik ketika ICommunicationObject.Open metode dipanggil pada System.ServiceModel.ServiceHost objek. Saat diterapkan dengan cara ini, perilaku diterapkan untuk semua pesan yang mengalir melalui kontrak tersebut pada titik akhir apa pun.

Nota

Perilaku diterapkan ke semua kontrak dengan jenis yang sama. Misalnya, jika Anda secara terprogram menambahkan jenis kontrak yang sama ke lebih dari satu titik akhir, perilaku memodifikasi semua titik akhir yang merujuk ke objek kontrak yang sama.

Metode kedua adalah membuat atribut kustom yang mengimplementasikan IContractBehavior dan menerapkannya ke:

  • Antarmuka kontrak. Dalam hal ini, perilaku diterapkan ke semua kontrak jenis tersebut di titik akhir apa pun.

  • Kelas layanan. Dalam hal ini, perilaku diterapkan ke semua titik akhir terlepas dari kontrak.

  • Kelas panggilan balik. Dalam hal ini, perilaku diterapkan ke titik akhir klien dupleks.

Perilaku pendekatan kedua sedikit bervariasi jika atribut kustom juga mengimplementasikan System.ServiceModel.Description.IContractBehaviorAttribute. Dalam hal ini, perilakunya adalah sebagai berikut:

Untuk melakukan tugas penyesuaian pada klien yang dimaksudkannya, IContractBehavior objek harus ditambahkan ke Behaviors properti sebelum konstruksi runtime klien, yang terjadi ketika ChannelFactory<TChannel>.CreateChannel dipanggil. Ada dua cara untuk melakukan ini:

Untuk informasi selengkapnya tentang menambahkan IContractBehavior jenis secara terprogram ke aplikasi klien atau layanan, lihat Mengonfigurasi dan Memperluas Runtime dengan Perilaku.

Metode

Nama Deskripsi
AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection)

Mengonfigurasi elemen pengikatan apa pun untuk mendukung perilaku kontrak.

ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime)

Menerapkan modifikasi atau ekstensi klien di seluruh kontrak.

ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime)

Menerapkan modifikasi atau ekstensi klien di seluruh kontrak.

Validate(ContractDescription, ServiceEndpoint)

Terapkan untuk mengonfirmasi bahwa kontrak dan titik akhir dapat mendukung perilaku kontrak.

Berlaku untuk