C# ASP.NET缓存管理

C# ASP.NET缓存管理,c#,asp.net,caching,C#,Asp.net,Caching,我有三个应用程序在三个独立的应用程序池中运行。其中一个应用程序是一个很少有人有特权访问的管理应用程序。管理应用程序允许的功能之一是创建停机通知。因此,当用户进入管理应用程序并创建停机通知时,其他两个应用程序应在出现新通知时接收并在登录页面上显示该通知 问题在于,这些通知被缓存,并且由于每个应用程序都位于单独的应用程序池中,因此管理应用程序无法清除其他两个应用程序中的停机通知缓存 我在想办法解决这个问题。我能想到的唯一一件事是在数据库中插入一条记录,表示需要清除缓存,其他两个应用程序将在加载登录页

我有三个应用程序在三个独立的应用程序池中运行。其中一个应用程序是一个很少有人有特权访问的管理应用程序。管理应用程序允许的功能之一是创建停机通知。因此,当用户进入管理应用程序并创建停机通知时,其他两个应用程序应在出现新通知时接收并在登录页面上显示该通知

问题在于,这些通知被缓存,并且由于每个应用程序都位于单独的应用程序池中,因此管理应用程序无法清除其他两个应用程序中的停机通知缓存

我在想办法解决这个问题。我能想到的唯一一件事是在数据库中插入一条记录,表示需要清除缓存,其他两个应用程序将在加载登录页面时检查数据库。有没有人有另一种可能更干净一点的方法

*旁注,这比停机通知更普遍,但我只是以它为例

编辑


重新启动应用程序池是不可行的,因为它很可能会杀死后台线程。

如果我理解正确,您基本上是在尝试将消息从管理应用程序发送到其他应用程序。也许你应该考虑在这些应用程序上创建WCF服务,这些应用程序可以从管理应用程序调用。如果您不想使用诸如数据库之类的共享媒体,并且不强迫您使用轮询模型,则这是不同应用程序之间通信的标准方式。

如果您缓存的是数据库信息,您可能会在设置和访问时碰碰运气


否则,我建议不要使用ASP.NET缓存,或者找一个使用分布式缓存方案的第三方解决方案,这样所有应用程序都使用一个缓存,而不是3个单独的缓存。

另一种方法是,这基本上是一个应用程序间消息传递问题,已经有很多库可以帮助你解决这个问题。我想到了这个。它有一个C#client随时可以使用。是另一种潜在的技术,也是Windows附带的技术—您只需要安装它。

我不是说这是最好的答案,甚至不是正确的答案,这正是我所做的

我在单独的服务器和数据中心上有一系列电子商务网站,它们依赖于从中央后台网站位置提取目录数据,然后在本地缓存这些数据。在我的第一次迭代中,我只是使用GET请求,中心位置可以ping相应的消费网站来启动自己的缓存刷新例程。我在每个电子商务服务器上都使用了SSL,因为我已经进行了设置,然后可以让backoffice web app通过SSL发送凭据,从而安全地启动刷新


在后来的阶段,我们发现在后台使用套接字更有效,因为每个消费网站都是一个客户端,可以监听数据的变化。当特定帐户发生变化时,后台网站可以与其相应的网站进行沟通,然后进行非常具体的沟通。这种方法更细粒度,我们可以根据需要进行小量更新,而不是大批量更新,但这肯定比我们第一次尝试要复杂。

从管理应用程序重新启动两个应用程序的应用程序池对您来说是解决方案吗?您提到了清除缓存,但目前尚不清楚停机通知首先是如何进入其他两个应用程序的缓存的?其他两个应用程序如何“发现有新的通知?”Zaid,它们调用缓存,如果缓存尚未填充,则从数据库获取数据并存储在缓存中,否则它将返回缓存中的数据。我开始沿着这条路线走,但因为每个应用程序都是一个单独的域(http//www.a.com、http//www.b.com、http//www.c.com)我是否需要处理跨域web服务,或者我是否可以在不上网的情况下处理这些服务?如果应用程序托管在同一IIS上,您可以始终限制与本地主机的通信,而不将服务公开到internet。您也可以使用另一个绑定,例如NetNamedPipeBinding。MSMQ也可以工作,并且它已经是Windows的一部分(可选安装)。你只需要安装它。@Kevin,它会的!一个很好的电话。我会把它添加到我的答案中。