A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ♠Akechi♠ 中级黑马   /  2014-3-28 15:40  /  1128 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ♠Akechi♠ 于 2014-3-28 19:00 编辑

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

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

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

想知道这里面的原理。


评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

1 个回复

倒序浏览
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)服务关闭,第一步创建的对象销毁

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马