WCF缓存与Page.Cache

时间:2011-12-01 15:38:48

标签: asp.net wcf caching

我有两个不同但密切相关的ASP.Net Web应用程序,它们在某些页面上使用相同的数据。在两个应用程序中,我使用ObjectDataSource控件,使EnableCaching =“true”,并在两个应用程序中使用相同的CacheKeyDependency值。

我想这样做,以便在一个应用程序中插入或删除新记录时,它会清除两个应用程序中的缓存。我开始只是使用Page.Cache清除缓存,但很快意识到它没有清除其他应用程序中的缓存。然后我为每个应用程序添加了一个WCF服务;每个服务都清除它所托管的应用程序中的缓存对象。除非它没有......

首先,我发现在WCF中System.Web.HttpContext始终为null。然后我尝试实例化一个System.Web.Routing.RequestContext对象,但它的HttpContext对象也总是为空。

这一切归结为:如果我设置了一个Page.Cache对象,如果该服务与该页面在同一个应用程序中托管,那么WCF服务是否可以访问同一个缓存对象?

2 个答案:

答案 0 :(得分:3)

是的,您需要为WCF服务启用ASP.NET集成。这涉及在配置中为aspNetCompatibilityEnabled元素设置serviveHostingEnvironment属性,并将AspNetCompatibilityRequirementAttribute属性添加到服务类,以表明您支持它。

有关此主题的更多信息,请访问here on MSDN.

答案 1 :(得分:0)

两个应用程序中缓存的主要挑战是缓存可以存储在单独的计算机上,或者如果它们位于同一台计算机上,则位于不同的应用程序池中。

您可以这样做的一种方法是允许两个应用程序使用相同的缓存。用于分发缓存的一个解决方案是Appfabric caching