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

備註

實作 IContractBehavior 介面,以修改、檢查或延伸應用程式層級上某方面的合約執行。 不同於 IServiceBehaviorIEndpointBehavior 物件,IContractBehavior 物件無法使用應用程式組態檔加入至執行階段,而只能以程式設計的方式或使用屬性來加入。

如需在服務、端點和合約行為之間選擇的詳細資訊,請參閱 使用行為設定及擴充運行時間。

  • 請使用 AddBindingParameters 方法為繫結項目提供自訂資料,以支援行為。

  • 請使用 ApplyClientBehavior 方法在用戶端應用程式中修改、檢查或插入延伸至合約。

  • 請使用 ApplyDispatchBehavior 方法在服務應用程式中修改、檢查或插入延伸至合約。

  • 請使用 Validate 方法來確保合約可以支援特定功能。

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

注意

所有的 IContractBehavior 方法都會傳遞 System.ServiceModel.Description.ContractDescriptionSystem.ServiceModel.Description.ServiceEndpoint 做為參數。 這些參數是供檢查之用;如果您修改物件,執行行為便沒有定義。

IContractBehavior 型別可用於服務或用戶端或兩者。 如果要在服務上執行自訂工作,必須在建構服務執行階段之前將 IContractBehavior 物件加入至 Behaviors 屬性,這會發生於在 ICommunicationObject.Open 物件上呼叫 System.ServiceModel.ServiceHost 方法時。 做法有二種。

第一種方法是在 Behaviors 物件上呼叫 ICommunicationObject.Open 方法之前,以程式設計的方法將自訂合約行為加入至 System.ServiceModel.ServiceHost 屬性。 使用這種方法時,會針對在任何端點上流經該合約的所有訊息套用此行為。

注意

此行為會套用至相同型別的所有合約。 例如,如果您以程式設計的方式將相同的合約型別加入至一個以上的端點,此行為便會修改參考相同合約物件的所有端點。

第二種方法是建立實作 IContractBehavior 的自訂屬性並套用至:

  • 合約介面。 在這種情況中,行為會套用至任何端點中該型別的所有合約。

  • 服務類別。 在這種情況中,行為會套用至所有端點 (不論何種合約)。

  • 回呼類別。 在這種情況中,行為會套用至雙工用戶端的端點。

如果自訂屬性也實作 System.ServiceModel.Description.IContractBehaviorAttribute,第二種方法的行為會有些許改變。 在這種情況下,行為如下所示:

如果要在目的用戶端上執行自訂工作,必須在建構用戶端執行階段之前將 IContractBehavior 物件加入至 Behaviors 屬性,這會發生在呼叫 ChannelFactory<TChannel>.CreateChannel 時。 作法有二:

  • 在呼叫 之前,以程式設計的方式將自訂合約行為加入至 屬性。

  • 建立也會實作 IContractBehavior 的自訂屬性。

如需以程式設計方式將類型新增 IContractBehavior 至用戶端或服務應用程式的詳細資訊,請參閱 使用行為設定及擴充運行時間。

方法

AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection)

設定繫結項目以支援合約行為。

ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime)

實作合約上用戶端的修改或延伸。

ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime)

實作合約上用戶端的修改或延伸。

Validate(ContractDescription, ServiceEndpoint)

您可以實作此方法確認合約和端點可以支援合約行為。

適用於