在ASP.NET中使用WCF服务,如何缓存?

时间:2011-07-28 13:25:52

标签: c# asp.net wcf

在这种情况下我有两种情况:

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

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

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

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

但它看起来有点粗糙,还有其他更好的方法可以完成这种任务吗?

3 个答案:

答案 0 :(得分:0)

您是否看过Velocity

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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

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

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