<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.iis.net/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/" xmlns:cs="http://blogs.iis.net/"><channel><title>BillS IIS Blog : Samples &amp;amp; Demos</title><link>http://blogs.iis.net/bills/archive/tags/Samples+_2600_amp_3B00_+Demos/default.aspx</link><description>Tags: Samples &amp;amp; Demos</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>How to Script / Automate IIS7 Configuration (without writing code)</title><link>http://blogs.iis.net/bills/archive/2008/06/01/how-do-i-script-automate-iis7-configuration.aspx</link><pubDate>Mon, 02 Jun 2008 00:58:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2393607</guid><dc:creator>bills</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/bills/rsscomments.aspx?PostID=2393607</wfw:commentRss><comments>http://blogs.iis.net/bills/archive/2008/06/01/how-do-i-script-automate-iis7-configuration.aspx#comments</comments><description>&lt;P&gt;I hear this question a lot in the &lt;A href="http://forums.iis.net/" mce_href="http://forums.iis.net/"&gt;http://forums.iis.net/&lt;/A&gt;, and thanks to &lt;A href="http://blogs.iis.net/carlosag/" mce_href="http://blogs.iis.net/carlosag/"&gt;Carlos&lt;/A&gt; and team's rocking Configuration Editor, figuring this out on your own is a breeze.&amp;nbsp; Here is how you can generate code for ANY IIS7 configuration change, without writing a line yourself.&lt;/P&gt;
&lt;P&gt;1) download the IIS7 Administration Pack.&amp;nbsp; What, you don't have it already?&amp;nbsp; You're really missing out on some fantastic tools, including the Configuration Editor.&amp;nbsp; Learn more about the admin pack here &lt;A title=http://learn.iis.net/page.aspx/401/using-the-administration-pack/ href="http://learn.iis.net/page.aspx/401/using-the-administration-pack/" mce_href="http://learn.iis.net/page.aspx/401/using-the-administration-pack/"&gt;http://learn.iis.net/page.aspx/401/using-the-administration-pack/&lt;/A&gt;&amp;nbsp; You can download &lt;A href="http://www.iis.net/downloads/1682/ItemPermaLink.ashx" mce_href="http://www.iis.net/downloads/1682/ItemPermaLink.ashx"&gt;x86&lt;/A&gt; and &lt;A href="http://www.iis.net/downloads/1683/ItemPermaLink.ashx" mce_href="http://www.iis.net/downloads/1683/ItemPermaLink.ashx"&gt;x64&lt;/A&gt; from &lt;A href="http://www.iis.net/downloads" mce_href="http://www.iis.net/downloads"&gt;http://www.iis.net/downloads&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;2) open "IIS Manager" and click on the "Configuration Editor" feature under the "Management" category:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image.png" mce_href="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=480 alt=image src="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_thumb.png" width=644 border=0 mce_src="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;3) Find the configuration section(s) you want to edit using the drop-down combo box, in this case isapiFilters:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_3.png" mce_href="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_3.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=480 alt=image src="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_thumb_3.png" width=644 border=0 mce_src="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;4) use the configuration editor to make your change.&amp;nbsp; In this case, I'm editing a collection, which pops up a collection editor where I can add items to the isapiFilter list by clicking 'add' in the task pane.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_4.png" mce_href="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=459 alt=image src="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_thumb_4.png" width=644 border=0 mce_src="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;5) once you're done making any configuration updates, click on the 'Generate Script' task in the main Config Editor window:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_5.png" mce_href="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_5.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=480 alt=image src="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_thumb_5.png" width=644 border=0 mce_src="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_thumb_5.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;6) the script generator creates three ways of automating the configuration change you just made&amp;nbsp; C#, JavaScript (again the AHAdmin COM interface) and AppCmd.exe&lt;/P&gt;
&lt;P&gt;&lt;A href="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_6.png" mce_href="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_6.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=510 alt=image src="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_thumb_6.png" width=712 border=0 mce_src="http://wallpaper.iis7.org/blog/HowDoIScriptAutomateIIS7Configuration_FC71/image_thumb_6.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;7) Copy and Paste these changes into your own script / code and whoila, you've got sample code for making any IIS7 configuration change.&lt;/P&gt;
&lt;P&gt;You may also want to read up on the IIS7 Administration APIs.&amp;nbsp; You can find a lot more information here:&lt;/P&gt;
&lt;P&gt;&lt;A title="Using Scripts to Automate Management" href="http://learn.iis.net/page.aspx/98/using-scripts-to-automate-management/" mce_href="http://learn.iis.net/page.aspx/98/using-scripts-to-automate-management/"&gt;Using Scripts to Automate Management&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A title="Managing IIS with the IIS 7.0 PowerShell Provider" href="http://learn.iis.net/page.aspx/447/managing-iis-with-the-iis-70-powershell-provider/" mce_href="http://learn.iis.net/page.aspx/447/managing-iis-with-the-iis-70-powershell-provider/"&gt;Managing IIS with the IIS 7.0 PowerShell Provider&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2393607" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/bills/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/bills/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.iis.net/bills/archive/tags/Administration/default.aspx">Administration</category><category domain="http://blogs.iis.net/bills/archive/tags/Samples+_2600_amp_3B00_+Demos/default.aspx">Samples &amp;amp; Demos</category><category domain="http://blogs.iis.net/bills/archive/tags/IIS+News+Item/default.aspx">IIS News Item</category><category domain="http://blogs.iis.net/bills/archive/tags/Developers/default.aspx">Developers</category><category domain="http://blogs.iis.net/bills/archive/tags/Administrators/default.aspx">Administrators</category><category domain="http://blogs.iis.net/bills/archive/tags/Configuration/default.aspx">Configuration</category><category domain="http://blogs.iis.net/bills/archive/tags/Tutorial/default.aspx">Tutorial</category></item><item><title>Free IIS7 Online Training</title><link>http://blogs.iis.net/bills/archive/2007/09/10/free-iis7-online-training.aspx</link><pubDate>Mon, 10 Sep 2007 16:36:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:1901270</guid><dc:creator>bills</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/bills/rsscomments.aspx?PostID=1901270</wfw:commentRss><comments>http://blogs.iis.net/bills/archive/2007/09/10/free-iis7-online-training.aspx#comments</comments><description>&lt;P&gt;A few months ago the IIS team did a quick tour&amp;nbsp;of Europe, speaking in various cities and countries in an all-day IIS conference specifically geared toward training people on IIS7.&amp;nbsp; Luckily, the good people of Poland decided to record and publish the training for everyone to use.&amp;nbsp; Check out the sessions below to watch &lt;A href="http://brettblog.com/default.aspx" mce_href="http://brettblog.com/default.aspx"&gt;Brett Hill&lt;/A&gt; and Isaac Roybal present IIS7.&amp;nbsp; Here is a list of all the sessions:&amp;nbsp; &lt;A href="http://www.microsoft.com/emea/itsshowtime/result_search.aspx?event=69&amp;amp;x=13&amp;amp;y=2" mce_href="http://www.microsoft.com/emea/itsshowtime/result_search.aspx?event=69&amp;amp;x=13&amp;amp;y=2"&gt;http://www.microsoft.com/emea/itsshowtime/result_search.aspx?event=69&amp;amp;x=13&amp;amp;y=2&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;/B&gt;
&lt;P&gt;&lt;B&gt;IIS 7 Web Server Platform- Windows Server “Longhorn”&lt;/B&gt; 
&lt;P&gt;&lt;B&gt;&lt;/B&gt;
&lt;P&gt;&lt;B&gt;&lt;A href="http://brettblog.com/ct.ashx?id=fd552421-fd51-416f-b8dc-88eaa6038372&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2femea%2fitsshowtime%2fsessionh.aspx%3fvideoid%3d565" mce_href="http://brettblog.com/ct.ashx?id=fd552421-fd51-416f-b8dc-88eaa6038372&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2femea%2fitsshowtime%2fsessionh.aspx%3fvideoid%3d565"&gt;Microsoft’s Next Generation Web Server:&lt;I&gt; &lt;/I&gt;What’s New in IIS 7 for IT Pros&lt;/A&gt;&lt;/B&gt; 
&lt;P&gt;&lt;B&gt;Isaac Roybal&lt;/B&gt;, Product Manager, Windows Server, Microsoft Corporation 
&lt;P&gt;This overview session will highlight the key points of interests for IT Pros in Internet Information Services version 7.&amp;nbsp; IIS7 modularity increases security by allowing a reduced installation footprint and creation of specialized, streamlined servers. Application Pools are now “sandboxed” by default.&amp;nbsp; You’ll see how IIS7 eases administration with a new IIS Manage UI, delegated administration, and new tools for automating administrative tasks. Applications run more reliably as they are easier to troubleshoot with built in tracing and diagnostics. Finally, multiple servers can use a single configuration file with the shared configuration feature for web farms. 
&lt;P&gt;&lt;B&gt;&lt;A href="http://brettblog.com/ct.ashx?id=fd552421-fd51-416f-b8dc-88eaa6038372&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2femea%2fitsshowtime%2fsessionh.aspx%3fvideoid%3d566" mce_href="http://brettblog.com/ct.ashx?id=fd552421-fd51-416f-b8dc-88eaa6038372&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2femea%2fitsshowtime%2fsessionh.aspx%3fvideoid%3d566"&gt;IIS7 Administration: The New IIS Manager&lt;/A&gt;&lt;/B&gt; 
&lt;P&gt;&lt;B&gt;Brett Hill&lt;/B&gt;, IIS Sr. Technical Evangelist, Microsoft Corporation 
&lt;P&gt;IIS7 Administration centers around the new task-oriented IIS Manager. This redesigned administration tool has many major new capabilities including the ability to delegate features, edit .NET configuration and has significantly improved performance when managing many sites. The IIS Manager itself is an extensible, modular application that administrators can customize and developers can extend.&amp;nbsp; In this presentation we’ll explore how use and control the IIS Manager with a special focus on Delegated Administration. In addition, we’ll explore how to use Granular Locking to fine tune your delegated settings beyond those available in the UI. 
&lt;P&gt;&lt;B&gt;&lt;/B&gt;
&lt;P&gt;&lt;B&gt;&lt;A href="http://brettblog.com/ct.ashx?id=fd552421-fd51-416f-b8dc-88eaa6038372&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2femea%2fitsshowtime%2fsessionh.aspx%3fvideoid%3d567" mce_href="http://brettblog.com/ct.ashx?id=fd552421-fd51-416f-b8dc-88eaa6038372&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2femea%2fitsshowtime%2fsessionh.aspx%3fvideoid%3d567"&gt;IIS7 Administration: Shared Configuration, Remote Control, and Automated Tools&lt;/A&gt; &lt;/B&gt;
&lt;P&gt;&lt;B&gt;Isaac Roybal&lt;/B&gt;, Product Manager, Windows Server, Microsoft Corporation 
&lt;P&gt;For web farms, IIS7 has a powerful new feature – Shared Configuration. This allows you to configure multiple servers to share a single configuration file. The benefits are clear - all web servers have identical configuration so there’s no need to do configuration replication. 
&lt;P&gt;In addition, IIS Manager has built in remote administration capabilities. Using https between the IIS Manager and the remote server, this feature includes the ability to define trusted users in IIS Manager and have identities securely stored in the IIS configuration, Windows SAM or AD, or a .NET provider. 
&lt;P&gt;Of course, many organizations need to automate administration tasks.&amp;nbsp; APPCMD is the new powerful, general purpose command line utility for controlling configuration, state for site and pools, and querying status. WMI has been improved specifically for IIS management, and there’s a new managed code API Microsoft.Web.Adminsitrationis that makes it easy for developers use .NET to write IIS management tools. PowerShell can use the managed API or WMI, giving you a superior command line and scripting environment for managing your servers. 
&lt;P&gt;&lt;B&gt;&lt;/B&gt;
&lt;P&gt;&lt;B&gt;&lt;A href="http://brettblog.com/ct.ashx?id=fd552421-fd51-416f-b8dc-88eaa6038372&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2femea%2fitsshowtime%2fsessionh.aspx%3fvideoid%3d568" mce_href="http://brettblog.com/ct.ashx?id=fd552421-fd51-416f-b8dc-88eaa6038372&amp;amp;url=http%3a%2f%2fwww.microsoft.com%2femea%2fitsshowtime%2fsessionh.aspx%3fvideoid%3d568"&gt;IIS 7 Security: Less Exposure, Greater Control&lt;/A&gt;&lt;/B&gt; 
&lt;P&gt;&lt;B&gt;Brett Hill&lt;/B&gt;, IIS Sr. Technical Evangelist, Microsoft Corporation 
&lt;P&gt;IIS7 security improvements can be found in many areas. In addition to the ability to control the server footprint, security is improved with the new URLFiltering and URLAuthorization capabilities. Also, you can now use Forms authentication with any content while leveraging .NET role and membership providers. In addition, there are key changes in the user principles and groups used by IIS7 that will make the server both easier to manage and more secure.&amp;nbsp; Finally, application pool sandboxing helps to improve the security boundary between application pools. 
&lt;P&gt;&lt;B&gt;&lt;/B&gt;
&lt;P&gt;&lt;B&gt;&lt;A href="http://www.microsoft.com/emea/spotlight/Isaac_Roybal_IIS_7_Troubleshooting_Failed_Request_Tracing.aspx" mce_href="http://www.microsoft.com/emea/spotlight/Isaac_Roybal_IIS_7_Troubleshooting_Failed_Request_Tracing.aspx"&gt;IIS 7 Troubleshooting: Failed Request Tracing&lt;/A&gt;&lt;/B&gt; 
&lt;P&gt;&lt;B&gt;Isaac Roybal&lt;/B&gt;, Product Manager, Windows Server, Microsoft Corporation 
&lt;P&gt;One of the most exciting features in IIS 7 for administrators is the new built-in failed request tracing capabilities. You can configure IIS 7 to automatically create a detailed trace log of events that occurred in the request processing pipeline when specific error codes are seen and/or if a request takes more than N seconds to complete. This is configurable at the server, site, application, or file level, and can be configured in the UI or with a command line tool. The resulting trace log is ideal for identifying bottlenecks. Like everything in IIS 7, it is extensible and can be customized with new events.&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=1901270" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/bills/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/bills/archive/tags/Extensibility/default.aspx">Extensibility</category><category domain="http://blogs.iis.net/bills/archive/tags/Samples+_2600_amp_3B00_+Demos/default.aspx">Samples &amp;amp; Demos</category><category domain="http://blogs.iis.net/bills/archive/tags/Troubleshooting/default.aspx">Troubleshooting</category><category domain="http://blogs.iis.net/bills/archive/tags/IIS+News+Item/default.aspx">IIS News Item</category><category domain="http://blogs.iis.net/bills/archive/tags/Developers/default.aspx">Developers</category><category domain="http://blogs.iis.net/bills/archive/tags/Performance/default.aspx">Performance</category></item><item><title>MIX '07: IIS7 for Developers Demos and Powerpoint</title><link>http://blogs.iis.net/bills/archive/2007/05/02/iis7-for-developers-mix-powerpoint-and-demo-notes.aspx</link><pubDate>Wed, 02 May 2007 07:00:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:1690472</guid><dc:creator>bills</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/bills/rsscomments.aspx?PostID=1690472</wfw:commentRss><comments>http://blogs.iis.net/bills/archive/2007/05/02/iis7-for-developers-mix-powerpoint-and-demo-notes.aspx#comments</comments><description>&lt;P&gt;I got a lot of requests for the presentation and demo notes from my session at MIX, so here goes.&amp;nbsp; If you're interested in the slides,&amp;nbsp;You can download the &lt;A class="" href="http://wallpaper.iis7.org/mix-iis7.zip"&gt;PPT here.&lt;/A&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;If you want to try the SQL Logging Module, I've also attached my wwwroot directory in the state it was in at the end of the demo (working), which includes the sqlLogging_schema.xml file you'll need to copy to the \windows\system32\inetsrv\config\schema directory.&amp;nbsp; You'll also need to create your log table using the createDB.sql file.&amp;nbsp; For a complete step-by-step walkthrough, &lt;A href="http://blogs.iis.net/bills/archive/2007/05/01/building-an-iis7-sql-logging-module-with-net.aspx"&gt;see this post&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;All the credit for the SQL logging module demo goes to &lt;A href="http://blogs.msdn.com/carlosag/default.aspx"&gt;CarlosAg&lt;/A&gt;.&amp;nbsp; Without his work, you would have had to see my photo &lt;A href="http://blogs.iis.net/bills/archive/2007/01/28/dirlistmodule-available-for-download.aspx"&gt;DirListModule&lt;/A&gt; again.&amp;nbsp; :)&lt;/P&gt;
&lt;P&gt;If you're interested in the PHP demos, you should&amp;nbsp;check out &lt;A href="http://blogs.iis.net/bills/archive/2007/04/28/server-side-mash-ups-php-asp-net.aspx"&gt;this previous post&lt;/A&gt;, which includes videos (at the bottom) of the PHP related demos.&amp;nbsp; I'll write-up a separate post on step-by-step instructions soon.&lt;/P&gt;
&lt;P&gt;thanks, I hope you enjoyed the talk!&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=1690472" width="1" height="1"&gt;</description><enclosure url="http://blogs.iis.net/bills/attachment/1690472.ashx" length="187911" type="application/x-zip-compressed" /><category domain="http://blogs.iis.net/bills/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/bills/archive/tags/PHP/default.aspx">PHP</category><category domain="http://blogs.iis.net/bills/archive/tags/Extensibility/default.aspx">Extensibility</category><category domain="http://blogs.iis.net/bills/archive/tags/Samples+_2600_amp_3B00_+Demos/default.aspx">Samples &amp;amp; Demos</category><category domain="http://blogs.iis.net/bills/archive/tags/IIS+News+Item/default.aspx">IIS News Item</category><category domain="http://blogs.iis.net/bills/archive/tags/Developers/default.aspx">Developers</category><category domain="http://blogs.iis.net/bills/archive/tags/mix07/default.aspx">mix07</category></item><item><title>Building an IIS7 SQL Logging Module with .NET</title><link>http://blogs.iis.net/bills/archive/2007/05/01/building-an-iis7-sql-logging-module-with-net.aspx</link><pubDate>Tue, 01 May 2007 20:59:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:1690491</guid><dc:creator>bills</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/bills/rsscomments.aspx?PostID=1690491</wfw:commentRss><comments>http://blogs.iis.net/bills/archive/2007/05/01/building-an-iis7-sql-logging-module-with-net.aspx#comments</comments><description>&lt;p&gt;All the credit for the SQL logging module demo goes to &lt;a href="http://blogs.msdn.com/carlosag/default.aspx"&gt;CarlosAg&lt;/a&gt;.&amp;nbsp; He built it for an internal Microsoft conference, and I stole it for my MIX talk.&amp;nbsp; It is a great demo because it shows off something you can only do with IIS7 and the &lt;a href="http://www.iis.net/articles/view.aspx/Managing-IIS7/Configuring-the-IIS7-Runtime/Configuring-Modules/ASP-NET-Integration-with-IIS7?tabid=1"&gt;integrated pipeline&lt;/a&gt;.&amp;nbsp; I love it!&lt;/p&gt; &lt;p&gt;You'll want to prepare for this demo by doing the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Download and install &lt;a href="http://msdn.microsoft.com/vstudio/express/downloads/"&gt;Visual Studio Web Developer Express&lt;/a&gt;  &lt;li&gt;Download and install &lt;a href="http://www.microsoft.com/sql/editions/express/default.mspx"&gt;SQL Server Express&lt;/a&gt; (as part of the previous install)  &lt;li&gt;Download and install the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&amp;amp;displaylang=en"&gt;SQL Server Management Studio Express&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Make sure you're running on Vista with IIS7 installed (including ASP.NET or at least .NET extensibility).&amp;nbsp; &lt;/p&gt; &lt;p&gt;To start with, let's build a simple module with hard coded connection string.&amp;nbsp; First, let's create the database.&amp;nbsp; Open SQL Server Management Studio, and run the following script as 'sa'.&amp;nbsp; (you'll want to enable the sa account first to make this work, and you may need to edit the physical path below to one that exists on your machine)&amp;nbsp;&lt;/p&gt; &lt;hr&gt;  &lt;p&gt;USE [master]&lt;br&gt;GO&lt;br&gt;/****** Object:&amp;nbsp; Database [techready]&amp;nbsp;&amp;nbsp;&amp;nbsp; Script Date: 02/03/2007 12:16:42 ******/&lt;br&gt;CREATE DATABASE [MIX] ON&amp;nbsp; PRIMARY &lt;br&gt;( NAME = N'mix', FileName='x:\mix.mdf' )&lt;br&gt;GO&lt;br&gt;USE [MIX]&lt;br&gt;GO&lt;br&gt;/****** Object:&amp;nbsp; Table [dbo].[Log]&amp;nbsp;&amp;nbsp;&amp;nbsp; Script Date: 02/03/2007 12:18:13 ******/&lt;br&gt;SET ANSI_NULLS ON&lt;br&gt;GO&lt;br&gt;SET QUOTED_IDENTIFIER ON&lt;br&gt;GO&lt;br&gt;SET ANSI_PADDING ON&lt;br&gt;GO&lt;br&gt;CREATE TABLE [dbo].[Log](&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Date] [datetime],&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Method] [varchar](50) NULL,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [IPAddress] [varchar](50) NULL,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Url] [varchar](50) NULL,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [UserName] [varchar](255) NULL,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [UserAgent] [varchar](255) NULL,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ResponseCode] [varchar](50) NULL,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [SiteName] [varchar](50) NULL,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ApplicationName] [varchar](50) NULL&lt;br&gt;) ON [PRIMARY]  &lt;p&gt;GO&lt;br&gt;SET ANSI_PADDING OFF  &lt;hr&gt;  &lt;p&gt;Once the database has been created, we can create a module to connect to it.&amp;nbsp; Create an App_Code directory in your Web site / application, and drop in your first sqlLoggingModule.cs code (you'll want to replace billsiis7demo with the name of your machine):&lt;/p&gt; &lt;hr&gt;  &lt;p&gt;using System;&lt;br&gt;using System.Data;&lt;br&gt;using System.Web;&lt;br&gt;using System.Web.Security;&lt;br&gt;using System.Data.SqlClient;&lt;br&gt;using System.Web.Hosting;  &lt;p&gt;public class SqlLoggingModule : IHttpModule&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public SqlLoggingModule()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Dispose()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Init(HttpApplication context)&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; context.LogRequest += new EventHandler(context_LogRequest);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void context_LogRequest(object sender, EventArgs e)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HttpApplication application = (HttpApplication)sender;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LogRequest(application.Context);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void LogRequest(HttpContext httpContext)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string connectionString = "server=billsiis7demo\\sqlexpress;database=MIX;uid=sa;pwd=sa";  &lt;blockquote&gt; &lt;p&gt;//on Beta 3 and beyond&lt;br&gt;//httpContext.Response.DisableKernelCache(); &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (SqlConnection connection = new SqlConnection(connectionString)) {  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SqlCommand cmd = connection.CreateCommand();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.CommandText =&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; "insert into Log (Date, Method, IPAddress, Url, UserName, UserAgent, ResponseCode, SiteName, ApplicationName) values" +&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "(@Date, @Method, @IPAddress, @Url, @UserName, @UserAgent, @ResponseCode, @SiteName, @ApplicationName)";  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@Date", DateTime.Now);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@Method", httpContext.Request.HttpMethod);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@IPAddress", httpContext.Request.UserHostAddress);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@Url", httpContext.Request.Url.ToString());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@UserName", httpContext.Request.ServerVariables["LOGON_USER"]);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@UserAgent", httpContext.Request.UserAgent);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@ResponseCode", httpContext.Response.StatusCode + "." + httpContext.Response.SubStatusCode);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@SiteName", HostingEnvironment.SiteName);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.Parameters.AddWithValue("@ApplicationName", httpContext.Request.ApplicationPath);  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; connection.Open();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cmd.ExecuteNonQuery();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }  &lt;p&gt;}  &lt;hr&gt;  &lt;p&gt;Note: since this logging module runs in user mode, kernel cached responses will not be logged.&amp;nbsp; In Longhorn Server Beta 3 a new method DisableKernelCache() was added to allow modules to disable the kernel cache for these kind of scenarios.&amp;nbsp; I've added the code above, but commented it out.&amp;nbsp; Disabling the kernel cache may have a negative impact on performance.&amp;nbsp; You would test this scenario before ever putting it onto a real server, right? :)&lt;/p&gt; &lt;p&gt;Pretty simple, eh?&amp;nbsp; Before you can use it, you'll need to register it as a module with IIS. Go to the modules feature for this site / application, and click 'add managed module', or add the following configuration to your web.config file inside : &lt;/p&gt; &lt;hr&gt;  &lt;p&gt;&amp;lt;modules&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;add name="sqlLoggingModule" type="SqlLoggingModule" /&amp;gt;&lt;br&gt;&amp;lt;/modules&amp;gt;  &lt;hr&gt;  &lt;p&gt;Request a page from your site, and look in the table to see the request logged.&amp;nbsp; It should "just work" if all is well with the world.&lt;/p&gt; &lt;p&gt;Now let's add configuration extensibility.&amp;nbsp; To do this, you'll want to create a new sqlLogging_schema.xml file that looks like this and drop it in the \windows\system32\inetsrv\config\schema directory:&lt;/p&gt; &lt;hr&gt;  &lt;p&gt;&amp;lt;configSchema&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;sectionSchema name="system.webServer/sqlLogging"&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;attribute name="connectionString" type="string" /&amp;gt;&lt;br&gt;&amp;nbsp; &amp;lt;/sectionSchema&amp;gt;&lt;br&gt;&amp;lt;/configSchema&amp;gt;  &lt;hr&gt;  &lt;p&gt;Once you've done that, you'll need to register it in \windows\system32\inetsrv\config\applicationHost.config file. Add the section here under sectionGroup name=system.webServer like so: &lt;/p&gt; &lt;hr&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;sectionGroup name="system.webServer"&amp;gt;&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; &amp;lt;section name="sqlLogging" overrideModeDefault="Allow" /&amp;gt;  &lt;hr&gt;  &lt;p&gt;Now you'll want to make a few changes to your module. First, you need to remove that horrible hard coded connection string, and add it to your web.config. Simple edit web.config and add it like this inside , replacing billsiis7demo with your machine name: &lt;/p&gt; &lt;hr&gt; &amp;lt;sqlLogging connectionString="server=billsiis7demo\sqlexpress;database=MIX;uid=sa;pwd=sa" /&amp;gt;  &lt;hr&gt;  &lt;p&gt;Now it's time to fix your module. First, let's replace the hard coded connection string with a GetConnectionString(httpContext) method. It looks like this: &lt;/p&gt; &lt;hr&gt;  &lt;p&gt;private string GetConnectionString(HttpContext httpContext)&lt;br&gt;{&lt;br&gt;&amp;nbsp; ConfigurationSection section = WebConfigurationManager.GetSection("system.webServer/sqlLogging");&lt;br&gt;&amp;nbsp; return (string)section["connectionString"];&lt;br&gt;}  &lt;hr&gt;  &lt;p&gt;Don't forget to add using Microsoft.Web.Administration; in your .cs file (you may need to add reference to \windows\system32\inetsrv\Microsoft.Web.Administration.dll first). Now you can not only use Microsoft.Web.Administration to read/write to your new configuration section - just like GetConnectionString(httpContext) does above, but you can use appcmd.exe (our command-line tool) and VB/JScript using COM. Here are some examples: &lt;/p&gt; &lt;hr&gt;  &lt;p&gt;Using AppCmd:&lt;br&gt;==to get configuration:&lt;br&gt;C:\windows\system32\inetsrv\appcmd.exe list config "Default Web Site" /section:sqlLogging  &lt;p&gt;==to set configuration:&lt;br&gt;C:\windows\system32\inetsrv\appcmd.exe set config "Default Web Site" /section:sqlLoggingconnectionString:"server=billsiis7demo\sqlexpress;database=MIX;uid=sa;pwd=sa"  &lt;p&gt;==vbScript to get configuration:&lt;br&gt;Dim adminManager, section&lt;br&gt;Set adminManager = WScript.Createobject("Microsoft.ApplicationHost.AdminManager")&lt;br&gt;Set section = adminManager.GetAdminSection("system.webServer/sqlLogging", "MACHINE/WEBROOT/APPHOST/Default Web Site")&lt;br&gt;WScript.Echo(section.Properties.Item("connectionString").Value)&lt;pre&gt;&lt;br&gt;&lt;/pre&gt;
&lt;hr&gt;

