当我在asmx服务中的方法上设置CacheDuration
时,它会被正确应用。
现在,如果我从同一网站中的其他方法甚至是同一服务中调用此方法,是否也会应用此持续时间?
答案 0 :(得分:3)
当您调用具有缓存持续时间的方法时:
缓存仅在调用通过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服务方法的调用,例如,在按钮单击写入中添加Web引用到Windows窗体项目:
var svc = new localhost.WebService1();
MessageBox.Show(string.Format("{0} | {1}", svc.GetDate1(), svc.GetDate2()));
然后,您可以看到svc.GetDate1()
显示缓存数据,svc.GetDate2()
显示内部使用svc.GetDate1()
时的当前时间。因此,作为Web服务调用使用缓存,但是从同一Web服务调用不使用缓存。