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