【发布时间】:2015-01-12 17:41:14
【问题描述】:
我有一个 WCF 服务,使用 basicHttpBinding 公开 ServiceContract,因此据我了解,InstanceContextMode 将设置为 PerCall(因为 basicHttpBinding 不支持会话),ConcurrenyMode 将设置为 Single。
这个WCF的客户端是一个windows服务,它同时在服务上调用4个不同的操作,在服务内部我们使用了一个单例类,静态变量很少。我们一直面临一个问题,即错误的值被传递给某些 DB 存储过程。
使用 PerCall InstanceContextMode 和 Single 并发模式,我了解为每次调用创建的新服务实例,因此我认为即使在服务实现和静态中有一些单例类(我们没有使其线程安全) variables 所有对象都将被销毁,但我们观察到运行 SQL 分析器,旧值正在通过数据库。
我们已经将我们的 WCF 服务代码编写在一种 3 层架构中,即 ServiceClass、BusinessLogicLayer 和 DataAccessLayer,当我们说服务实例在客户端请求完成后被销毁时,PerCall 设置为 instanceContextMode,这是否意味着我们销毁ServiceClass、BusinessLogicLayer和DataAccessLayer中的所有对象?
请帮助我了解可能出了什么问题
【问题讨论】:
-
你使用单例有什么原因吗?在您的架构中,这似乎是一种极其不适合的模式。没有单例并使用一些适当的调试,你应该没问题。
标签: c# .net wcf basichttpbinding instancecontextmode