我有两个不同但密切相关的ASP.Net Web应用程序,它们在某些页面上使用相同的数据。在两个应用程序中,我使用ObjectDataSource控件,使EnableCaching =“true”,并在两个应用程序中使用相同的CacheKeyDependency值。
我想这样做,以便在一个应用程序中插入或删除新记录时,它会清除两个应用程序中的缓存。我开始只是使用Page.Cache清除缓存,但很快意识到它没有清除其他应用程序中的缓存。然后我为每个应用程序添加了一个WCF服务;每个服务都清除它所托管的应用程序中的缓存对象。除非它没有......
首先,我发现在WCF中System.Web.HttpContext始终为null。然后我尝试实例化一个System.Web.Routing.RequestContext对象,但它的HttpContext对象也总是为空。
这一切归结为:如果我设置了一个Page.Cache对象,如果该服务与该页面在同一个应用程序中托管,那么WCF服务是否可以访问同一个缓存对象?
答案 0 :(得分:3)
是的,您需要为WCF服务启用ASP.NET集成。这涉及在配置中为aspNetCompatibilityEnabled
元素设置serviveHostingEnvironment
属性,并将AspNetCompatibilityRequirementAttribute
属性添加到服务类,以表明您支持它。
有关此主题的更多信息,请访问here on MSDN.
答案 1 :(得分:0)
两个应用程序中缓存的主要挑战是缓存可以存储在单独的计算机上,或者如果它们位于同一台计算机上,则位于不同的应用程序池中。
您可以这样做的一种方法是允许两个应用程序使用相同的缓存。用于分发缓存的一个解决方案是Appfabric caching。