gpt4 book ai didi

c# - WCF 服务的 PerCall InstanceContextMode 行为

转载 作者:行者123 更新时间:2023-11-30 18:27:18 25 4
gpt4 key购买 nike

我有一个 WCF 服务,使用 basicHttpBinding 公开一个 ServiceContract,因此根据我的理解,InstanceContextMode 将设置为 PerCall(因为 basicHttpBinding 不支持 session )并且 ConcurrenyMode 将设置为 Single。

这个WCF的客户端是一个windows服务,它同时调用服务上的4个不同的操作,在服务中我们使用了一个单例类并且有很少的静态变量。我们一直面临一个错误的值被传递给某些数据库存储过程的问题。

使用 PerCall InstanceContextMode 和单并发模式,我了解为每次调用创建的新服务 instacne,因此我认为即使在服务实现和静态中有一些单例类(我们没有使其线程安全)变量所有对象都将被销毁,但我们观察到运行 SQL 分析器时旧值正在传递给数据库。

我们在一种三层架构中编写了我们的 WCF 服务代码,我指的是 ServiceClass、BusinessLogicLayer 和 DataAccessLayer,PerCall 设置为 instanceContextMode 当我们说服务实例在客户端请求完成后被销毁时,这是否意味着我们销毁ServiceClass、BusinessLogicLayer和DataAccessLayer中的所有对象?

请帮助我了解可能出了什么问题

最佳答案

InstanceContextMode PerCall 意味着您的服务的新类每次调用 都会实例化。 AppDomain 中的静态变量不会被重置。只要您的 AppPool 未被回收,它们就会保留在服务调用之间。

从您的代码中删除所有静态变量,包括单例。无论如何,它们从不属于您的架构。

关于c# - WCF 服务的 PerCall InstanceContextMode 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26945111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com