IContractBehavior 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
實作可用於擴展服務或客戶端應用程式中合約執行時行為的方法。
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作 ,第二種方法的行為會略有不同。 此時行為如下:
一個合約介面。 在此情況下,該行為會套用到任何端點中所有該類型的合約,Windows Communication Foundation(WCF)會忽略該 IContractBehaviorAttribute.TargetContract 屬性的值。
一組服務艙。 在此情況下,行為僅套用至合約中的端點,其合約是由 IContractBehaviorAttribute.TargetContract 屬性的值決定的。
一堂回試課。 在此情況下,行為會套用至雙工用戶端的端點,而 WCF 會忽略 屬性的值 IContractBehaviorAttribute.TargetContract 。
若要在預期的客戶端執行自訂任務,IContractBehavior必須在建構客戶端執行時(當 呼叫時)Behaviors之前,先將物件加入屬性ChannelFactory<TChannel>.CreateChannel。 作法有二:
在被呼叫之前,程式化地將自訂合約行為加入BehaviorsChannelFactory<TChannel>.CreateChannel屬性。
建立 IContractBehavior一個自訂屬性,同時實作 。
欲了解更多關於如何程式化地為客戶端或服務應用程式添加 IContractBehavior 型別的資訊,請參閱「 配置與擴展執行時行為」。
方法
| 名稱 | Description |
|---|---|
| AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection) |
配置任何約束元素以支援合約行為。 |
| ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime) |
在合約中對客戶進行修改或延長。 |
| ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime) |
在合約中對客戶進行修改或延長。 |
| Validate(ContractDescription, ServiceEndpoint) |
實作以確認合約與端點能支援合約行為。 |