在ASP.NET中共享两个Web应用程序之间的数据

时间:2010-10-14 05:51:34

标签: asp.net web-applications webforms

我有一个Web应用程序(MainApplication),其中许多页面包含一个自定义Web控件,用于在缓存中查找某些内容。如果它无法在缓存中找到任何数据,那么它会转到内容的数据库。检索内容后,控件将在页面上显示内容。

在上述Web应用程序中的子目录中有一个Web应用程序(CMS)。用户使用此CMS更新MainApplication引入的内容。

当用户使用CMS更新某些内容时,我需要CMS清除MainApplication使用的缓存的相关部分。问题是,作为两个不同的Web应用程序,它们不能简单地与相同的静态缓存对象进行交互。

理想的解决方案是以某种方式在两个Web应用程序之间共享缓存对象的实例。

如果不这样,两个Web应用程序之间通信的最佳(性能)方式是什么?显然,写入/读取数据库会破坏目的。我在考虑一个平面文件?

更新

谢谢大家的帮助。你的精彩答案实际上给了我正确的搜索条件,发现这是一个重复的问题(对不起!):Cache invalidation between two web applications

3 个答案:

答案 0 :(得分:2)

在这种情况下我想到的一个选择是使用Velocity分布式缓存机制。请阅读并尽可能尝试http://msdn.microsoft.com/en-us/magazine/dd861287.aspx

答案 1 :(得分:2)

我在之前的项目中拥有完全相同的设置,我们有一个ASP.NET Web应用程序(使用MCMS Backing),另一个ASP.NET Web应用程序用于显示数据。

完全不同的服务器(尽管相同的域名)。

但是,当“编辑器”更新CMS应用程序中的内容时,UI会自动刷新。

如何?很高兴你问。

我们将内容存储在SQL Server中,并使用了Replication。 :)

“前端”Web应用程序将读取数据库中的数据(由CMS系统复制)。

现在 - 我们不缓存这些数据,因为在数据库中,我们实际存储了控件的标记(HTML)。因此,我们动态地重新呈现HTML。

为什么“打败目的”?

您无法让一个应用程序“使另一个应用程序上的缓存无效”。

如果您沿着这条路走下去,您需要考虑一个分布式缓存引擎(例如Velocity)。

答案 2 :(得分:1)

在ASP.NET中,存在Cache Dependency的概念。您可以在此处查看:http://www.codeproject.com/KB/web-cache/CachingDependencies.aspxhttp://www.devx.com/dotnet/Article/27865/0/page/5

此处还有企业库缓存块,可为标准内容添加一些功能:http://msdn.microsoft.com/en-us/library/ff649093.aspx

现在,如果你在.NET 4上运行,那么你应该绝对使用一个新的System.Runtime.Caching命名空间:http://msdn.microsoft.com/en-us/library/system.runtime.caching.aspx

这篇文章“使用SqlCacheDependency类在ASP.NET中缓存”非常有趣:http://msdn.microsoft.com/en-us/library/ms178604.aspx