Я не уверен, в чем смысл HTTPHandler, но вся запись в журнал может быть выполнена из HTTPModule. Однако ваш код нуждается в существенном улучшении, чтобы выжить.
1) У вас должны быть блоки try / catch вокруг потоковых писателей, чтобы не создавать необработанные исключения, особенно если вы пытаетесь быть ненавязчивыми.
2) Код streamwriter должен быть заключен в блок using, чтобы не тратить ресурсы.
3) Поскольку у вас может быть несколько потоков, пытающихся выполнить запись в файл одновременно, вам необходимо заключить код записи в блок блокировки.
4) Вы можете использовать HttpContext.Current.Request для доступа к текущему запросу, который, я подозреваю, может быть тем, что вы сделали в HttpModule. Если это не было намерением, нам понадобятся дополнительные разъяснения.
5) Если вы запускаете приложение в режиме отладки, а метод Init не используется, то ваши записи web.config неверны. Тип должен быть полностью определен (т. Е. Включать пространство имен), и вы должны добавить конфигурацию в интегрированном и классовом режимах:
Классический режим (IIS 6, IIS 7+ classic)
<configuration>
<system.web>
<httpModules>
<add name="MyModule" type="MyNamespace.MyModule"/>
</httpModules>
</system.web>
</configuration>
Интегрированный режим (интегрированный IIS 7+)
<configuration>
<system.webServer>
<modules>
<add name="MyModule" type="MyNamespace.MyModule"/>
</modules>
</system.webServer>
</configuration>
Вот переписанный код:
static Object m_LockObject = new Object();
public void Init(HttpApplication objApplication)
{
// Register event handler of the pipe line
objApplication.BeginRequest += new EventHandler(this.ContextBeginRequest);
objApplication.EndRequest += new EventHandler(this.ContextEndRequest);
}
public void ContextEndRequest(object sender, EventArgs e)
{
try
{
lock (m_LockObject)
{
using (StreamWriter sw = new StreamWriter(@"C:\requestLog.txt", true))
{
sw.WriteLine("End request called at " + DateTime.Now.ToString() + "; URL: " + HttpContext.Current.Request.RawUrl.ToString());
}
}
// Write the response back to the caller
HttpContext.Current.Response.Write("The page request is " + HttpContext.Current.Request.RawUrl.ToString());
}
catch
{
}
}
public void ContextBeginRequest(object sender, EventArgs e)
{
try
{
lock (m_LockObject)
{
using (StreamWriter sw = new StreamWriter(@"C:\requestLog.txt", true))
{
sw.WriteLine("Begin request called at " + DateTime.Now.ToString() + "; URL: " + HttpContext.Current.Request.RawUrl.ToString());
}
}
}
catch
{
}
}