2010-06-29 90 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「事件」是請求和響應。