WCF服务端实例的生命周期-阿里云开发者社区

开发者社区> zting科技> 正文

WCF服务端实例的生命周期

简介:
+关注继续查看

本篇主要介绍WCF服务的生命周期,以及通过配置来控制处理客户端请求的服务实例的建立和销毁的时机。

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

 

WCF三种生命周期的实现:

1.客户端代码

客户端和调用一般的WCF一样,本例新建了两个客户端代理类,一个代理类调用五次服务端的操作,一个代理调用了三次服务的操作。之所以建立两个代理类,是为了形成两个Session,使得前五次调用和后三次调用处于不同的Session中。

客户端主要代码如下:

image

2.服务端代码

服务端只需要在实现契约操作的类之上申明InstanceContextMode即可,其余做法与普通WCF服务的做法相同。

InstanceContextMode的设置见下图:(各个函数和变量的介绍见代码中的注释)

image

WCF三种生命周期的验证:

1.PreCall的验证

首先设置[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)],然后运行WCFLifeCycle.sln。

1)客户端结果如下:

clip_image002

客户端两个代理类共调用WCF服务8次,有两个Session。

 

2)服务端结果如下:

clip_image002[4]

服务端每次被调用时都新建一个实例,完成请求后销毁实例,共8次,与客户端的请求次数一致。

 

2.PreSession的验证

首先设置[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)],然后运行WCFLifeCycle.sln。

1)客户端结果同上:

2)服务端结果如下:

clip_image002[6]

服务端共建立两个实例(与建立的客户端代理类数目一致),分别完成5次和3次函数调用(与客户端代理类调用服务操作的次数一致)。

 

 

 

 

 

 

3.Single的验证

首先设置[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)],然后运行WCFLifeCycle.sln。

1)客户端结果同上:

2)服务端结果如下:

clip_image002[8]

服务在启动时建立了一个实例,以后一直是使用此实例完成8次请求,不管客户端代理的个数和调用次数是多少,始终只有一个实例。

 

实例代码下载:WCFLifeCycle.zip



本文转自wang_yb博客园博客,原文链接:http://www.cnblogs.com/wang_yb/archive/2010/06/05/1752461.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
hubilder打包+C#服务端个推服务实现
关于推送鼓捣了好长时间,这里不再写helloworld了,只讲里面遇到的问题。 1.关于苹果开发者平台上的注册 网上很多的教程,只要按照步骤来设置就行了,在 iOS证书(.p12)和描述文件(.mobileprovision)申请 这篇文章里面讲的很清楚,文章中也说明了,如果要使用推送功能,那么在申请AppID的时候要选择“Push Notifications”这个选项。
1105 0
Java Socket服务端客户端通信实例
本文目录 1. Socket是啥 2. 运行机制 3. 代码示例 4. 测试 5. 小结
13 0
阿里云ECS服务器部署Dart服务端程序
1.Dart服务端绑定域名为ECS的内部IP:172.31.213.9(自己的服务器内网IP)io.serve(handler, '172.31.213.9', 80).then((server) { print('Serving at http://${server.address.host}:${server.port}'); }); 2.安全组策略开启80/TCP端口。
2103 0
消灭“脑细胞杀手”,阿里专家带你深入C++对象的生命周期管理
C/C++的指针一直是令人又爱又恨的特性。围绕指针产生了许许多多优雅的数据结构和系统实现,但又滋生了不少“脑细胞杀手”——内存Bug。如何通过指针管理C++中对象,如何管理对象的生命周期呢?本文中,阿里巴巴高级开发工程师付哲就为大家分享《C++对象的生命周期管理》。
4275 0
spring提供的关于bean生命周期的接口
先看一张图:spring4.x 企业实战 spring版本:4.3.171、bean自身的生命周期接口 1.1、实现 InitializingBean、DisposableBean 接口这2个接口,会要求你实现2个方法 ...
825 0
WebSocket的C++服务器端实现
由于需要在项目中增加Websocket协议,与客户端进行通信,不想使用开源的库,比如WebSocketPP,就自己根据WebSocket协议实现一套函数,完全使用C++实现。 代码已经实现,放在个人github上面,地址:https://github.com/jice1001/websocket.git。
1624 0
服务端编程示例|学习笔记
快速学习服务端编程示例
40 0
Redis 客户端与服务器连接流程实例
Redis 客户端与服务器连接流程实例
12 0
Android activity的生命周期
Android activity的生命周期 activity类处于android.app包中,继承体系如下: 1.java.lang.Object 2.android.content.Context 3.android.app.ApplicationContext 4.android.app.Activity activity是单独的,用于处理用户操作。
484 0
+关注
3550
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载