调用[WebMethod]时的ASPX页面生命周期
本文关键字:生命 周期 ASPX 时的 WebMethod 调用 | 更新日期: 2023-09-27 18:11:44
我正在调用一些通过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的数据库尚未初始化。
在我的代码中放置断点,我发现Page_Load事件在调用我的AjaxAccessibleMethod时没有被调用,我还尝试将DB设置的东西移动到Page_Init事件中,但同样没有调用。
谁能给我解释一下使用WebMethods时aspx页面的生命周期?这个工作最初似乎意味着调用了Page_Load,但它不再是。
请注意,作为WebMethod使用的方法是静态的,这应该是第一个提示页面对象根本没有创建的事实。
Page Methods是完整web服务的简单替代方案,因此,它的生命周期更类似于web服务而不是页面。也就是说,请求通过一般的ASP。. NET管道,带有HttpContext, Request等对象。但是,不同之处在于:对于页面请求和回发,创建了页面对象,并发生了整个页面事件系列,而对于页面方法,不创建页面对象,并且方法被简单地称为Server.AjaxAccessibleMethod()
。
确实没有办法将两者混合在一起,因为这将不必要地使调用page方法的处理复杂化。所以这里唯一的路径是重复必要的代码:
protected void Page_Load(object sender, EventArgs e)
{
// code to set up DB connections
ExternalLibrary.SetupDB();
}
[WebMethod]
public static string AjaxAccessibleMethod()
{
ExternalLibrary.SetupDB();
...
}