我有一个 WCF 服务,使用 basicHttpBinding 公开 ServiceContract,因此据我了解,InstanceContextMode将设置为 PerCall(因为 basicHttpBinding 不支持会话),ConcurrenyMode 将设置为 Single。
这个 WCF 的客户端是一个 windows 服务,它同时调用服务上的 4 个不同的操作,在服务中我们使用了一个单例类,并且几乎没有静态变量。我们一直面临一个问题,即错误的值被传递给某些 DB 存储过程。
使用 PerCall InstanceContextMode 和 Single 并发模式,我了解为每次调用创建的新服务实例,因此我认为即使在服务实现和静态变量中存在一些单例类(我们还没有使其成为线程安全)对象将被销毁,但我们观察到运行 SQL 分析器,旧值正在通过数据库。
我们已经将我们的 WCF 服务代码编写在一种 3 层架构中,即 ServiceClass、BusinessLogicLayer 和 DataAccessLayer,当我们说服务实例在客户端请求完成后被销毁时,PerCall 设置为 instanceContextMode,是否意味着我们销毁所有ServiceClass、BusinessLogicLayer和DataAccessLayer中的对象?
请帮助我了解可能出了什么问题