在ASP中使用WCF服务.NET,如何缓存
本文关键字:何缓存 缓存 NET ASP 服务 WCF | 更新日期: 2023-09-27 18:03:54
在这种情况下有两种情况:
我想查询一个WCF服务并将数据保存在某个地方,因为其中一个网页基于从该服务检索到的数据呈现。我不希望页面本身查询服务,但我宁愿有某种预定的worker,每隔几分钟运行一次,检索数据并将其保存在某个地方。
我应该在哪里缓存服务响应,以及如何正确地创建每隔几分钟查询服务的任务?
我认为我可以通过将响应保存到一个静态变量来实现这一点,与最后一个查询日期一起,然后检查页面加载,如果时间已经过去,我调用服务并刷新数据,否则我使用静态缓存。
这也可以解释很长一段时间没有用户访问页面的情况,并且站点不会徒劳地查询服务。
但这似乎有点粗糙,有没有其他更好的方法来完成这类任务?
你确实可以采用另一种方法,比如让一个计划好的程序查询信息,并把它放在一个内存缓存中,供你的农场中的所有web服务器使用。然而,这是否更适合你的场景取决于你的应用的大小以及你想在上面花费多少时间/精力。
内存缓存比静态变量更难实现/支持,但有时更好,因为静态变量可以在每次服务器重置时被清除(例如在X分钟不活动后)
根据系统的大小,我将从静态变量开始,测试该方法一段时间,然后决定是否需要更复杂的方法。
你有没有看过Velocity
Nico:你为什么不写一个简单的控制台守护进程来获取数据并将其存储在你的数据库中,然后让你的web应用程序从你的本地副本获取数据?你可以让掌机应用每隔一段时间运行一次。如果您使用的是sql server 2008,插入数据应该不是问题。您可以将可数据参数传递给存储过程,并在一次调用中插入整个表。如果你不使用Sql Server 2008,那么序列化web服务返回的整个集合,并将其存储在一个大blob列的表中,并在获得数据时记录时间戳。然后,您可以读取该列的内容,反实现您的集合并将其重构为本机对象,以便在页面上显示。
我从来没有见过(我不认为这是可能的)让你的web应用程序查询web服务的每一个特定的时间。想象一下,网站闲置了几个小时,因此没有人与之互动。这意味着不会触发任何事件,也不会查询任何内容。
或者,您可以创建一个以特定间隔执行javascript函数的虚拟页面,并让该javascript函数向服务器发出ajax请求,以从web服务获取数据并缓存数据。问题是,当您离开该页面时,什么也不会发生,您将停止查询web服务。