WCF缓存与Page.Cache的区别

3
我有两个不同但密切相关的ASP.NET Web应用程序,其中某些页面使用相同的数据。在这两个应用程序中,我都使用ObjectDataSource控件,并设置EnableCaching="true",并且在两个应用程序中使用相同的CacheKeyDependency值。 我希望当一个应用程序插入或删除新记录时,可以清除两个应用程序中的缓存。我开始只是使用Page.Cache简单地清除缓存,但很快意识到它不会清除另一个应用程序中的缓存。然后,我为每个应用程序添加了一个WCF服务;每个服务都会清除其所在应用程序中的缓存对象。但实际上并不会... 首先,我发现WCF中的System.Web.HttpContext始终为null。然后,我尝试实例化System.Web.Routing.RequestContext对象,但其HttpContext对象也始终为null。 最终问题归结为:如果我设置了一个Page.Cache对象,那么如果该服务托管在与页面相同的应用程序中,WCF服务能否访问相同的缓存对象?
2个回答

3
是的,您需要为WCF服务启用ASP.NET集成。这包括在配置中设置serviceHostingEnvironment元素的aspNetCompatibilityEnabled属性,以及向服务类添加AspNetCompatibilityRequirementAttribute属性,指示您支持它。
有关此主题的更多信息,请参阅MSDN上的此处

0
在两个应用程序中使用缓存的主要挑战是缓存可以存储在不同的机器上,或者如果它们在同一台机器上,则在不同的应用程序池中。
您可以这样做的一种方法是允许两个应用程序都使用相同的缓存。一个分布式缓存的解决方案是运行在进程外的Appfabric缓存

是的,在我的情况下,涉及到AppFabric这样的东西绝对不值得。我已经花了足够多的时间在这上面了;我只能停止缓存,或者将缓存过期时间设置得非常低,比如一两分钟。不过还是谢谢! - tjc59

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接