<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://aspnetpodcast.com/CS11/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ASP.NET Podcast : IIS7, IIS</title><link>http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/tags/IIS7/IIS/default.aspx</link><description>Tags: IIS7, IIS</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>ASP.NET Podcast Show #98 - Building an IIS7 Http Module (video and audio)</title><link>http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2007/08/01/asp-net-podcast-show-98-building-an-iis7-http-module.aspx</link><pubDate>Wed, 01 Aug 2007 20:15:00 GMT</pubDate><guid isPermaLink="false">8e92ef88-20b4-458c-a7a2-fffbfecb3f94:954</guid><dc:creator>admin</dc:creator><slash:comments>4</slash:comments><comments>http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/comments/954.aspx</comments><wfw:commentRss>http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/commentrss.aspx?PostID=954</wfw:commentRss><description>&lt;P&gt;&lt;FONT size=4&gt;&lt;A href="http://www.scalabledevelopment.com/ftp/ScalabilityWithDotNet.xml"&gt;Subscribe&lt;/A&gt; &amp;lt;-- What you really want.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.aspnetpodcast.com/VideoFiles/ASPNETPodcast20070801-IIS7HttpModule.wmv"&gt;Download WMV&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.aspnetpodcast.com/VideoFiles/ASPNETPodcast20070801-IIS7HttpModule.m4v"&gt;Download M4V&lt;/A&gt; - IPod and Zune&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.aspnetpodcast.com/PodcastFiles/ASPNETPodcast20070801-IIS7HttpModule.mp3"&gt;Download MP3&lt;/A&gt; - Audio only.&lt;/P&gt;
&lt;P&gt;Show notes:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows Server 2008.&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Visual C# Express.&lt;/LI&gt;
&lt;LI&gt;Visual Web Developer Express.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Class Library in C#.&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;IHttpModule Interface.&lt;/LI&gt;
&lt;LI&gt;Init, Dispose. &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Begin/End Request Events.&lt;/LI&gt;
&lt;LI&gt;Other Server Events.&lt;/LI&gt;
&lt;LI&gt;Messaging?&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;Web.Config.&lt;/LI&gt;
&lt;LI&gt;Example.&lt;/LI&gt;
&lt;LI&gt;IIS Manager.&lt;/LI&gt;
&lt;LI&gt;WebDev Server vs. IIS7 Service.&lt;/LI&gt;
&lt;LI&gt;Error and how to fix it.&lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Source Code:&lt;/P&gt;
&lt;P&gt;using System;&lt;BR&gt;using System.Collections.Generic;&lt;BR&gt;using System.Text;&lt;BR&gt;using System.Web;&lt;BR&gt;using System.Messaging;&lt;BR&gt;&lt;BR&gt;namespace IISWatcher&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class WatchRequests : IHttpModule&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Init(System.Web.HttpApplication app)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; app.BeginRequest += new EventHandler(app_BeginRequest);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; app.EndRequest += new EventHandler(app_EndRequest);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void app_EndRequest(object sender, EventArgs e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //HttpApplication app = (HttpApplication)sender;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; void app_BeginRequest(object sender, EventArgs e)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string strReturn = "\r\n";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpApplication app = (HttpApplication)sender;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string strAddress = app.Request.UserHostAddress;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string strUrl = app.Request.Url.AbsoluteUri;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string strQS = app.Request.QueryString.ToString();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RequestInfo ri = new RequestInfo();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Diagnostics.EventLog.WriteEntry("HttpModule", &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "IpAddress: " + strAddress + strReturn + "URL:" + strUrl);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Messaging.MessageQueue msq = new MessageQueue(@".\private$\HttpModuleQueue");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ri.AbsoluteUri = strUrl;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ri.IPAddress = strAddress;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ri.QueryString = strQS;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msq.Send(ri);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Dispose()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class RequestInfo&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string IPAddress;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string AbsoluteUri;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string QueryString;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Web.config for IIS7:&lt;/P&gt;
&lt;P&gt;&amp;lt;configuration&amp;gt;&lt;BR&gt;...................&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;system.webServer&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;modules&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add type="IISWatcher.WatchRequests" name="IIS7RequestWatcher"/&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/modules&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/system.webServer&amp;gt;&lt;BR&gt;&amp;lt;/configuration&amp;gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://aspnetpodcast.com/CS11/aggbug.aspx?PostID=954" width="1" height="1"&gt;</description><category domain="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/tags/ASP.NET+Podcast/default.aspx">ASP.NET Podcast</category><category domain="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/tags/IIS/default.aspx">IIS</category><category domain="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/tags/Community+News/default.aspx">Community News</category><category domain="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/tags/Http+Module/default.aspx">Http Module</category><category domain="http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/tags/HttpModule/default.aspx">HttpModule</category></item></channel></rss>