簡體   English   中英

IIS模塊:Init()在網站中僅被調用一次?

[英]IIS module: Init() is called only once in a website?

我需要添加IIS模塊進行某些處理。 這是我的模塊:

namespace MyNamespace
{
    public class MyModule : IHttpModule
    {
        #region IHttpModule Members

        public void Dispose()
        {
        }

        public void Init(HttpApplication context)
        {
            //I hope to do some work here ONLY once for all requests

            context.ReleaseRequestState += new EventHandler(myHandler);
        }

        #endregion

        public void myHandler(Object source, EventArgs e)
        {
            //do some work...
        }
    }
}

我需要在Init()方法中做一些耗資源的工作。 我希望Init僅在網站中被調用一次,並且僅當在IIS管理器中重新啟動網站時才再次調用它。

專家可以告訴我Init()是否按我的期望工作?

謝謝!

對於正在執行的任何請求,它將始終調用此方法,因此不會,這不是應用程序池第一次啟動。 您可能希望做的是在其中有一個靜態變量,以查看它是否真的是第一次被擊中,如果不是,請繼續執行您需要的操作,否則將其忽略。 將變量設置為true時,請確保鎖定代碼部分。

請記住,IIS具有網站使用的應用程序池(通常而言)。 會有多個並發請求進入IIS進行處理,會發生什么? 應用程序池執行以將請求提供給網站,因此將為HttpModule的Init()執行多個“匹配”,但每個應用程序執行一次,如果可以的話。

他們每個人都會初始化自己的模塊列表。

您可以選擇在全局asax中使用Application_Start事件,該事件只會在每個應用程序中執行一次(當應用程序池旋轉且正在提交請求時)-也許您可以使用它來滿足您的需求,這將是更好的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM