没有使用InstanceContextMode.PerSession保存实例状态

本文关键字:保存 实例 状态 PerSession InstanceContextMode | 更新日期: 2023-09-27 18:14:20

我正在构建一个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测试了同样的事情,它像预期的那样工作,但是这种行为不适合我的需要,因为服务的实例状态不能在客户端之间保留。

没有使用InstanceContextMode.PerSession保存实例状态

我要出去一时兴起,假设你正在使用BasicHttpBinding

由于HTTP的无连接特性,

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

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