&lt;p&gt;And there you have it! A sql logging module that was built using .NET with 66 lines of code and an IIS7 configuration section that is scriptable, programmatically accessible, and usable from the cmd-line. Hope this help!&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=1690491" width="1" height="1"&gt;</description><enclosure url="http://blogs.iis.net/bills/attachment/1690491.ashx" length="187911" type="application/x-zip-compressed" /><category domain="http://blogs.iis.net/bills/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/bills/archive/tags/Extensibility/default.aspx">Extensibility</category><category domain="http://blogs.iis.net/bills/archive/tags/Samples+_2600_amp_3B00_+Demos/default.aspx">Samples &amp;amp; Demos</category><category domain="http://blogs.iis.net/bills/archive/tags/Developers/default.aspx">Developers</category><category domain="http://blogs.iis.net/bills/archive/tags/mix07/default.aspx">mix07</category></item><item><title>IIS7 at Microsoft Technology Summit</title><link>http://blogs.iis.net/bills/archive/2007/03/28/iis7-at-microsoft-technology-summit.aspx</link><pubDate>Wed, 28 Mar 2007 14:50:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:1641192</guid><dc:creator>bills</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/bills/rsscomments.aspx?PostID=1641192</wfw:commentRss><comments>http://blogs.iis.net/bills/archive/2007/03/28/iis7-at-microsoft-technology-summit.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.iis.net/carlosag/"&gt;Carlos&lt;/a&gt; and I spoke at the Microsoft Technology Summit yesterday, a conference dedicated to influential influencers who are experts in alternative platforms.&amp;nbsp; It was a really fun talk as we were able to show off how IIS7 provides a very extensive public extensibility model for adding, removing and replacing any IIS7 feature, on top of which the IIS team built the IIS product itself.&amp;nbsp; &lt;/p&gt;&lt;p&gt;I showed off the new IIS7 modular architecture, and the more than &lt;a href="http://www.iis.net/default.aspx?tabid=7&amp;amp;subtabid=74"&gt;40 components&lt;/a&gt; that can be added or removed independently. &amp;nbsp; Carlos showed off how to build a SQL logging module in 40 lines of code using &lt;a href="http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=942"&gt;.NET extensibility&lt;/a&gt;, which was really impressive.&amp;nbsp; I showed off the traditional &lt;a href="http://blogs.iis.net/bills/archive/2007/01/28/dirlistmodule-available-for-download.aspx"&gt;DirListModule&lt;/a&gt; demo, and how easy it is to xcopy deploy a new managed module as part of your site that can replace the built-in IIS directory listing module. &amp;nbsp;&amp;nbsp;  &lt;/p&gt;&lt;p&gt;While we were on the topic of modularity, I announced the new &lt;a href="http://www.iis.net/default.aspx?tabid=1000051"&gt;FastCGI module&lt;/a&gt; for IIS, which we were excited to announce will now be included in Longhorn Server and Vista SP1.&amp;nbsp; I &lt;a href="http://blogs.iis.net/bills/archive/2006/10/31/PHP-on-IIS.aspx"&gt;demonstrated how using it can double performance&lt;/a&gt; of the QDig application and as part of that demo I also showed off the dynamic output cache can provide blazing fast kernel mode caching of PHP content.&amp;nbsp; I also demo'd the use of &lt;a href="http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=1081&amp;amp;p=1"&gt;ASP.NET forms authentication&lt;/a&gt; for the PHP app, which unfortunately due to my configuration error, didn't work the first time (though I fixed it while Carlos went on with the next demo and showed them later that it did in fact work once I stopped fat-fingering config. :)).&amp;nbsp; &lt;/p&gt;&lt;p&gt;Carlos then went on to show how easy it is to &lt;a href="http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=953"&gt;extend IIS7 configuration&lt;/a&gt;, including simple XML-based section extensibility and encryption support.&amp;nbsp; He was then able to use the built-in command line, scripting, and .NET APIs to read and write to his custom configuration section (in this case, a connection string for his SQL Logging module) which was really powerful.&lt;/p&gt;&lt;p&gt;Last, Carlos showed off the admin tool, and how powerful the UI extensibility story is for IIS.&amp;nbsp; This is an area I'm always completely blown away by, everytime I see Carlos demo it.&amp;nbsp; He showed off 4-5 modules he has built that demonstrate nativagation tree extensibility, action pane extensibility, feature extensibility with some really compelling features including the &lt;a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1416"&gt;IIS Reports&lt;/a&gt; module, and the &lt;a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1400"&gt;Most Recently Used&lt;/a&gt; module (which comes with source). &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The response so far has been very positive.&amp;nbsp; &lt;a href="http://koreacrunch.com/archive/mts07-php-on-iis7"&gt;Channy Yun&lt;/a&gt; wrote up his thoughts on the PHP on IIS7 demo, including a youtube video of it in action. &amp;nbsp; &lt;a href="http://www.travisswicegood.com/index.php/2007/03/27/mts07_iis7"&gt;Travis Swicegood&lt;/a&gt; also appreciated the improved PHP support.&amp;nbsp; &lt;a href="http://galbraiths.org/blog/2007/03/27/mts07-bill-staples-and-carlos-aguilar-on-iis7/"&gt;Ben Galbraith&lt;/a&gt; wrote up an extensive write-up of the entire presentation and summarized with my favorite quote so far:&lt;/p&gt;&lt;p&gt;&lt;i&gt;I walked away fairly impressed with this one. Who doesn’t love Apache, but IIS7 seems to trump it pretty handily in both configurability, manageability, and extensibility&lt;/i&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;I couldn't have said it better myself. :)&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=1641192" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/bills/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/bills/archive/tags/PHP/default.aspx">PHP</category><category domain="http://blogs.iis.net/bills/archive/tags/Extensibility/default.aspx">Extensibility</category><category domain="http://blogs.iis.net/bills/archive/tags/Samples+_2600_amp_3B00_+Demos/default.aspx">Samples &amp;amp; Demos</category><category domain="http://blogs.iis.net/bills/archive/tags/IIS+News+Item/default.aspx">IIS News Item</category><category domain="http://blogs.iis.net/bills/archive/tags/Developers/default.aspx">Developers</category></item><item><title>IIS7 Logging UI for Vista - Download Now</title><link>http://blogs.iis.net/bills/archive/2007/01/29/iis7-logging-ui-for-vista.aspx</link><pubDate>Tue, 30 Jan 2007 07:33:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:1554850</guid><dc:creator>bills</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/bills/rsscomments.aspx?PostID=1554850</wfw:commentRss><comments>http://blogs.iis.net/bills/archive/2007/01/29/iis7-logging-ui-for-vista.aspx#comments</comments><description>&lt;p&gt;It's &lt;a href="http://forums.iis.net/thread/1549555.aspx" target="_blank"&gt;no secret&lt;/a&gt; that there is no way to configure logging settings in IIS7/Vista.&amp;nbsp; A PM convinced me that configuring "logging" settings on a "Developer" machine simply isn't interesting - and "if they want to do it, they can always use config".&amp;nbsp; &lt;/p&gt;&lt;p&gt;But, I have two pieces of good news for those seeking the logging UI. &amp;nbsp;&lt;/p&gt;&lt;p&gt;First:&amp;nbsp; it will reappear in SP1.&amp;nbsp; It was already in "Longhorn Server", but for various reasons I won't elaborate on was removed from Vista.&amp;nbsp; Now that we've heard your feedback, it will magically reappear when you install Vista SP1, as soon as it is available.&amp;nbsp; As I said, it has always been in Longhorn Server, so look for it there too with the upcoming Beta 3 release.&amp;nbsp; (I'm VERY excited about this, and when it is released, I think you will be too, when you hear what we've been up to. :))&lt;/p&gt;&lt;p&gt;Second: for those who don't want to wait, Tobin just posted a module to the DownloadCENTER which provides basic UI for log settings.&amp;nbsp; Thanks to the completely extensible admin tool we've built with IIS7, he used the same APIs the Dev team did to build the original feature, and plugged in his own version.&amp;nbsp; It is pretty darn sweet.&amp;nbsp; Check it out here:&amp;nbsp; &lt;a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1328" target="_blank"&gt;http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1328&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Thanks Tobin!&lt;/p&gt;&lt;p&gt;bill&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=1554850" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/bills/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/bills/archive/tags/Extensibility/default.aspx">Extensibility</category><category domain="http://blogs.iis.net/bills/archive/tags/Administration/default.aspx">Administration</category><category domain="http://blogs.iis.net/bills/archive/tags/Samples+_2600_amp_3B00_+Demos/default.aspx">Samples &amp;amp; Demos</category><category domain="http://blogs.iis.net/bills/archive/tags/IIS+News+Item/default.aspx">IIS News Item</category></item><item><title>Image Gallery - DirListModule Available for Download</title><link>http://blogs.iis.net/bills/archive/2007/01/28/dirlistmodule-available-for-download.aspx</link><pubDate>Mon, 29 Jan 2007 06:19:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:1552779</guid><dc:creator>bills</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/bills/rsscomments.aspx?PostID=1552779</wfw:commentRss><comments>http://blogs.iis.net/bills/archive/2007/01/28/dirlistmodule-available-for-download.aspx#comments</comments><description>&lt;P&gt;By popular demand, in conjunction with the &lt;A href="http://www.iis.net/downloads/default.aspx?tabid=3"&gt;DownloadCENTER&lt;/A&gt; release, I decided to release the famous DirListModule I originally created for IIS7 demos, several years ago.&amp;nbsp; In fact, I think it was the first real managed module that anyone on the team had built, and it has been used in hundreds of demos ever since, including&amp;nbsp;BobMu's keynote at PDC in 2005.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;What does it do?&amp;nbsp; It is pretty simple - it is a module/handler combo that can&amp;nbsp;turn any directory full of images on your site&amp;nbsp;into an image gallery, without any code.&amp;nbsp; You can easily customize the look and feel by tweaking the themes/ HTML and stylesheets.&amp;nbsp; It does all the dynamic thumbnails, image resizing, previewing, and caching for you.&amp;nbsp; It even has a few configuration tweaks you can play with.&lt;/P&gt;
&lt;P&gt;Get it here:&amp;nbsp; &lt;A title=http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1325 href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1325"&gt;http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1325&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;And leave me lots of good reviews and ratings. ;)&lt;/P&gt;
&lt;P&gt;PS, if you're looking for sample source, and how to do this, I recommend you check out &lt;A href="http://mvolo.com/blogs/serverside/archive/2007/01/21/Get-nice-looking-directory-listings-for-your-IIS-website-with-DirectoryListingModule.aspx"&gt;Mike's blog&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=1552779" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/bills/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/bills/archive/tags/Extensibility/default.aspx">Extensibility</category><category domain="http://blogs.iis.net/bills/archive/tags/Samples+_2600_amp_3B00_+Demos/default.aspx">Samples &amp;amp; Demos</category></item><item><title>PHP on IIS7 w/FastCGI</title><link>http://blogs.iis.net/bills/archive/2006/10/31/PHP-on-IIS.aspx</link><pubDate>Tue, 31 Oct 2006 15:31:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:1445375</guid><dc:creator>bills</dc:creator><slash:comments>54</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.iis.net/bills/rsscomments.aspx?PostID=1445375</wfw:commentRss><comments>http://blogs.iis.net/bills/archive/2006/10/31/PHP-on-IIS.aspx#comments</comments><description>&lt;P&gt;I'm attending &lt;A href="http://www.zendcon.com/" target=_blank&gt;ZendCon&lt;/A&gt;&amp;nbsp;today and giving a demo in the keynote presentation by &lt;A href="http://andigutmans.blogspot.com/"&gt;Andi Gutmans,&lt;/A&gt; one of the creators of PHP, and co-founder of Zend.&amp;nbsp; I'm psyched to show off IIS7 and PHP along-side Andi!&lt;/P&gt;
&lt;P&gt;I only have 5 mins to demo, so I decided to focus the demo on two things:&amp;nbsp; 1) how easy it is to get PHP up and running and 2) the early results of our collaboration on performance for PHP on Windows.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Demo Preparation&lt;/H3&gt;
&lt;P&gt;Throughout the demo I'll be using &lt;A href="http://qdig.sourceforge.net/" target=_blank&gt;Qdig&lt;/A&gt;, a simple, but powerful image gallery application.&amp;nbsp; Setup of Qdig is really easy. To use the thumbnails and image resize features of Qdig, make sure you've enabled the GD library in your php.ini file.&amp;nbsp; Download the &lt;A href="http://qdig.sourceforge.net/files/qdig.zip" target=_blank&gt;zip file&lt;/A&gt;, unzip it to C:\inetpub\qdig, grab some of your favorite images and place them in a subdirectory, then - as described in the install.txt file - allow IUSR and NetworkService full control of the qdig-files directory, browse to the site once, then re-set permissions back&amp;nbsp;to read/execute.&lt;/P&gt;
&lt;P&gt;Part of this demo is measuring the performance gains we've made.&amp;nbsp; To simulate load on the application, I'll be using an application called 'WCat', short for Web Capacity Analysis tool.&amp;nbsp; It is a VERY powerful tool, and we'll only be scratching the surface of what it can do.&amp;nbsp; The version of WCat that I'm using is in the &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=56fc92ee-a71a-4c73-b628-ade629c89499&amp;amp;DisplayLang=en" target=_blank&gt;IIS6 resource kit&lt;/A&gt;.&amp;nbsp; There are some cool tools in there, and while they haven't been tested on IIS7, most of them do work.&amp;nbsp; Once you've downloaded the resource kit, and installed it, proceed to the next step.&lt;/P&gt;
&lt;P&gt;I've setup a simple wcat script to test my QDig performance.&amp;nbsp; You can download the zip file with .bat and configuration scripts &lt;A href="http://wallpaper.iis7.org/downloads/performance_demo.zip" target=_blank&gt;here&lt;/A&gt;.&amp;nbsp; Unzip to C:\demo\performance and check out the contents.&amp;nbsp; &lt;A href="http://iisgeek.no-ip.org/" target=_blank&gt;ThomaD&lt;/A&gt; gave me these a while back, and I've been tweaking them ever since.&amp;nbsp; startStress.bat will launch both the controller, and the client, which will pound the URLs found in php_script.cfg for about 10 seconds.&amp;nbsp; You'll see a quick summary of the results after the test has run.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I wanted to do something useful with &lt;A href="http://www.microsoft.com/windowsvista/features/foreveryone/sidebar.mspx" target=_blank&gt;Windows Sidebar&lt;/A&gt;&amp;nbsp;during the demo,&amp;nbsp;so I&amp;nbsp;created my very first gadget last weekend, which you can download from the &lt;A href="http://gallery.microsoft.com/liveItemDetail.aspx?li=b88c867c-5524-4f78-bb39-0ba33370adbf&amp;amp;l=1" target=_blank&gt;Gadget Gallery site&lt;/A&gt;.&amp;nbsp; It launches perfmon, or any other configured path (I configure mine to launch my c:\demo\performance\perfmon.msc file, which has the get requests/sec perf counter).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Installing PHP on IIS7&lt;/H3&gt;
&lt;P&gt;The first part of the demo follows the steps of my previous blog post, and is really straight forward.&amp;nbsp; The steps are described in this post titled: How to install PHP on IIS7 (RC1).&amp;nbsp; Once I've got PHP installed, I run my performance test using that fancy gadget and get the following results:&lt;/P&gt;
&lt;P&gt;&lt;IMG height=357 src="http://wallpaper.iis7.org/phpperformance/phpIsapiPerf.jpg.img?action=preview" width=600&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;PHP.net download performance using ISAPI (fast, but unreliable)&lt;/I&gt; - &lt;A href="http://wallpaper.iis7.org/phpperformance/phpIsapiPerf.jpg"&gt;(full size image)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;As you can see, I'm getting a little over 60 requests per second.&amp;nbsp; This is about as fast as PHP can go today, using the community distribution of PHP from &lt;A href="http://www.php.net/"&gt;http://www.php.net/&lt;/A&gt;.&amp;nbsp; ISAPI runs PHP inside the IIS worker process on multiple threads, making it similar to ASP or ASP.NET.&amp;nbsp; Unfortunately, since some PHP extensions aren't yet threadsafe, running it in this way usually leads to crashes.&lt;/P&gt;
&lt;H3&gt;Installing IIS7' FastCGI module &amp;amp; PHP&amp;nbsp; &lt;/H3&gt;
&lt;P&gt;As a result of the collaboration between Microsoft and Zend, there is now a faster and more reliable way to run PHP.&amp;nbsp; The first step is to download the new IIS FastCGI feature, available as a Technical Preview release on &lt;A href="http://www.iis.net/default.aspx?tabid=1000051" target=_blank&gt;this page&lt;/A&gt; of the IIS.net site.&amp;nbsp; Download and unzip it to c:\fastCGI.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The next step is to download PHP itself.&amp;nbsp; You can, of course, use the IIS FastCGI feature with the community distribution of PHP which we downloaded for the first demo.&amp;nbsp; If you want the latest PHP core engine performance enhancements from Zend, you can also download a Technical Preview &lt;A href="http://downloads.zend.com/support-files/zcw/ZendCoreForWindows-RC10-windows-x86-binaries.zip" target=_blank&gt;here&lt;/A&gt;.&amp;nbsp; This zip file contains a special build of PHP for this Technical Preview, and is for experimental use only.&amp;nbsp; Please don't ask Zend for support.&amp;nbsp; I unzipped my copy to C:\zendPHP.&lt;/P&gt;
&lt;P&gt;I should also mention that if you want to try &lt;A href="http://www.zend.com/products/zend_core" target=_blank&gt;Zend's Core product&lt;/A&gt;, which contains Zend's fastCGI implementation as well as some other cool features and tools, you can download from Zend.&amp;nbsp; Zend's products are eligible for full support, and&amp;nbsp;are truly&amp;nbsp;Enterprise-class software.&amp;nbsp;&amp;nbsp;We plan to work with Zend in the future to&amp;nbsp;enable Microsoft's FastCGI feature to integrate closer with Zend's products.&lt;/P&gt;
&lt;P&gt;Once you've unpacked both the fastCGI module, as well as the PHP distribution you're ready to use, run the fastCGI installer like this:&lt;/P&gt;
&lt;P&gt;&lt;IMG height=197 src="http://wallpaper.iis7.org/phpperformance/installFastCGI.jpg.img?action=preview" width=600&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;Install FastCGI and register PHP handler&lt;/I&gt; &lt;A href="http://wallpaper.iis7.org/phpperformance/installFastCGI.jpg"&gt;(full size image)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Now that you've got the FAST version of CGI installed, and the handler re-mapped, run our performance benchmark again and see the results (shown side-by-side the previous run for comparison):&lt;/P&gt;
&lt;P&gt;&lt;IMG height=357 src="http://wallpaper.iis7.org/phpperformance/fastCGIPerf.JPG.img?action=preview" width=600&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;FastCGI performance rocking!&lt;/I&gt; &lt;A href="http://wallpaper.iis7.org/phpperformance/fastCGIPerf.JPG"&gt;(full size image)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Wow!&amp;nbsp; Despite the fact that Microsoft and Zend just started working together, the results look very, very good.&amp;nbsp; The FastCGI + Zend PHP&amp;nbsp;numbers for Qdig, on my laptop, are almost twice what I get from&amp;nbsp;today's PHP.&amp;nbsp; And don't forget, Zend has committed to submit the performance enhancements back to the PHP community, so they will be showing up soon in the usual PHP.net distributions.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In addition to the&amp;nbsp;great performance, the FastCGI method of running PHP should be significantly more stable than the ISAPI method.&amp;nbsp; This is because with FastCGI,&amp;nbsp;PHP is&amp;nbsp;still running single-threaded in one or more processes in the FastCGI pool.&amp;nbsp; &amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;IIS Kernel Mode Caching&amp;nbsp;for PHP applications&amp;nbsp;&lt;/H3&gt;
&lt;P&gt;Of course, this is just the start for PHP developers.&amp;nbsp; Once they're on Windows and IIS7, there are a ton of cool features to begin taking advantage of like &lt;A href="http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=948&amp;amp;p=1" target=_blank&gt;distributed configuration&lt;/A&gt;, a &lt;A href="http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=992" target=_blank&gt;sexy new admin tool&lt;/A&gt; for IIS configuration, diagnostic tools like &lt;A href="http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=969&amp;amp;p=1" target=_blank&gt;failed request tracing&lt;/A&gt;, &lt;A href="http://www.iis.net/default.aspx?tabid=2&amp;amp;subtabid=25&amp;amp;i=1081&amp;amp;p=1"&gt;.NET integration&lt;/A&gt; (think ASP.net forms auth for a PHP app!) and more - all of which are unique to IIS7.&amp;nbsp; One of the cool things that I wanted to show off, while we're talking about performance, is the new output cache.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;The IIS7 output cache is a new feature in IIS7 which makes it possible to cache entire responses in memory - even from dynamic content.&amp;nbsp; Unlike the existing caches IIS has, it is a 'smart' cache, enabling you to configure it to cache separate copies of responses for the same page (like index.php) based on query string value, so it works great for the Qdig application we've been using.&amp;nbsp; One of the other really cool things about it is the fact that it is integrated with the http.sys (kernel mode driver) cache, allowing for blazing fast performance.&amp;nbsp; Output caching is going to be a very powerful feature for all kinds of applications, from PHP to ColdFusion, Classic ASP to CGI.&amp;nbsp; It will work with any content type, and can significantly speed up performance for applications where the underlying data doesn't change (like our image gallery), or where the changes occur at a predictable rate (so you can timeout the cache at the expected interval).&amp;nbsp;&amp;nbsp;Even in cases where the data is changing, say, once a second, it may make great sense to use the output cache with an expiration of 1 second.&amp;nbsp; This allows for the dynamic processing to occur only once a second, instead of&amp;nbsp;on&amp;nbsp;every request, significantly speeding up response times and lowering CPU.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;To configure output caching&amp;nbsp;for QDig's index.php&amp;nbsp;page, we first need to "unlock" the &amp;lt;caching&amp;gt; configuration section.&amp;nbsp; Open \windows\system32\inetsrv\config\applicationhost.config file and search for &amp;lt;caching&amp;gt;.&amp;nbsp; Cut it from it's current location, then search for (&amp;lt;location path="" - without parenthesis) and paste the caching configuration section in below it like this:&lt;/P&gt;
&lt;P&gt;&amp;lt;location path="" overrideMode="Allow"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; &amp;lt;system.webServer&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;caching enabled="true" enableKernelCache="true" /&amp;gt; &lt;/P&gt;
&lt;P&gt;The point here is to move it under the section of applicationhost.config that is marked as overrideMode="Allow", which enables it to be set at the application level. &lt;/P&gt;
&lt;P&gt;Now that you've unlocked it, create a web.config in your QDig directory, and paste in the following configuration: &lt;/P&gt;
&lt;P&gt;&amp;lt;configuration&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;location path="index.php"&amp;gt;&lt;BR&gt;&amp;nbsp;&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;caching&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;profiles&amp;gt;&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;lt;add extension=".php" location="Any" kernelCachePolicy="CacheUntilChange" varyByQueryString="Qwd,Qif,Qiv,Qis" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/profiles&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/caching&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/system.webServer&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/location&amp;gt;&lt;BR&gt;&amp;lt;/configuration&amp;gt; &lt;/P&gt;
&lt;P&gt;Now that you've got kernel caching configured, run the performance test again.&amp;nbsp; Before you do that, you may want to change the scale of your perfmon chart from (0..100) to (0.8,000). :)&amp;nbsp; Here is what I get with kernel caching enabled: &lt;/P&gt;
&lt;P&gt;&lt;IMG height=355 src="http://wallpaper.iis7.org/phpperformance/kernelCache.jpg.img?action=preview" width=600&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;Kernel Mode Caching PHP responses @ 6000 requests per second!&lt;/I&gt; &lt;A href="http://wallpaper.iis7.org/phpperformance/kernelCache.jpg"&gt;(full size image)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;To be honest, I'd expect it to be even faster. It would normally be in the 10s of thousands. The main reason it isn't is that I'm running the client and server on the same box, and any client generating 6000 RPS is going to use quite a bit of CPU, limiting the time slice kernel has to use. But going from 100+ RPS to 6000RPS isn't to shabby, eh?&lt;/P&gt;
&lt;P&gt;One of the cool things in Vista is a new command line tool that will show you what is in the http.sys cache.&amp;nbsp; Run "netsh http show cache" to get a snapshot:&lt;/P&gt;
&lt;P&gt;&lt;IMG height=404 src="http://wallpaper.iis7.org/phpperformance/showhttpCache.jpg.img?action=preview" width=600&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;NetSh cmd-line tool showing http.sys cache &lt;/I&gt;&amp;nbsp;&lt;A href="http://wallpaper.iis7.org/phpperformance/showhttpCache.jpg"&gt;(full size image)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Summary&lt;/H3&gt;
&lt;P&gt;IIS' new FastCGI feature is going to be a huge&amp;nbsp;benefit for web application frameworks like PHP which expect single-threaded environments.&amp;nbsp; It lets them run fast&amp;nbsp;and reliably on Windows, and&amp;nbsp;begin take advantage of all the cool features of IIS.&amp;nbsp; Using it, along with Zend's&amp;nbsp;PHP enhancements&amp;nbsp;in this demo almost doubled QDig performance on my machine, and made it much more stable.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;To make sure anyone can take advantage of FastCGI on all of our existing platforms, we've built an ISAPI&amp;nbsp;version of it that can run on Windows XP and Windows 2003 (IIS 5.1 and IIS 6.0) as well as a new module version for IIS 7.0.&amp;nbsp; Check out the &lt;A href="http://www.iis.net/default.aspx?tabid=1000051" target=_blank&gt;IIS FastCGI&lt;/A&gt; page for more information.&amp;nbsp;&lt;/P&gt;&lt;A href="http://www.technorati.com/claim/xrdmicdcf" rel=me&gt;Technorati Profile&lt;/A&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=1445375" width="1" height="1"&gt;</description><category domain="http://blogs.iis.net/bills/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/bills/archive/tags/PHP/default.aspx">PHP</category><category domain="http://blogs.iis.net/bills/archive/tags/Samples+_2600_amp_3B00_+Demos/default.aspx">Samples &amp;amp; Demos</category><category domain="http://blogs.iis.net/bills/archive/tags/IIS+News+Item/default.aspx">IIS News Item</category></item></channel></rss>