在 asp.net 网络服务 (asmx) 中,是从代码调用时应用的 CacheDuration
In asp.net webservices (asmx), is the CacheDuration applied when called from code
当我在 asmx 服务中的一个方法上设置 CacheDuration
时,它被正确应用。
现在,如果我从同一个网站的另一个方法甚至同一个服务调用这个方法,这个持续时间也会应用吗?
当您调用具有缓存持续时间的方法时:
- 像普通方法一样从同一个网站调用 → 无缓存调用
- 像普通方法一样从同一服务调用 → 无缓存调用
- 作为 Web 服务方法调用(使用服务代理)→ 使用缓存调用
缓存仅在调用通过 ASP.NET 管道时应用。但是如果你像普通方法一样调用该方法,它就不会使用缓存。事实上,当调用是普通方法调用时,WebMethod
属性对调用没有任何影响。
例子
我想你正在寻找一个简单的测试场景,所以你可以创建这样的网络服务来测试:
[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 服务调用不使用缓存。
当我在 asmx 服务中的一个方法上设置 CacheDuration
时,它被正确应用。
现在,如果我从同一个网站的另一个方法甚至同一个服务调用这个方法,这个持续时间也会应用吗?
当您调用具有缓存持续时间的方法时:
- 像普通方法一样从同一个网站调用 → 无缓存调用
- 像普通方法一样从同一服务调用 → 无缓存调用
- 作为 Web 服务方法调用(使用服务代理)→ 使用缓存调用
缓存仅在调用通过 ASP.NET 管道时应用。但是如果你像普通方法一样调用该方法,它就不会使用缓存。事实上,当调用是普通方法调用时,WebMethod
属性对调用没有任何影响。
例子
我想你正在寻找一个简单的测试场景,所以你可以创建这样的网络服务来测试:
[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 服务调用不使用缓存。