当你调用具有缓存时长的方法时:
- 像普通方法一样从同一网站调用 → 没有缓存的调用
- 像普通方法一样从同一个服务调用 → 没有缓存的调用
- 作为 Web 服务方法调用(使用服务代理)→ 使用缓存调用
缓存仅在调用通过 ASP.NET 管道时应用。但是,如果您像普通方法一样调用该方法,则它不会使用缓存。事实上WebMethod属性在调用为普通方法调用时对调用没有任何影响。
示例
我想你正在寻找一个简单的测试场景,所以你可以创建这样的 web 服务来测试:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod(CacheDuration=10)]
public string GetDate1()
{
return DateTime.Now.ToString();
}
[WebMethod]
public string GetDate2()
{
return this.GetDate1();
}
}
1)要测试来自同一个项目的调用方法,在一个aspx页面中,您可以通过单击按钮编写这样的代码并运行它3-4次以查看结果:
var svc = new WebService1();
this.Label1.Text = string.Format("{0} | {1}", svc.GetDate1(), svc.GetDate2());
在所有执行中,您将看到没有任何缓存的时间,并且您可以看到从同一站点调用和从同一服务调用之间没有区别。
2) 还要测试调用作为 Web 服务的方法,例如在一个 Windows 窗体项目中添加 Web 引用,在按钮中单击写入:
var svc = new localhost.WebService1();
MessageBox.Show(string.Format("{0} | {1}", svc.GetDate1(), svc.GetDate2()));
然后您可以看到svc.GetDate1() 显示缓存数据,svc.GetDate2() 显示当前时间,而它在内部使用svc.GetDate1()。因此,作为 Web 服务调用使用缓存,但从同一个 Web 服务调用不使用缓存。