1

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

问题是这些通知被缓存并且每个应用程序都在一个单独的应用程序池中,管理应用程序没有任何方法来清除其他两个应用程序中的停机通知缓存。

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

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

编辑

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

4

4 回答 4

2

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

于 2012-10-23T20:56:07.870 回答
1

另一种看待这个问题的方法是,这基本上是一个应用程序间消息传递问题,已经有许多库可以帮助您解决它。 为此,我想到了RabbitMQ 。它有一个准备就绪的 C# 客户端。 MSMQ是另一种潜在的技术,并且已经随 Windows 提供 - 您只需要安装它。

于 2012-10-23T21:00:36.747 回答
0

如果您正在缓存的是数据库信息,您可能会在设置和SqlCacheDependency时试试运气。

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

于 2012-10-23T20:57:51.863 回答
0

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

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

在稍后阶段,我们发现在后台使用套接字会更有效,在后台,每个消费网站都将成为客户端并监听数据的变化。然后,后台网站可以在特定帐户更改时与其相应的网站进行通信,然后非常具体地进行通信。这种方法更加细化,我们可以根据需要进行少量更新,而不是大块的更新,但这肯定比我们的第一次尝试更复杂。

于 2012-10-23T21:05:13.690 回答