调用 [WebMethod]s 时的 ASPX 页面生命周期
ASPX Page Life Cycle when calling [WebMethod]s
我正在通过 jQuery ajax.
调用许多用 [WebMethod] 装饰的方法
这些需要在外部库中建立数据库连接,每个方法都相同。
我的原始代码如下所示:
public partial class Server : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// code to set up DB connections
ExternalLibrary.SetupDB();
}
[WebMethod]
public static string AjaxAccessibleMethod()
{
try
{
// get some data from the database via the external library
ExternalLibrary.CallDatabase();
}
catch(Exception ex)
{
// handle errors
}
}
}
这是可行的,但随后开始抛出异常,声称 ExternalLibrary 的数据库尚未初始化。
在我的代码中放置断点我发现在调用我的 AjaxAccessibleMethod 时没有调用 Page_Load 事件,我还尝试将数据库设置内容移动到 Page_Init 事件中,但同样没有'叫了。
任何人都可以向我解释一下使用 WebMethods 时的 aspx 页面生命周期吗?这最初有效的事实似乎暗示 Page_Load 被调用,但它不再是。
请注意您用作 WebMethod 的方法是静态的,这应该是第一个提示根本没有创建 Page 对象的事实。
Page Methods 是完全成熟的 Web 服务的简单替代品,因此,它的生命周期更类似于 Web 服务而不是页面。也就是说,请求通过通用 ASP.NET 管道,其中包含 HttpContext、Request 等对象。但是随后发生了区别:对于页面请求和回发,页面对象被创建并且整个系列的页面事件发生,而对于页面方法页面对象没有创建,并且方法被简单地称为 Server.AjaxAccessibleMethod()
.
确实没有办法将两者混合,因为这会使对页面方法调用的处理不必要地复杂化。所以这里唯一的前进道路是重复必要的代码:
protected void Page_Load(object sender, EventArgs e)
{
// code to set up DB connections
ExternalLibrary.SetupDB();
}
[WebMethod]
public static string AjaxAccessibleMethod()
{
ExternalLibrary.SetupDB();
...
}
我正在通过 jQuery ajax.
调用许多用 [WebMethod] 装饰的方法这些需要在外部库中建立数据库连接,每个方法都相同。
我的原始代码如下所示:
public partial class Server : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// code to set up DB connections
ExternalLibrary.SetupDB();
}
[WebMethod]
public static string AjaxAccessibleMethod()
{
try
{
// get some data from the database via the external library
ExternalLibrary.CallDatabase();
}
catch(Exception ex)
{
// handle errors
}
}
}
这是可行的,但随后开始抛出异常,声称 ExternalLibrary 的数据库尚未初始化。
在我的代码中放置断点我发现在调用我的 AjaxAccessibleMethod 时没有调用 Page_Load 事件,我还尝试将数据库设置内容移动到 Page_Init 事件中,但同样没有'叫了。
任何人都可以向我解释一下使用 WebMethods 时的 aspx 页面生命周期吗?这最初有效的事实似乎暗示 Page_Load 被调用,但它不再是。
请注意您用作 WebMethod 的方法是静态的,这应该是第一个提示根本没有创建 Page 对象的事实。
Page Methods 是完全成熟的 Web 服务的简单替代品,因此,它的生命周期更类似于 Web 服务而不是页面。也就是说,请求通过通用 ASP.NET 管道,其中包含 HttpContext、Request 等对象。但是随后发生了区别:对于页面请求和回发,页面对象被创建并且整个系列的页面事件发生,而对于页面方法页面对象没有创建,并且方法被简单地称为 Server.AjaxAccessibleMethod()
.
确实没有办法将两者混合,因为这会使对页面方法调用的处理不必要地复杂化。所以这里唯一的前进道路是重复必要的代码:
protected void Page_Load(object sender, EventArgs e)
{
// code to set up DB connections
ExternalLibrary.SetupDB();
}
[WebMethod]
public static string AjaxAccessibleMethod()
{
ExternalLibrary.SetupDB();
...
}