指定服務執行階段行為
一旦您設計好服務合約 (設計服務合約) 並實作了服務合約 (實作服務合約),就可以設定服務執行階段的作業行為。本主題討論系統提供的服務與作業行為,並說明哪裡可以找到更多資訊以建立新行為。儘管有些行為會以屬性形式來套用,許多行為還是需要透過應用程式組態檔或以程式設計方式來套用。如需 設定您的服務應用程式的詳細資訊,請參閱設定服務。
概觀
合約會定義輸入、輸出、資料型別,以及該類型服務的功能。實作服務合約會建立一個類別,此類別在使用位址上的繫結進行設定時會實行類別所實作的合約。合約、繫結和位址資訊皆為用戶端所熟知,若缺乏這些資訊,用戶端就無法使用服務。
但是,用戶端並不清楚執行緒問題或執行個體管理之類的作業細節。一旦您實作了服務合約,就可以透過「行為」(Behavior) 來設定大量的作業特性。行為是一種物件,可以藉由設定執行階段屬性或將自訂型別插入執行階段來修改 Windows Communication Foundation (WCF) 執行階段。如需 藉由建立使用者定義行為來修改執行階段的詳細資訊,請參閱擴充 ServiceHost 與服務模型層。
System.ServiceModel.ServiceBehaviorAttribute 和 System.ServiceModel.OperationBehaviorAttribute 屬性都是常用的行為,且會公開最常要求的作業功能。由於它們是屬性,您可以將它們套用至服務或作業實作中。儘管您能以程式設計方式來使用諸如 System.ServiceModel.Description.ServiceMetadataBehavior 或 System.ServiceModel.Description.ServiceDebugBehavior 的其他行為,一般來說您還是需要透過應用程式組態檔來加以套用。
本主題提供 ServiceBehaviorAttribute 和 OperationBehaviorAttribute 屬性的概觀、說明行為可以進行作業的各種範圍,並針對 WCF 開發人員可能感興趣的許多系統提供行為提供各種範圍的簡要說明。
ServiceBehaviorAttribute 和 OperationBehaviorAttribute
最重要的行為是 ServiceBehaviorAttribute 和 OperationBehaviorAttribute 屬性,可供您用來控制:
- 執行個體存留期
- 並行與同步化支援
- 組態行為
- 交易行為
- 序列化行為
- 中繼資料轉換
- 工作階段存留期
- 位址篩選與標頭處理
- 模擬
- 若要使用這些屬性,請以適用該範圍的屬性 (Attribute) 來標記服務或作業實作,然後設定屬性 (Property)。例如,下列程式碼範例說明的作業實作會透過 System.ServiceModel.OperationBehaviorAttribute.Impersonation 屬性要求此作業的呼叫端支援模擬。
許多屬性都要求來自繫結的額外支援。例如,要求來自用戶端之交易的作業必須設為使用可支援流動交易的繫結。
已知的單一服務
您可以使用 ServiceBehaviorAttribute 和 OperationBehaviorAttribute 屬性控制特定存留期,存留期可以分別屬於實作作業的 InstanceContext 和服務物件。
例如,System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode 屬性會控制多久釋放一次 InstanceContext,而 System.ServiceModel.OperationBehaviorAttribute.ReleaseInstanceMode 和 System.ServiceModel.ServiceBehaviorAttribute.ReleaseServiceInstanceOnTransactionComplete 屬性則控制釋放服務物件的時機。
但是,您也可以自行建立服務物件,並透過該物件來建立服務主機。若要這麼做,您必須同時將 System.ServiceModel.ServiceBehaviorAttribute.InstanceContextMode 屬性設定為 Single,否則在開啟服務主機時會擲回例外狀況。
請使用 System.ServiceModel.ServiceHost.#ctor(System.Object,System.Uri[]) 建構函式建立此類服務。當您想要將特定物件執行個體提供給單一服務使用時,它提供了另一種實作自訂 System.ServiceModel.Dispatcher.IInstanceContextInitializer 的方式。當服務實作型別很難建構時 (例如,無法實作沒有參數的預設公用建構函式時),您可以使用這個多載。
請注意,提供物件給這個建構函式時,某些與 Windows Communication Foundation (WCF) 執行個體行為相關的功能會以不同的方式運作。例如,提供已知物件執行個體時,呼叫 System.ServiceModel.InstanceContext.ReleaseServiceInstance 將沒有任何作用。同樣的,也會忽略任何其他執行個體的釋放機制。ServiceHost 類別的行為就像是所有作業的 System.ServiceModel.OperationBehaviorAttribute.ReleaseInstanceMode 屬性都已設為 System.ServiceModel.ReleaseInstanceMode.None。
其他服務、端點、合約與作業行為
服務行為,例如 ServiceBehaviorAttribute 屬性,會在整個服務上作業。例如,如果您將 System.ServiceModel.ServiceBehaviorAttribute.ConcurrencyMode 屬性設為 System.ServiceModel.ConcurrencyMode.Multiple,就必須自行處理該服務中每項作業的執行緒同步化問題。端點行為會在整個端點上作業;許多系統提供的端點行為都是因應用戶端功能而生。合約行為會在合約層級作業,而作業行為則會修改作業遞送。
這些行為當中,有許多都是在屬性上實作的,而您能以使用 ServiceBehaviorAttribute 和 OperationBehaviorAttribute 屬性的方式來使用它們,方法是將它們套用至適當的服務類別或作業實作上。儘管您能以程式設計方式來使用諸如 ServiceMetadataBehavior 或 ServiceDebugBehavior 物件的其他行為,一般來說您還是需要透過應用程式組態檔來加以套用。
例如,您可以透過 ServiceMetadataBehavior 物件來設定中繼資料的發行。下列應用程式組態檔說明最常見的用法。
下列章節說明最好用的系統提供行為,供您用來修改服務或用戶端的執行階段遞送。請參閱參考主題來判斷如何使用每一個項目。
服務行為
下列行為可在服務上作業。
- AspNetCompatibilityRequirementsAttribute. 套用至 WCF 服務以表示是否可在 ASP.NET 相容性模式中執行該服務。
- ServiceAuthorizationBehavior. 控制服務如何授權用戶端宣告。
- ServiceCredentials. 設定服務認證。使用此類別來指定服務認證,例如 X.509 憑證。
- ServiceDebugBehavior. 啟用 WCF 服務的偵錯和說明資訊功能。
- ServiceMetadataBehavior. 控制服務中繼資料與相關資訊的發行。
- ServiceSecurityAuditBehavior. 指定安全性事件的稽核行為。
- ServiceThrottlingBehavior. 設定可讓您調整服務效能的執行階段輸送量設定。
端點行為
下列行為可在端點上作業。這類行為大多可用於用戶端應用程式中。
- CallbackBehaviorAttribute. 設定雙工用戶端應用程式中的回呼服務實作。
- CallbackDebugBehavior. 啟用 WCF 回呼物件的服務偵錯。
- ClientCredentials. 允許使用者設定用戶端與服務認證,以及服務認證驗證設定,以用在用戶端上。
- ClientViaBehavior. 用戶端用來針對應該建立的傳輸通道指定統一資源識別項 (URI)。
- MustUnderstandBehavior. 指示 WCF 停用 MustUnderstand 處理。
- SynchronousReceiveBehavior. 指示執行階段針對通道使用同步接收處理序。
- TransactedBatchingBehavior. 針對支援交易接收的傳輸最佳化其接收作業。
合約行為
DeliveryRequirementsAttribute. 指定繫結必須提供給服務或用戶端實作的功能需求。
作業行為
下列作業行為指定作業的序列化與交易控制。
- DataContractSerializerOperationBehavior. 表示 System.Runtime.Serialization.DataContractSerializer 的執行階段行為。
- XmlSerializerOperationBehavior. 控制 XmlSerializer 的執行階段行為並將其與作業相關聯。
- TransactionFlowAttribute. 指定服務作業接受交易標頭時所在的層級。