【发布时间】:2013-08-27 10:40:44
【问题描述】:
我在我的 default.aspx.cs 文件中声明了一个 WebMethod..
[WebMethod]
public static void ResetDate()
{
LoadCallHistory(TheNewDate.Date);
}
为什么必须将 WebMethod 方法声明为静态?
【问题讨论】:
我在我的 default.aspx.cs 文件中声明了一个 WebMethod..
[WebMethod]
public static void ResetDate()
{
LoadCallHistory(TheNewDate.Date);
}
为什么必须将 WebMethod 方法声明为静态?
【问题讨论】:
它们是静态的,因为它们完全是无状态的,它们不会创建页面类的实例,并且不会在请求中向它们传递任何内容(即 ViewState 和表单字段值)。
HTTP 默认是无状态的,ASP.Net 在标准页面请求期间通过 ViewState、Session 等在后台做很多事情,以使开发人员的生活更轻松。
当通过 AJAX 调用 Web 方法时,页面不会发送 ASP.Net 嵌入页面以跟踪请求状态的所有必要表单数据,因为这会使 Web 方法变得太慢;如果您需要进行大量处理,则应将其移至专用的 Web 服务。
您可以使用HttpContext.CurrentHandler 访问页面上的方法,here 有更详细的说明,如果您需要,还可以通过HttpContext.Current.User 访问当前用户。
有一篇很棒的文章 here 更详细地解释了这一点。
【讨论】: