2010-06-29 86 views
9

我有一些代码,我希望在调用ASMX函数的生命周期中尽早执行。对于我们的ASPX页面,这些代码位于基类的Page_Init()函数中,我们所有的ASPX页面都从中继承。ASMX等价于Page_Init?

是否存在与ASPX的Page_Init()函数等价的ASMX?

更好的是,是否有像ASPX之类的ASMX生命周期图? http://msdn.microsoft.com/en-us/library/ms178472.aspx

如果有一个与Page_Init()等价的ASMX,我认为我可以在一个公共基类中实现代码,我的所有ASMX类都可以从中继承,更正?

编辑: 伟大的回应 - 感谢您的帮助!

回答

8

在asmx Web服务中没有这样的事情,System.Web.Services.WebService没有事件。你最好的选择是创建一个默认构造函数并将其放在那里。

例如

[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

+1 - 好点。忘了Web服务调用是“无状态的”,因此将为每个Web方法请求调用构造函数。好一个。 – RPM1984 2010-06-29 21:37:05

4

很好的问题!

不完全确定,但我相信ASMX Web服务的执行与ASPX页面略有不同 - 没有“页面生命周期”(即没有为了呈现HTML而对控件进行初始化 - 因为响应一般XML)。

您的唯一选择是挂入Global.asax中的某个应用程序事件 - 唯一合适的事件是Application_PreRequestHandlerExecute

您可以尝试Application_BeginRequest,但我相信这只适用于ASP.NET页面请求,而不是Web服务调用。

你是另一种选择(如你所说)是为你的Web服务创建一个基类,然后在第一行调用所有Web方法中的通用基方法。您将不得不在所有网络方法中重复此调用。或者,如果您将所有Web方法都放在单个Web服务文件(ASMX)中,那么只需创建一个常规的静态方法(不要使用WebMethod属性来修饰它)并调用它。

+0

比接受的anser imho的Beter路线。 (特别是如果你需要在请求上下文中做些什么)。 – 2014-06-20 09:32:26

0

他们没有类似的“生命周期”

只有2“事件”是请求和响应。