gpt4 book ai didi

c# - WCF 服务和单例

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:01 26 4
gpt4 key购买 nike

我有一个在 IIS 上运行的 WCF 服务。

每次用户登录(使用用户名和密码)时,我都会创建一个 SessionClass,每隔几分钟在一个线程中执行一些操作并处理用户请求。

我将字典中创建的每个新 SessionClass 保存在一个单独的 ServiceClass 中。

如果用户在很长一段时间内(比如说 10 小时)没有请求任何东西, session 应该结束。我终止线程并从 ServiceClass 单例中的字典中删除 SessionClass。

我的问题是,每次我从字典中删除 SessionClass 时,它都会再次使 ServiceClass 的实例为空,并且在下次调用它时,它会再次被创建,所以我失去了我曾经在字典...

我尝试在 WCF 服务内部直接引用 ServiceClass.GetInstance()(我认为垃圾收集器正在杀死 ServiceClass)但它无济于事......

为什么会这样?有什么想法吗?

最佳答案

将您的字典声明为静态字段。

至于目前发生这种情况的原因,如果没有更多信息就无法说明,请发布一些代码。

更新
根据您的评论,听起来 IIS 正在回收 AppPool 和/或 AppDomain。无论哪种情况,您的 AppDomain 都会被卸载,因此存储在内存中的所有信息都将丢失。

Tess Ferrandez 写了一篇关于 IIS 为什么这样做的非常好的博客文章 here

更新 2
如果数据丢失只是不方便,您可以尝试将您的服务托管为 managed windows service反而。托管 Windows 服务托管选项启用的方案是在 IIS 外部托管的长期运行的 WCF 服务在未激活消息的安全环境中。服务的生命周期由操作系统控制。但是,如果您的数据永远不会丢失是至关重要的,您将需要添加持久性机制(数据库、存储在磁盘上的文件中等)并从那里读取/写入。

关于c# - WCF 服务和单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8121535/

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