15

我在我的 default.aspx.cs 文件中声明了一个 WebMethod。

[WebMethod]
public static void ResetDate()
{
   LoadCallHistory(TheNewDate.Date);
}

为什么必须将 WebMethod 方法声明为静态的?

4

1 回答 1

14

它们是静态的,因为它们完全是无状态的,它们不会创建页面类的实例,并且在请求中没有任何内容传递给它们(即 ViewState 和表单字段值)。

默认情况下,HTTP 是无状态的,ASP.Net 在标准页面请求期间使用 ViewState、Session 等在后台做很多事情,以使开发人员的生活更轻松。

当通过 AJAX 调用 Web 方法时,页面不会发送 ASP.Net 嵌入页面以跟踪请求状态的所有必要表单数据,因为这会使 Web 方法变得太慢;如果您需要进行大量处理,则应将其移至专用的 Web 服务。

您可以使用HttpContext.CurrentHandler访问页面上的方法,这里有更详细的解释,如果您需要,还可以通过HttpContext.Current.User访问当前用户。

这里有一篇优秀的文章更详细地解释了这一点。

于 2013-08-27T10:57:01.497 回答