我创建了一个服务,在服务中定义了一个全局变量string appName=string.empty。服务中有两个方法:第一个方法给appName赋值,而第二个方法中要取appName的值。
在客户端中,实例化一个Client调用第一个方法,设置appName的值。但我接着用Client调用第二个方法时,appName为空。调用第二个方法的时候string appName=string.empty又被重新捃了。能不能做到对于同一个客户端实例,appName能共享。
一般服务都是相对独立的一个业务功能,应该保持上下文无关性,才能被重复利用。
像你这种情况下,需要的是一个保持回话的状态,其实WCF也是默认提供支持session的功能的,通过配置你的服务契约
[ServiceContract(SessionMode = SessionMode.Required)]
在使用之前,还是再审视一下是否应该保持服务功能的独立性
谢谢,你这种方法可行,还要选定一个支持会话的绑定。
@Gyoung: 采用PerSession实例化模式 + 开启Session + 采用支持Session的绑定
定义成静态的
定义成静态的话对于多个客户端也会是同一个值了,我是想对于同一个客户端实例appName的值一样,不同的客户端实例appName值不一样。
@Gyoung:
客户端把值传过去或者用 OperationContext实现 Session 来区分
@Qlin: 我就是觉得把值直接传过去,每个方法都要加写一个参数,太麻烦了。能具体说说OperationContext实现 Session 是怎么做么?
单例服务
单例服务不行,不同的客户端实例appName值不一样。
单例服务
单例服务不行,不同的客户端实例appName值不一样。