語言

IContractBehavior 介面

定義

實作可用於擴展服務或客戶端應用程式中合約執行時行為的方法。

public interface class IContractBehavior
public interface IContractBehavior
type IContractBehavior = interface
Public Interface IContractBehavior
衍生

範例

以下程式碼範例假設有一個 IInstanceProvider 自訂 ObjectProviderBehavior 實作,提供「單例」行為;它總是回傳相同的服務實例,且不會回收。

若要插入實例提供者的自訂功能,範例展示了如何實作一個自訂屬性(SingletonBehaviorAttribute),該屬性可 IContractBehavior 插入自訂服務實例提供者。 它同時實 IContractBehaviorAttribute作 ,將其使用綁定於 ISampleService 契約。

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
}

備註

實作 IContractBehavior 介面以修改、檢視或擴展應用程式層級合約執行的某些面向。 與 IServiceBehavior 和 IEndpointBehavior 物件不同, IContractBehavior 物件無法透過應用程式設定檔加入執行時;物件只能以程式方式或屬性來新增。

關於在服務、端點與合約行為間選擇的更多資訊,請參閱「 配置與擴展執行時行為」。

  • 使用該 AddBindingParameters 方法提供綁定元素並附有自訂資料以支援行為。

  • 使用此 ApplyClientBehavior 方法修改、檢視或插入客戶應用程式中的合約擴充功能。

  • 使用此 ApplyDispatchBehavior 方法修改、檢視或插入服務應用程式中合約的延伸。

  • 使用此 Validate 方法確保合約能支援特定功能。

IContractBehavior 物件可以使用這些方法中的任何一種,但通常只有其中一種是重要的;在這種情況下,未使用的方法是會回傳且沒有任何值。

Note

所有方法都以 IContractBehavior 參數形式傳遞 System.ServiceModel.Description.ContractDescription 和 System.ServiceModel.Description.ServiceEndpoint 。 這些參數是用於檢查;如果你修改了物件,執行行為就會是未定義的。

IContractBehavior 類型可用於服務或用戶端,或兩者皆可。 若要對服務執行自訂任務,IContractBehavior必須在建構服務執行時(當物件呼叫Behaviors該方法時)ICommunicationObject.Open先將物件加入System.ServiceModel.ServiceHost該屬性。 做法有二種。

第一種方法是在物件呼叫Behaviors該方法之前,程式化地將自訂合約行為加入ICommunicationObject.OpenSystem.ServiceModel.ServiceHost屬性。 以此方式應用時,該行為會應用於該合約中流經該合約的所有訊息,且在任何端點上。

Note

此行為適用於所有相同類型的契約。 例如,如果你在程式上將相同合約類型加入多個端點,行為會修改所有指向同一合約物件的端點。

第二種方法是建立一個自訂屬性來實作 IContractBehavior 並套用於:

  • 一個合約介面。 在此情況下,該行為會套用到任端點中所有該類型的契約。

  • 一組服務艙。 在這種情況下,該行為會套用到所有端點,不論是否締約。

  • 一堂回試課。 此時,行為會套用到雙工用戶端的端點。

如果自訂屬性同時實 System.ServiceModel.Description.IContractBehaviorAttribute作 ,第二種方法的行為會略有不同。 此時行為如下:

若要在預期的客戶端執行自訂任務,IContractBehavior必須在建構客戶端執行時(當 呼叫時)Behaviors之前,先將物件加入屬性ChannelFactory<TChannel>.CreateChannel。 作法有二:

欲了解更多關於如何程式化地為客戶端或服務應用程式添加 IContractBehavior 型別的資訊,請參閱「 配置與擴展執行時行為」。

方法

名稱 Description
AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection)

配置任何約束元素以支援合約行為。

ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime)

在合約中對客戶進行修改或延長。

ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime)

在合約中對客戶進行修改或延長。

Validate(ContractDescription, ServiceEndpoint)

實作以確認合約與端點能支援合約行為。

適用於