WCF實例停用基本應用技巧分享
WCF中有很多比較高深的應用技巧是值得我們在學習和實踐的過程中去深入研究的。那么,今天我們就先從WCF實例停用開始了解,從而使我們對這一開發(fā)工具有一個更加深入的了解程度。#t#
WCF實例停用只針對會話服務而言。單例服務雖然也可以應用,但卻無效。
“會話實際要做的不僅是關(guān)聯(lián)客戶端消息,同時還要關(guān)聯(lián)托管了服務的上下文。啟動會話時,宿主會創(chuàng)建一個新的上下文。會話終止時,上下文也隨之而終止。默認情況下,上下文的生命周期與發(fā)布的服務實例的生命周期相同。然而,出于優(yōu)化的目的,WCF為服務設(shè)計者提供了一個分離兩種生命周期的選項,該選項允許WCF獨立地停用實例,而不必依賴于它的上下文。實際上,WCF還允許不包含實例的上下文存在。”
這種實例管理技術(shù)稱為上下文停用(Context Deactivation)。控制上下文停用的最常見辦法是通過OperationBehavior特性的ReleaseInstanceMode屬性:
- public enum ReleaseInstanceMode
- {
- None, BeforeCall, AfterCall, BeforeAndAfterCall,
- }
- [AttributeUsage(AttributeTargets.Method)]
- public sealed class OperationBehaviorAttribute : Attribute,...
- {
- public ReleaseInstanceMode ReleaseInstanceMode
- {
- get;set;
- }
- //More members
- }
“通常,我們只需要將WCF實例停用應用到部分服務方法上,而不是全部方法;或者為不同的方法設(shè)置不同的值。”例如:
- class MyService : IMyContract,IDisposable
- {
- [OperationBehavior(ReleaseInstanceModeReleaseInstanceMode =
ReleaseInstanceMode.AfterCall)]- public void MyMethod( )
- {
- ...
- }
- public void MyOtherMethod( )
- {
- ...
- }
- public void Dispose( )
- {
- ...
- }
- }
以上就是對WCF實例停用的相關(guān)內(nèi)容的介紹。