我正在silverlight中创建一个图形工具,用于从多个文件和数据库中读取数据。
我不想一次又一次地调用数据库。我想在需要时检索数据并在某处保持安全,因此如果用户或任何其他用户访问同一页面,他们就可以访问数据。
我想使用asp.net Cache [“Object”]的应用程序状态但是在Silverlight中?什么是最好的方法?
答案 0 :(得分:4)
由于silverlight正在运行客户端,因此您需要缓存服务器端。 您可以使用WCF获取数据。 这些方面的东西:
我过去所做的是使用enterprise library使用WCF缓存查询:
public class YourWcfService
{
ICacheManager _cacheManager = null;
public YourWcfService()
{
_cacheManager = EnterpriseLibraryContainer.Current.GetInstance<ICacheManager>("Cache Manager");
}
}
您的网络方法如下所示:
[OperationContract]
public List<Guid> SomeWebMethod()
{
if (_cacheManager.Contains("rgal")) // data in cache?
result = (List<Guid>)_cacheManager.GetData("rgal");
if (result == null)
{
result = FETCH FROM DATABASE HERE;
// cache for 120 minutes
_cacheManager.Add("rgal", result, CacheItemPriority.Normal, null, new AbsoluteTime(TimeSpan.FromMinutes(120)));
}
return result;
}
答案 1 :(得分:1)
每个用户在浏览器/客户端运行Silverlight控件,因此无法为服务器上的所有用户缓存内容。
您可以在给定用户会话的控件中缓存数据,也可以在给定用户的隔离存储中缓存数据。但是如果不编写相应的服务器端代码,就无法在服务器上执行任何操作。
答案 2 :(得分:0)
缓存真的有必要吗?你真的在敲打你的数据库那么糟糕吗?
您的数据库是您的存储空间。除非您遇到性能问题,否则这是不成熟的优化。
答案 3 :(得分:0)
新的企业库Silverlight Integration Pack为您提供了在客户端上缓存的功能。支持2种类型的数据缓存:内存和隔离存储。您还可以灵活地配置过期策略(以编程方式或通过外部配置)和配置工具支持。
注意:现在是代码预览,但应该在5月份发布为最终版。