首页 新闻 会员 周边

WCF定义了一个全局变量,如何对同一个客户端实例 共享

-1
悬赏园豆:100 [已解决问题] 解决于 2012-10-19 16:56

我创建了一个服务,在服务中定义了一个全局变量string appName=string.empty。服务中有两个方法:第一个方法给appName赋值,而第二个方法中要取appName的值。
在客户端中,实例化一个Client调用第一个方法,设置appName的值。但我接着用Client调用第二个方法时,appName为空。调用第二个方法的时候string appName=string.empty又被重新捃了。能不能做到对于同一个客户端实例,appName能共享。

WCF
Gyoung的主页 Gyoung | 初学一级 | 园豆:112
提问于:2012-10-19 14:24
< >
分享
最佳答案
0

一般服务都是相对独立的一个业务功能,应该保持上下文无关性,才能被重复利用。

像你这种情况下,需要的是一个保持回话的状态,其实WCF也是默认提供支持session的功能的,通过配置你的服务契约

[ServiceContract(SessionMode = SessionMode.Required)]

在使用之前,还是再审视一下是否应该保持服务功能的独立性

收获园豆:80
Ethan轻叹 | 小虾三级 |园豆:996 | 2012-10-19 15:15

谢谢,你这种方法可行,还要选定一个支持会话的绑定。

Gyoung | 园豆:112 (初学一级) | 2012-10-19 16:53

@Gyoung: 采用PerSession实例化模式 + 开启Session + 采用支持Session的绑定

Gyoung | 园豆:112 (初学一级) | 2012-10-19 16:58
其他回答(3)
0

定义成静态的

收获园豆:20
Qlin | 园豆:2403 (老鸟四级) | 2012-10-19 14:35

定义成静态的话对于多个客户端也会是同一个值了,我是想对于同一个客户端实例appName的值一样,不同的客户端实例appName值不一样。

支持(0) 反对(0) Gyoung | 园豆:112 (初学一级) | 2012-10-19 14:38

@Gyoung: 

客户端把值传过去或者用 OperationContext实现 Session 来区分

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2012-10-19 14:47

@Qlin: 我就是觉得把值直接传过去,每个方法都要加写一个参数,太麻烦了。能具体说说OperationContext实现 Session 是怎么做么?

支持(0) 反对(0) Gyoung | 园豆:112 (初学一级) | 2012-10-19 15:29
0

单例服务

哇~怪兽 | 园豆:622 (小虾三级) | 2012-10-19 15:00

单例服务不行,不同的客户端实例appName值不一样。

支持(0) 反对(0) Gyoung | 园豆:112 (初学一级) | 2012-10-19 16:54
0

单例服务

jason2013 | 园豆:1998 (小虾三级) | 2012-10-19 15:34

单例服务不行,不同的客户端实例appName值不一样。

支持(0) 反对(0) Gyoung | 园豆:112 (初学一级) | 2012-10-19 16:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册