没有使用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
测试了同样的事情,它像预期的那样工作,但是这种行为不适合我的需要,因为服务的实例状态不能在客户端之间保留。
我要出去一时兴起,假设你正在使用BasicHttpBinding
。
BasicHttpBinding
不支持会话。任何不支持可靠会话的绑定,或者如果绑定的ReliableSession
属性设置为false,那么服务将表现为PerCall。
您可以在这里查看哪些绑定支持可靠会话,您可以在这里查看InstanceContextMode
中的详细信息。