Набросал тестовый пример для наглядности:
public class IISModule : IHttpModule
{
List<string> Log;
public void Init(HttpApplication app)
{
Log = new List<string>();
app.BeginRequest += new EventHandler(app_BeginRequest);
}
public void Dispose() { }
private void app_BeginRequest(object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpRequest request = application.Context.Request;
Log.Add(DateTime.Now.ToString() + "\t" + request.HttpMethod + "\t" + request.RawUrl);
}
}
Вопрос в следующем: будет ли app_BeginRequest вызываться последовательно для каждого запроса при одновременном поступлении нескольких запросов? Если это так, то следовательно не стоит беспокоиться о добавлении элементов в список Log и менять List на ConcurenceBag, т.к. это действие не может выполняться одновременно в нескольких потоках? Правильно ли я понял принцип работы IIS: он все запросы ставит в очередь и последовательно выбирает из неё по одному запросу и обрабатывает его с помощью app_BeginRequest?