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() 执行多个 "hits",但每个应用程序执行一次,如果这有意义的话。
他们每个人都初始化自己的模块列表。
您确实可以选择在全局 asax 中使用 Application_Start 事件,每个应用程序只会执行一次(当应用程序池启动并提交请求时)- 也许您可以使用这符合您的需要,这将是一个更好的选择。
我需要为某些处理添加 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() 执行多个 "hits",但每个应用程序执行一次,如果这有意义的话。
他们每个人都初始化自己的模块列表。
您确实可以选择在全局 asax 中使用 Application_Start 事件,每个应用程序只会执行一次(当应用程序池启动并提交请求时)- 也许您可以使用这符合您的需要,这将是一个更好的选择。