黑马程序员技术交流社区

标题: WCF接口请求生命周期问题 [打印本页]

作者: ♠Akechi♠    时间: 2014-3-28 15:40
标题: WCF接口请求生命周期问题
本帖最后由 ♠Akechi♠ 于 2014-3-28 19:00 编辑

很常用的wcf接口,svc形式的.。

用户请求接口后想要做一个清理缓存的操作,但是这个操作需要耗费2秒左右的时间。

我现在是异步去清理缓存,不知道当前请求结束后,这个异步的线程是不是也会立即挂了?

想知道这里面的原理。



作者: 必要の存在    时间: 2014-3-28 18:08
WCF共有三种方式来控制服务端实例的生命周期:
1.PreCall方式

对于客户端的每一个请求,服务端即生成一个实例。请求结束后释放服务端实例。

工作流程如下:

1)客户端创建代理对象(Proxy)
2)客户端调用代理对象的一个契约操作,代理对象将其传递给宿主程序
3)服务应用程序创建一个新的服务契约对象,并执行请求的操作
4)在执行完请求的操作后,如果要求有应答,那么服务契约会给代理对象一个应答,然后销毁自己(如果实现了IDisposable,则调用Disposs函数)



2.PreSession方式

根据每个Client生成一个实例,当客户端代理关闭的时候才释放服务端实例。

工作流程如下:

1)客户端创建代理对象(Proxy)
2)客户端第一次调用代理对象的一个契约操作,代理对象将其传递给宿主程序
3)宿主程序创建新的服务对象,并执行请求操作,如果有必要,返回客户端应答。
4)客户端再次发出调用服操作的请求,宿主会先判断是否已有建立好的会话,如果存在,则不需要再创建新的服务对象,直接使用老对象即可
5)在时间达到指定要求或者因一些特殊原因,会话会过期,此时服务对象销毁



3.Single方式

服务端只生成一个实例来对应所有Client的请求,类似于单例模式。

1)服务端启动,同时创建服务对象
2)客户端通过代理调用契约操作
3)第一步中创建的服务对象接受请求,并执行操作,进行必要的应答
4)第一步创建的服务对象将一直保留
5)服务关闭,第一步创建的对象销毁




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2