【问题标题】:Consuming WCF Service in ASP.NET, how to cache?在 ASP.NET 中使用 WCF 服务,如何缓存?
【发布时间】:2011-07-28 13:25:51
【问题描述】:

这种情况我有两种情况:

我想查询 WCF 服务并将数据保存在某处,因为其中一个网页是根据从服务中检索到的数据呈现的。我不希望页面本身查询服务,但我宁愿有某种计划的工作人员每隔几分钟运行一次,并检索数据并将其保存在某个地方。

我应该在哪里缓存服务响应,以及创建任务以每隔几分钟查询一次服务的正确方法是什么?

我想我可以通过将响应保存到静态变量以及上次查询日期来实现这一点,然后检查页面加载是否已经过了足够的时间,我调用服务并刷新数据,否则我使用静态缓存。

这也可以解释长时间没有用户访问该页面的情况,并且该站点没有徒劳地查询该服务。

但这似乎有点粗糙,还有其他更好的方法来完成这种任务吗?

【问题讨论】:

  • 如果你想非常聪明,你可以使用 CLR 存储过程来使用按预定时间间隔运行的服务,然后使用 SqlCacheDependency :D

标签: c# asp.net wcf


【解决方案1】:

您确实可以采用另一种方法,例如让计划程序查询信息并将其放入内存缓存中,该缓存可供您场中的所有 Web 服务器使用。但是,这是否更适合您的方案取决于您的应用程序的大小以及您希望在其上花费多少时间/精力。

内存缓存比静态变量更难实现/支持,但有时它会更好,因为每次服务器重置时都可以清除静态变量(例如在 X 分钟不活动后)

根据您系统的大小,我将从静态变量开始,测试该方法一段时间,然后决定是否需要更复杂的东西。

【讨论】:

    【解决方案2】:

    你看过Velocity

    【讨论】:

    • 仅供参考:版本名称是“Windows Server AppFabric Caching”(我更喜欢 Velocity)msdn.microsoft.com/en-us/magazine/ff714581.aspx
    • Velocity 方法看起来很简洁,但这样做似乎有点矫枉过正。我想您需要有一台专门用于运行该服务的服务器,并且需要做很多设置。
    【解决方案3】:

    Nico:您为什么不编写一个简单的控制台守护程序来获取数据并将其存储在数据库中,然后让您的 Web 应用程序从本地副本中获取数据?您可以让该控制台应用程序每隔一定时间运行一次。如果您使用的是 sql server 2008,插入数据应该不是问题。您可以将数据表参数传递给存储过程,并在一次调用中插入整个表。如果您不使用 Sql Server 2008,则将 Web 服务返回的整个集合序列化并存储在一个大 blob 列中的表中,并记录获取数据时的时间戳。然后,您可以阅读该列的内容,对您的集合进行反现实化并将其重建为原生对象以显示在您的页面上。

    我从未见过(而且我认为不可能)让您的网络应用每隔一定时间查询一次网络服务。想象一下,网站闲置了几个小时,因此没有任何人互动。这意味着不会触发任何事件,也不会查询任何内容。

    或者,您可以创建一个虚拟页面,每隔一段时间执行一个 javascript 函数,并让该 javascript 函数向服务器发出 ajax 请求,以从 Web 服务获取数据并缓存数据。问题是,当您走出该页面时,什么都不会发生,您将停止查询 Web 服务。我认为这很愚蠢。

    【讨论】:

    • 为什么我要获取没有人渲染的数据呢?
    • 别问我,问自己这个问题。您是说即使网站上没有任何活动也需要定期缓存数据的人。
    • 不,不。对不起,如果我让它看起来那样,我的意思是相反的。如果没有人尝试呈现使用此信息的页面,我不希望网站查询服务,因为这没有任何意义。
    • 我明白了。如果是这种情况,只要您有对 System.Web 的引用,您就应该能够通过指定 HttpRuntime.Cache 来使用 ASP.NET Cache 类。实际上不必有当前的 HttpContext 即可使用它。您可以缓存特定的时间跨度,仅此而已。如果缓存中的对象已过期,则再次查询 Web 服务。
    • 另外,您可以使用企业库缓存应用程序块。看这个帖子:msdn.microsoft.com/en-us/library/dd203248.aspx
    猜你喜欢
    • 1970-01-01
    • 2011-04-13
    • 2011-02-13
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多