我想要在ASMX函数调用的生命周期中尽早执行一些代码。对于我们的ASPX页面,此代码位于基类的Page_Init()函数中,所有ASPX页面都从该函数继承。
ASMX是否与ASPX的Page_Init()函数等效?
更好的是,是否有像ASPX一样的ASMX生命周期图? http://msdn.microsoft.com/en-us/library/ms178472.aspx
如果有一个与Page_Init()相当的ASMX,我假设我可以在一个公共基类中实现代码,我的所有ASMX类都可以从中继承,更正吗?
修改 很好的回复 - 感谢您的帮助!
答案 0 :(得分:9)
在asmx Web服务中确实没有这样的东西,System.Web.Services.WebService没有事件。你最好的办法是创建一个默认构造函数并将其放在那里。
e.g。
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class WebService1 : System.Web.Services.WebService
{
private string strRetVal;
public WebService1()
{
strRetVal = "Hello World";
}
[WebMethod]
public string HelloWorld()
{
return strRetVal;
}
}
答案 1 :(得分:4)
非常好的问题!
不完全确定,但我相信ASMX Web服务的执行与ASPX Pages略有不同 - 没有“页面生命周期”(即没有初始化控件以呈现HTML - 因为响应通常是XML )。
您唯一的选择是挂钩Global.asax中的一个Application事件 - 唯一合适的事件是Application_PreRequestHandlerExecute
。
您可以尝试Application_BeginRequest
,但我相信这仅适用于ASP.NET页面请求,而不适用于Web服务调用。
您可以选择(如您所述)为Web服务创建基类,然后在第一行调用所有Web方法中的公共基本方法。您必须在所有Web方法中重复此调用。或者,如果您在一个Web服务文件(ASMX)中拥有所有Web方法,那么只需创建一个常规静态方法(不要使用WebMethod属性对其进行修饰)并调用它。
答案 2 :(得分:0)
他们没有类似的“生命周期”
唯一的2个'事件'是请求和响应。