[英]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.