WCF实例上下文基本内容概述

WCF开发工具是一款由微软公司开发的功能强大的插件,它主要作用域通信方面,可以为开发人员带来非常大的好处。在这里我们将会为大家详细介绍一下有关WCF实例上下文的基本内容。#t#

WCF实例上下文是对服务实例的封装,是WCF管理服务实例生命周期的依托。我们先撇开WCF,来简单介绍一下在托管的环境中,公共语言运行时(CLR)是如何进行托管对象的生命周期的。在一个托管应用程序中,我们通过不同的方式创建一个托管对象(比如通过new关键字、反射或反序列化等)时,CLR会在托管堆为该对象开辟一块内存空间。对象的本质就是存储于某块内存中数据的体现,对象的生命周期终止于相应内存被回收之时。对于CLR来说,负责对托管堆(在这里主要指GC堆)进行回收的组件是垃圾收集器(GC),GC掌握着托管对象的生杀大权,决定着托管对象的生命周期。

当GC在进行垃圾回收的时候,会将“无用”的对象标记为垃圾对象,然后再对垃圾对象进行清理。GC对“无用”对象的识别机制很简单:判断对象是否被“根(Root)”所引用。在这里,“根”是对一组当前正被使用,或者以后可能被使用的对象的统称,大体包括这样的对象:类型的静态字段或当前的方法参数和局部变量、CPU寄存器等。

所以,孤立存在的对象将难逃被GC回收的厄运。反之,如果希望某个对象常驻内存中,我们***的方式就是通过某个“根”引用该对象。本章所讲的实例管理,就是对服务实例生命周期的管理,即让服务实例按照我们希望的方式创建、存活和消亡,所以我们***的方式也只能是:在希望服务实例存活的时候让它被某个“根”引用,从而阻止GC将其回收;在希望服务实例被回收的时候连“根”去除,使GC能够将其回收。而本节所讲的WCF实例上下文(InstanceContext)就扮演着“根”的角色。

说到WCF实例上下文,相信读者不会感到陌生,因为在进行WCF双向(Duplex)通信的时候,我们通过实例上下文来封装回调对象。在WCF中,实例上下文不仅仅用于对回调对象的封装,也用于对真正服务实例的封装。实际上可以将WCF的双向通信理解成一种对等通信,通信的双方是对等的参与者,并没有严格的服务端和客户端之分,或者说通信的双方交替地扮演着服务与客户的角色。客户端正常调用服务端操作是一种服务调用;服务端回调客户端操作也可以看成是一种服务调用。因此,通过实例上下文对回调对象和服务实例进行封装本质上是一致的。

一个WCF服务通过一个ServiceHost进行寄宿,并添加一到多个终结点。对于接收到的服务调用请求,如果相应的WCF实例上下文存在,则通过它得到服务实例来处理服务请求,否则创建服务实例并通过实例上下文对其进行封装,然后再通过实例上下文得到具体的服务实例进行服务请求处理。

实例上下文通过类型System.ServiceModel.InstanceContext表示。InstanceContext继承自CommunicationObject,实现了IExtensibleObject接口。InstanceContext的定义如下面的代码所示:

 
 
 
  1. 1: public sealed class InstanceContext : CommunicationObject, 
    IExtensibleObject   
  2. 2: {   
  3. 3: //其他成员   
  4. 4: public InstanceContext(object implementation);   
  5. 5: public InstanceContext(ServiceHostBase host);   
  6. 6: public InstanceContext(ServiceHostBase host, object implementation);   
  7. 7:   
  8. 8: public object GetServiceInstance();   
  9. 9: public object GetServiceInstance(Message message);   
  10. 10: public void ReleaseServiceInstance();   
  11. 11:   
  12. 12: public IExtensionCollection Extensions { get; }   
  13. 13: public ServiceHostBase Host { get; }   
  14. 14: public ICollection IncomingChannels { get; }   
  15. 15: public ICollection OutgoingChannels { get; }   
  16. 16: public SynchronizationContext SynchronizationContext { get; set; }   
  17. 17: } 

InstanceContext具有三个构造函数,接受ServiceHostBase对象和具体的实例对象作为其输入参数。GetServiceInstance和ReleaseServiceInstance用户服务实例的获取和释放。IncomingChannels和OutgoingChannels则表示入栈和出栈信道集合。而通过SynchronizationContext属性则可以设置或获取用于异步操作的同步上下文,比如服务操作须要在非UI线程下操作一个Windows Form的控件,你就需要基于UI线程的同步上下文(SynchronizationContext)。

以上就是我们为大家介绍的WCF实例上下文相关内容。

文章标题:WCF实例上下文基本内容概述
URL地址:http://www.shufengxianlan.com/qtweb/news14/352964.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联