您的位置:首页 > 编程语言 > C#

.Net C# Web Service 中的cacheDuration解释

2009-12-10 13:23 281 查看

Web Service 中的cacheDuration解释

Web服务定义一个单独的 GetInfo 方法,其CacheDuration值设为3600秒。在这个方法第一次被调用之后,随后3600秒之内如果参数sIndex相同,则都将返回相同的响应结果,即使数据(GetInfoFromDBByIndex(sIndex)的返回值)是从数据库中动态获得的也是如此。也就是说在3600秒内只对数据库进行一次查询。请看如下代码:

[WebMethod(
Description="Retrieve Index's information",
CacheDuration=3600)]
public string GetInfo(string sIndex)
{
try
{
return GetInfoFromDBByIndex(sIndex); //从数据库中获得与sIndex相关的信息
}
catch (Exception ex)
{
return “”;
}
}

这段代码如果用debug调试的方法就很容易发现,只是在第一次获得sIndex信息的时候才能进入到函数内部,在以后的3600秒内如果sIndex的值不发生变化则不在进入GetInfo中,但是如果sIndex发生变化,比如从 “小明” 变成 “小芳” 了则会再次进入到GetInfo中,并从数据库中获得小芳的信息。即使数据库中小明的信息发生了改变在3600秒内调用GetInfo获得小明的信息都是不会改变的,除非在数据库中添加触发机制来修改缓存中的小明的信息才可以,在这里我们暂时不予讨论。

需要注意的一点是跟踪调试的时候不要用http://localhost/aaa.asmx的方式调试,也就是VS按F5的方式进行调试,那样每次都会进到函数中去的,我也不知道为什么,花了我很长时间才发现的,开始我一直认为这个CacheDuration属性不能工作呢。最好编一个Form的测试程序,那样测试最好了。

危险之处:(摘自Kevin Koch的文章)
虽然CacheDuration属性在某些情况下可以大大提高性能,但是不要盲目地为你的Web方法打开缓存功能是很重要的,因为它可以导致相反、意想不到的结果。

在设计和架构阶段,要针对每个Web方法小心地测试估计的请求吞吐量和参数值,这样可以对是否在Web服务中使用响应缓存做出一个合乎逻辑的决定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: