【发布时间】:2012-05-09 00:18:09
【问题描述】:
好的,我有一个非常复杂的 silverlight 应用程序,它从 WCF 服务(asp.net 托管服务层)获取其数据,该服务又调用一个数据层,该数据层调用 SQL 2005 DB 中的存储过程以提取所需的数据.所以往返是这样的:
Silverlight App --> WCF 服务 --> 数据层 --> DB --> 数据层 --> WCF 服务将数据实体转换为相应的 DTO(数据传输对象)或其列表 --> Silverlight 应用程序
大部分数据是高度相关的(因此它需要存在于数据库中),但不会经常更改。似乎我有几种位置可以缓存这个“半常数”数据:
- 我可以在数据层缓存它。我的数据层已经设置为使用 SQLDependency 类并缓存存储过程调用的结果。我认为这是或可以是应用程序级缓存。
- 我可以在 WCF 服务本身的应用程序级别(或会话级别,取决于调用)缓存中缓存生成的 DTO。 2(a) 我什至可以更进一步,将生成的 DTO 的 XML 序列化到 WCF 服务端的文件中,以便我可以 (a) 检查内存缓存,然后 (b) 检查文件缓存和(c) 命中数据层
- 我可以在 SL 应用程序的客户端使用隔离存储来执行类似于 2(a) 的操作。我可以使用哈希(或 moddate 或其他东西)将数据序列化到本地隔离存储,然后调用来检查。
还要补充一点:我在 IIS7 中托管此 WCF 服务,并启用了动态压缩,以便(通常非常大且易于压缩)XML 响应得到 gzip-ed。理想情况下,我希望 IIS 缓存这个 gzip 编辑的结果,以避免所有额外的处理。我认为它可能已经这样做了,但我不确定。
我很确定这个问题的最终答案是“视情况而定”,但我很想听听其他人是如何解决这个问题的。 Do X 的一个很好的战术配方,使用工具 Y 测试性能,如果需要的话,do Z 会很棒。
一些链接(我会在研究时添加):
【问题讨论】:
标签: wcf silverlight caching