我想有一个“用户消息”可用于每个请求由服务器发回。如果没有用户消息,则消息将变回空白。如果有,则在请求完成后,在每个用户屏幕上激活一个图标。c#.net内存中的持久性
“用户消息”是由管理员为我正在部署的应用程序设置的。管理员可以在字段中输入文本,然后单击按钮将此消息发送给系统的其他用户。任何时候,其他用户执行任何类型的操作时,当前用户消息都会附加到JSON响应并由前端处理。
为了优化这个,我希望邮件被存储在内存(不在数据库中)。
我试过使用静态。我试图使用HttpApplicationState。在这两种情况下,用户消息的值在一段时间后都会“消失”。经过一番研究,似乎静态和HttpApplicationState都受到IIS的约束,并且它决定回收应用程序池。 (或类似)
的静态这个波动神秘:它应该是静态 - 只要IIS自己的生命,这个变量应该活。它不应该依赖某种“重置”或任何其他。 HttpApplicationState是我不完全理解的其他一些情况。
我想要一种方法来将值存储在我可以依赖的非易失性变量中。如果我今天设置了这个值,那么只要IIS未停止并重新启动,它应该在明天或下个星期。
任何帮助?
这里是我做了什么来解决这个问题按照下面的接受的答案:
- 用户消息是某个东西。因此当某个管理员设置了该消息时,将该响应存储在该时间点的数据库中,并将其存储在Application [“UserMessage”]对象中。
- 当来自用户的往返进入时,用户消息的内存中文本被添加到json返回值中。
- 消息可以随时由管理员清除,这将清除内存中的消息和数据库字段。
- 当IIS决定足够的时间并且回收应用程序时,Application_Start()方法(以及其他任务)也会将用户消息从设置了用户消息时存储的数据库值中重新排序(按照步骤1 )。
现在应用程序按预期工作。没有额外的价格支付到数据库为每个用户请求进入系统 - 用户消息总是来自内存。除此之外,数据库更新或加载用户消息的次数很少。
看到我的回答,你可以使用application_start来恢复变量,如果它从内存中被销毁。这只发生在IIS回收您的应用程序时。 –
谢谢喀布尔,我已根据您的回复更新了原始问题以阐明我的请求。抱歉的浑浊.. – horace
你总是可以把消息放在应用程序缓存中,也可以放在数据库中。当第一次管理员发送消息时,你需要做的是把它放在数据库和应用程序缓存中。您的代码将始终从应用程序缓存中发送消息,但由于应用程序缓存将在应用程序重新启动后失效,因此您需要从application_start上的数据库中重新加载它。 –