【问题标题】:WCF Cache vs. Page.CacheWCF 缓存与 Page.Cache
【发布时间】:2011-12-02 02:42:43
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: asp.net wcf caching


    【解决方案1】:

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

    关于这个主题的更多信息可以找到here on MSDN.

    【讨论】:

    • 太棒了!这正是我所需要的。谢谢!
    【解决方案2】:

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

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

    【讨论】:

    • 是的,就我而言,绝对不值得进入 AppFabric 之类的东西。我已经在这上面花费了足够的时间;我只需要停止缓存,或者将缓存过期时间设置得非常低,比如一两分钟。不过谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-02-24
    • 2011-01-07
    • 2010-10-29
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    相关资源
    最近更新 更多