使用InstanceContextMode.PerSession不保留实例状态

时间:2014-07-23 16:41:21

标签: c# .net wcf

我正在构建一个WCF应用程序,我需要在会话之间保留服务的实例状态。 我的服务实现如下:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class Service : IService {
    private int i;

    public int Increment() {
        return i++;
    }
}

我需要在每个会话之间保留i变量的值。但是,InstanceContextMode.PerSession似乎与InstanceContextMode.PerCall做同样的事情。 因此,如果在客户端应用程序中多次调用Increment(),我每次都会得到0:

var serviceClient = new ServiceClient();
MessageBox.Show(serviceClient.Increment()); // 0
MessageBox.Show(serviceClient.Increment()); // 0

我使用InstanceContextMode.Single测试了相同的内容并且它按预期工作,但此行为不符合我的需要,因为无法在客户端之间保留服务的实例状态。

1 个答案:

答案 0 :(得分:1)

我会突发奇想,假设你正在使用BasicHttpBinding

由于HTTP的无连接特性,

BasicHttpBinding不支持会话。任何不支持可靠会话的绑定或绑定的ReliableSession属性设置为false,那么该服务将表现为 PerCall

您可以查看哪些绑定支持可靠会话here,您可以在InstanceContextMode here中查看详细信息。