<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>CarlosAg Blog</title><link>http://blogs.msdn.com/b/carlosag/</link><description /><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/CarlosAg" /><feedburner:info uri="carlosag" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Winsxs is huge… Free up a few Gigabytes with dism</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/QKMmnlOyeoM/winsxs-is-huge-free-up-a-few-gigabytes-with-dism.aspx</link><pubDate>Wed, 04 Jul 2012 16:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10326926</guid><dc:creator>CarlosAg</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=10326926</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2012/07/04/winsxs-is-huge-free-up-a-few-gigabytes-with-dism.aspx#comments</comments><description>&lt;p&gt;I was running out of disk space in C: and was unable to install a small software that I needed, so I decided to clean up a bit. For that I like using WinDirStat &lt;a title="http://windirstat.info/" href="http://windirstat.info/"&gt;http://windirstat.info/&lt;/a&gt; which very quickly allows you to find where the big files/folders are. In this case I found that my c:\Windows\winsxs folder was over 12 GB of size. One way to reclaim some of that disk space is to cleanup all files that have been backed up when a Service Pack has been installed. To do that in Windows 7 you can run the following DISM command:&lt;/p&gt;
&lt;p&gt;dism /online /cleanup-image /spsuperseded /hidesp&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;That freed up 4 GB in my machine and now I can move on.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; I only ran this in my Windows&amp;nbsp;7 machine and it worked great, have not tried it in Server SKUs so&amp;nbsp;run at your own risk.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10326926" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/QKMmnlOyeoM" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2012/07/04/winsxs-is-huge-free-up-a-few-gigabytes-with-dism.aspx</feedburner:origLink></item><item><title>It has been a long time since last post</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/Xl4e8c0Qk1U/it-has-been-a-long-time-since-last-post.aspx</link><pubDate>Fri, 16 Mar 2012 17:22:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10284322</guid><dc:creator>CarlosAg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=10284322</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2012/03/16/it-has-been-a-long-time-since-last-post.aspx#comments</comments><description>&lt;p&gt;Wow, just realized that in the last 6 months I’ve only had a chance to post 2 items and I think it is about time to start this going again. &lt;/p&gt;  &lt;p&gt;So why this much silence? Well, About 8 months ago a couple of big &lt;a href="http://www.zdnet.com/blog/microsoft/microsoft-reorg-scott-guthrie-to-head-new-azure-application-platform-team/9324"&gt;changes happened at my division as described in this link&lt;/a&gt;. As part of that transition my responsibilities changed and I transitioned from being the Development Manager for the Web Platform (IIS, WebMatrix, WebDeploy, etc…) to take a new role and start a new team that we called Azure UX team. Our team is in charge of reimagining the Windows Azure User Experience and we stated on a mission to really make it even better. As part of that we’ve been super busy delivering a set of projects, some of which we released in December such as our brand new Windows Azure web site at &lt;a title="http://www.windowsazure.com/en-us/" href="http://www.windowsazure.com/" target="_blank"&gt;http://www.windowsazure.com/&lt;/a&gt; and the new Windows Azure Billing Web site at &lt;a title="https://account.windowsazure.com/" href="https://account.windowsazure.com/"&gt;https://account.windowsazure.com/&lt;/a&gt;, several updates to the Windows Azure Management Portal at &lt;a title="http://windows.azure.com/" href="http://windows.azure.com/"&gt;http://windows.azure.com/&lt;/a&gt; and some that have not yet been released.&lt;/p&gt;  &lt;p&gt;These last months have been quite a ride, I feel privileged of having been part of the IIS family and community and its multiple releases since even before Windows Vista shipped, 7, 7.5, ARR, URL Rewrite, Web Deploy, WebMatrix, WebPI, IIS Media Services, FTP, WebDAV, SEO Toolkit, WFF, FastCGI, WinCache, AdminPack, PowerShell, Database Manager, Dynamic IP Restrictions, and many many more releases my team delivered, and obviously, the awesome new version in Windows 8. I will always remain close to all of them, both the people, the products, and the community. &lt;/p&gt;  &lt;p&gt;At the same time, I’m extremely happy and excited to also have now a chance to be part of such an amazing group of people the AUX team, a very fast pace, dedicated and professional group, working on a new mission that will influence so deeply the shape of the cloud.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10284322" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/Xl4e8c0Qk1U" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/Windows+Azure/">Windows Azure</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2012/03/16/it-has-been-a-long-time-since-last-post.aspx</feedburner:origLink></item><item><title>Using Windows Authentication with Web Deploy and WMSVC</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/NAJlqBs_KH4/using-windows-authentication-with-web-deploy-and-wmsvc.aspx</link><pubDate>Wed, 14 Dec 2011 02:12:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10247425</guid><dc:creator>CarlosAg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=10247425</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2011/12/13/using-windows-authentication-with-web-deploy-and-wmsvc.aspx#comments</comments><description>&lt;p&gt;By default in Windows Server 2008 when you are using the Web Management Service (WMSVC) and Web Deploy (also known as MSDeploy) it will use Basic authentication to perform your deployments. If you want to enable Windows Authentication you will need to set a registry key so that the Web Management Service also supports using NTLM. To do this, update the registry on the server by adding a DWORD key named &amp;quot;&lt;strong&gt;WindowsAuthenticationEnabled&lt;/strong&gt;&amp;quot; under HKEY_LOCAL_MACHINE\Software\Microsoft\WebManagement\Server, and set it to 1. If the Web Management Service is already started, the setting will take effect after the service is restarted.&lt;/p&gt;  &lt;p&gt;For more details on other configuration options see:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://technet.microsoft.com/en-us/library/dd722796(WS.10).aspx" href="http://technet.microsoft.com/en-us/library/dd722796(WS.10).aspx"&gt;http://technet.microsoft.com/en-us/library/dd722796(WS.10).aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10247425" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/NAJlqBs_KH4" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS+Manager/">IIS Manager</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2011/12/13/using-windows-authentication-with-web-deploy-and-wmsvc.aspx</feedburner:origLink></item><item><title>Razor Migration Notes 3: Use app_offline.htm to deploy the new version</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/cA0Je0Q-mxo/razor-migration-notes-3-use-app-offline-htm-to-deploy-the-new-version.aspx</link><pubDate>Fri, 19 Aug 2011 06:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10197647</guid><dc:creator>CarlosAg</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=10197647</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2011/08/18/razor-migration-notes-3-use-app-offline-htm-to-deploy-the-new-version.aspx#comments</comments><description>&lt;p&gt;This is the third post on the series:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/carlosag/archive/2011/08/07/razor-migration-notes-1-moving-a-sitemappath-control-to-asp-net-web-pages.aspx"&gt;1: Moving a SitemapPath Control to ASP.NET Web Pages&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/carlosag/archive/2011/08/13/razor-migration-notes-2-use-url-rewrite-to-maintain-your-page-rankings-seo.aspx" target="_blank"&gt;2: Use URL Rewrite to maintain your Page rankings (SEO)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;ASP.NET has a nice feature to help for deployment processes where you can drop an HTML file named app_offline.htm and it will unload all assemblies and code that it has loaded letting you easily delete binaries and deploy the new version while still serving back to customers the friendly message that you provide telling them that your site is under maintenance.&lt;/p&gt;  &lt;p&gt;One caveat though, is that Internet Explorer users might still see the “friendly” error that they display and not your nice message. This happens because of a page size validation that IE performs. See Scott’s blog on how to workaround that problem: &lt;a title="App_Offline.htm and working around the IE Friendly Errors" href="http://weblogs.asp.net/scottgu/archive/2006/04/09/442332.aspx"&gt;App_Offline.htm and working around the IE Friendly Errors&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The &lt;a href="http://www.carlosag.net/" target="_blank"&gt;live site&lt;/a&gt; is now running in .NET 4.0 and all using Razor.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10197647" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/cA0Je0Q-mxo" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/-NET/">.NET</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/ASP-NET/">ASP.NET</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2011/08/18/razor-migration-notes-3-use-app-offline-htm-to-deploy-the-new-version.aspx</feedburner:origLink></item><item><title>Razor Migration Notes 2: Use URL Rewrite to maintain your Page rankings (SEO)</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/eakajxO_kio/razor-migration-notes-2-use-url-rewrite-to-maintain-your-page-rankings-seo.aspx</link><pubDate>Sat, 13 Aug 2011 17:46:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10195462</guid><dc:creator>CarlosAg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=10195462</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2011/08/13/razor-migration-notes-2-use-url-rewrite-to-maintain-your-page-rankings-seo.aspx#comments</comments><description>&lt;p&gt;This is the second note of the series:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/b/carlosag/archive/2011/08/07/razor-migration-notes-1-moving-a-sitemappath-control-to-asp-net-web-pages.aspx"&gt;1: Moving a SitemapPath Control to ASP.NET Web Pages&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;My current Web Site was built using ASP.NET 2.0 and WebForms, that means that all of my pages have the extension .aspx. While moving each page to use ASP.NET Web Pages their extension is being changed to .cshtml, and while I’m sure I could configure it in a way to get them to keep their aspx extensions it is a good opportunity to “start clean”. Furthermore, in ASP.NET WebPages you can also access them without the extension at all, so if you have /my-page.cshtml, you can also get to it using just /my-page. Given I will go through this migration I decided to use the clean URL format (no extension) and in the process get better URLs for SEO purposes, for example, today one of the URLs look like &lt;a title="http://www.carlosag.net/Articles/configureComPlus.aspx" href="http://www.carlosag.net/Articles/configureComPlus.aspx"&gt;http://www.carlosag.net/Articles/configureComPlus.aspx&lt;/a&gt; but this would be a good time to enforce lower-case semantics and also get rid of those ugly camel casing and get a much more standard a friendly format for Search Engines using “-“, like: &lt;a title="http://www.carlosag.net/Articles/configureComPlus.aspx" href="http://www.carlosag.net/articles/configure-com-plus.aspx"&gt;http://www.carlosag.net/articles/configure-com-plus.aspx&lt;/a&gt;. &lt;/p&gt;  &lt;h2&gt;Use URL Rewrite to make sure to keep your Page Ranking and no broken links &lt;/h2&gt;  &lt;p&gt;The risk of course is that if you just change the URLs of your site you will end up not only with lots of 404’s (Not Found), but your page ranking will be reset and you will loose all the “juice” that external links and history have provided to it. The right way to do this is to make sure that you perform a permanent redirect (301) from the old URL to the new URL, this way Search Engines (and browsers) will know that the content has permanently moved to a new location so they should “pass all the page ranking” to the new page.&lt;/p&gt;  &lt;p&gt;There are many ways to achieve this, but I happen to like URL Rewrite a lot, so I decided to use it. To do that I basically created one rule that uses a Rewrite Map (think of it as a Dictionary) to match the URL and if it matches it will perform a permanent redirect to the new one. So for example, if /aboutme.aspx is requested, then it will 301 to /about-me:&lt;/p&gt;  &lt;div class="code"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;?xml&lt;/font&gt;&lt;font color="#ff0000"&gt; version&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;configuration&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;system.webServer&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;rewrite&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;rules&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;rule&lt;/font&gt;&lt;font color="#ff0000"&gt; name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Redirect for OldUrls&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; stopProcessing&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;true&amp;quot;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;match&lt;/font&gt;&lt;font color="#ff0000"&gt; url&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;.*&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;conditions&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;add&lt;/font&gt;&lt;font color="#ff0000"&gt; input&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;{OldUrls:{REQUEST_URI}}&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; pattern&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;(.+)&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;conditions&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;action&lt;/font&gt;&lt;font color="#ff0000"&gt; type&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Redirect&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; url&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;{C:1}&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; appendQueryString&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;true&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; redirectType&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Permanent&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;rule&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;rules&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;rewriteMaps&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;rewriteMap&lt;/font&gt;&lt;font color="#ff0000"&gt; name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;OldUrls&amp;quot;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;add&lt;/font&gt;&lt;font color="#ff0000"&gt; key&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;/aboutme.aspx&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;/about-me&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;add&lt;/font&gt;&lt;font color="#ff0000"&gt; key&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;/soon.aspx?id=1&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;/coming-soon&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;add&lt;/font&gt;&lt;font color="#ff0000"&gt; key&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;/Articles/configureComPlus.aspx&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;/articles/configure-com-plus&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;add&lt;/font&gt;&lt;font color="#ff0000"&gt; key&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;/Articles/createChartHandler.aspx&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;/articles/create-aspnet-chart-handler&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;add&lt;/font&gt;&lt;font color="#ff0000"&gt; key&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;/Articles/createVsTemplate.aspx&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; value&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;/articles/create-vs-template&amp;quot;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ...      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;rewriteMap&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;rewriteMaps&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;rewrite&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;system.webServer&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;configuration&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;/font&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Note that I could have also created a simple rule that would change the extension to cshtml, however I decided that I also wanted to change the page names. The best thing is that you can do it incrementally and only rewrite them once your new page is ready or even switch back to the old one later if any problems occur.&lt;/p&gt;  &lt;p&gt;Summary&lt;/p&gt;  &lt;p&gt;Using URL Rewrite you can easily keep your SEO and pages without broken links. You can also achieve lots more, check out: &lt;a title="SEO made easy with IIS URL Rewrite 2.0 SEO templates - CarlosAg" href="http://blogs.msdn.com/b/carlosag/archive/2010/04/01/seo-made-easy-with-iis-url-rewrite-templates.aspx"&gt;SEO made easy with IIS URL Rewrite 2.0 SEO templates – CarlosAg&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10195462" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/eakajxO_kio" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/ASP-NET/">ASP.NET</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2011/08/13/razor-migration-notes-2-use-url-rewrite-to-maintain-your-page-rankings-seo.aspx</feedburner:origLink></item><item><title>Razor Migration Notes 1: Moving a SitemapPath Control to ASP.NET Web Pages</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/8PHFb-cLPvc/razor-migration-notes-1-moving-a-sitemappath-control-to-asp-net-web-pages.aspx</link><pubDate>Sun, 07 Aug 2011 16:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10193442</guid><dc:creator>CarlosAg</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=10193442</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2011/08/07/razor-migration-notes-1-moving-a-sitemappath-control-to-asp-net-web-pages.aspx#comments</comments><description>&lt;p&gt;After many years I decided that it is time to rewrite my Web site using Razor. A bit of history, I started it around 2003 using ASP.NET 1.1. When .NET 2.0 came around in 2005 I migrated to it and it was great being able to leverage features like MasterPages, Themes, Sitemaps, and many other features. Honestly it is a pretty simple Web site, with mostly content, so very few controls, Sitemap, my own custom Menu control, and a couple more. Last week it was moved to use .NET 4.0 and it feels its about time to go back and update it a bit, both in look and features. So this (if time permits) will be the first of a series of migration notes that I discover as I move it to use ASP.NET Razor (aka WebPages). Do note that this is not meant to be a best practice in anyway, I would never claim I can make such a thing, these will be only my personal notes as I discover more details in ASP.NET WebPages features and as I move my own implementation to use them.&lt;/p&gt;
&lt;p&gt;So with that, one of the first things I faced during this migration, was the use of a Sitemap control (asp:SiteMapPath) in my MasterPage (future post about moving from MasterPages coming). I knew about Sitemap API, so I just decided to write a simple Sitemap helper that I can now use anywhere in Razor. The code is pretty simple, it basically generates an unordered list of links using &amp;lt;ul&amp;gt; and &amp;lt;li&amp;gt; with &amp;lt;a&amp;gt; inside, and used CSS to layout them in a way that I liked.&lt;/p&gt;
&lt;h2&gt;SitemapPath Control in WebForms&lt;/h2&gt;
&lt;p&gt;The original code I was using in my MasterPage looked like the following:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;asp:SiteMapPath CssClass="HeaderText" runat="server" ID="siteMap" ShowToolTips="true" NodeStyle-ForeColor="White" CurrentNodeStyle-Font-Bold="true" /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;And generated the following markup:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;span id="siteMap" class="HeaderText"&amp;gt;&amp;lt;a href="#siteMap_SkipLink"&amp;gt;&amp;lt;img alt="Skip Navigation Links" height="0" width="0" src="http://blogs.msdn.com/WebResource.axd?d=S2jbW9E-HYlS0UQoRCcsm94KUJelFI6yS-CQIkFvzT6fyMF-zCI4oIF9bSrGjIv4IvVLF9liJbz7Om3voRpNZ8yQbW3z1KfqYr4e-0YYpXE1&amp;amp;amp;t=634219272564138624" style='border-width:0px;' /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;span&amp;gt;&amp;lt;a title='Home' href='/' style='color:White;'&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;&amp;lt;a title='Free tools for download' href='/Tools/' style='color:White;'&amp;gt;Tools&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt; &amp;amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span style='color:White;font-weight:bold;'&amp;gt;Code Translator&amp;lt;/span&amp;gt;&amp;lt;a id='siteMap_SkipLink'&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Which looks like the following in the browser:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-49-33-metablogapi/3301.image_5F00_2.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-49-33-metablogapi/7103.image_5F00_thumb.png" width="228" height="33" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I used some CSS to set the color, and background and other stuff, but still to set the last item to bold required me to use a property in the Sitemap to get it to look the way I wanted.&lt;/p&gt;
&lt;h2&gt;My Sitemap Helper in Razor&lt;/h2&gt;
&lt;p&gt;Since I was familiar with the Sitemap API and my goal was to change as &amp;ldquo;little&amp;rdquo; as possible as part of this first migration, I decided to write a Sitemap helper that I can use in my Layout pages. The code in the Page is as simple as it gets, you just call @Helpers.Sitemap() and that&amp;rsquo;s it (added the Div below to get some context in the markup, but that was already there with the SitemapPath control anyway):&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;div class="bannerPath"&amp;gt; &lt;br /&gt;@Helpers.Sitemap() &lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;This new helper version generates the markup below. I don&amp;rsquo;t know about you, but I can sure make more sense of what it says, and I imagine Search Engines will as well, I decided to use more semantically correct markup using a &amp;lt;nav&amp;gt; to signal navigational section and use a list of links.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family: Courier New;" face="Courier New"&gt;&amp;lt;nav&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ul class="siteMap"&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href="http://blogs.msdn.com/" title="Home"&amp;gt;Home&amp;lt;/a&amp;gt;&amp;amp;nbsp;&amp;amp;gt;&amp;amp;nbsp;&amp;lt;/li&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;a href="http://blogs.msdn.com/Tools/" title="Free tools for download"&amp;gt;Tools&amp;lt;/a&amp;gt;&amp;amp;nbsp;&amp;amp;gt;&amp;amp;nbsp;&amp;lt;/li&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;li&amp;gt;&amp;lt;span&amp;gt;Code Translator&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ul&amp;gt; &lt;br /&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;And it looks like the following in the browser (I decided to remove the underlining, and have more padding, and a new font, but all of that is CSS):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-49-33-metablogapi/8664.image_5F00_4.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-49-33-metablogapi/4477.image_5F00_thumb_5F00_1.png" width="229" height="35" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;The Sitemap helper code&lt;/h2&gt;
&lt;p&gt;The code to do the Sitemap was pretty simple, just use the SiteMap API to get the current node. Since I&amp;rsquo;m picky and I wanted to generate the markup in the &amp;ldquo;right&amp;rdquo; order (note you could use CSS to float them to the right instead), I used a Stack to push the nodes while traversing them up. Finally just generate the &amp;lt;li&amp;gt;.&lt;/p&gt;
&lt;div class="Code"&gt;&lt;span style="font-family: 'Courier New'; background: yellow; font-size: 9pt;"&gt;@helper &lt;/span&gt;&lt;span style="font-family: 'Courier New'; font-size: 9pt;"&gt;Sitemap()&lt;/span&gt; &lt;br /&gt;&lt;span&gt;{&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;SiteMapNode&lt;/span&gt; currentNode = &lt;span style="color: #2b91af;"&gt;SiteMap&lt;/span&gt;.CurrentNode;&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;nav&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ul&lt;/span&gt; &lt;span style="color: red;"&gt;class&lt;/span&gt;&lt;span style="color: blue;"&gt;="siteMap"&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="background: yellow;"&gt;@&lt;/span&gt;&lt;span style="color: blue;"&gt;if&lt;/span&gt; (currentNode != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Push into a stack to reverse them&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; node = currentNode;&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; nodes = &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Stack&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;SiteMapNode&lt;/span&gt;&amp;gt;();&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;while&lt;/span&gt; (node.ParentNode != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nodes.Push(node.ParentNode);&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; node = node.ParentNode;&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;while&lt;/span&gt;(nodes.Count != 0)&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;SiteMapNode&lt;/span&gt; n = nodes.Pop();&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;a&lt;/span&gt; &lt;span style="color: red;"&gt;href&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="background: yellow;"&gt;@&lt;/span&gt;&lt;span style="color: blue;"&gt;n.Url"&lt;/span&gt; &lt;span style="color: red;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="background: yellow;"&gt;@&lt;/span&gt;&lt;span style="color: blue;"&gt;n.Description"&amp;gt;&lt;/span&gt;&lt;span style="background: yellow;"&gt;@&lt;/span&gt;n.Title&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;a&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;amp;nbsp;&amp;amp;gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background: yellow;"&gt;@&lt;/span&gt;currentNode.Title&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background: yellow;"&gt;@&lt;/span&gt;Page.Title&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ul&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;nav&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span&gt;}&lt;/span&gt; &lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To make it look the way I wanted I used the following CSS:&lt;/p&gt;
&lt;pre style="line-height: normal; list-style-type: disc; background: white;"&gt;&lt;span&gt;&lt;span style="color: #800000; font-family: Consolas;" face="Consolas" color="#800000"&gt;&lt;span style="font-size: 9.8pt;"&gt;.siteMap&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;&amp;nbsp; { &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;float&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;right&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;font-size&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;11px&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;color&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;White&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;display&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;inline&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;margin-top&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;3px&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;margin-bottom&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;3px&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;margin-left&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;0px&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;margin-right&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;10px&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;; } &lt;/span&gt;&lt;span&gt;&lt;span style="color: #800000;" color="#800000"&gt;.siteMap&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #800000;" color="#800000"&gt;li&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;,&lt;/span&gt;&lt;span&gt;&lt;span style="color: #800000;" color="#800000"&gt;span&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;{ &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;float&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;left&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;list-style-type&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;none&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;padding-left&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;5px&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;border-width&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;0px&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="color: #000000;" color="#000000"&gt;;} &lt;/span&gt;&lt;span&gt;&lt;span style="color: #800000;" color="#800000"&gt;.siteMap&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #800000;" color="#800000"&gt;span&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt; { &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;font-weight&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;bold&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;" face="Consolas"&gt;&lt;span style="font-size: 9.8pt;"&gt;&lt;span style="color: #000000;" color="#000000"&gt;; } &lt;/span&gt;&lt;span&gt;&lt;span style="color: #800000;" color="#800000"&gt;.siteMap&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style="color: #800000;" color="#800000"&gt;a&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;,&lt;/span&gt;&lt;span&gt;&lt;span style="color: #800000;" color="#800000"&gt;a.Visited&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt; { &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;color&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;White&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;; &lt;/span&gt;&lt;span&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;text-decoration&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;:&lt;/span&gt;&lt;span&gt;&lt;span style="color: #0000ff;" color="#0000ff"&gt;none&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;" color="#000000"&gt;; } &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;SitemapPath control gives you a really easy way to put together a navigation control based on the Sitemap APIs (and the Web.Sitemap file in my case). Creating a simple ASP.NET Razor helper is actually pretty easy since all the functionality needed is there in the base API&amp;rsquo;s and although it required some code (20 lines of code) now I feel like I have more control over my markup, can style it in anyway I want using CSS and have cleaner markup rendered.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sure there are better ways to do this, but as I said, the goal of this first pass is to push my site soon with as little changes possible while keeping the same functionality first.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10193442" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/8PHFb-cLPvc" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/-NET/">.NET</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/ASP-NET/">ASP.NET</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2011/08/07/razor-migration-notes-1-moving-a-sitemappath-control-to-asp-net-web-pages.aspx</feedburner:origLink></item><item><title>Get IIS bindings at runtime without being an Administrator</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/PiUErwJKkMo/get-iis-bindings-at-runtime-without-being-an-administrator.aspx</link><pubDate>Sat, 22 Jan 2011 01:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10118913</guid><dc:creator>CarlosAg</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=10118913</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2011/01/21/get-iis-bindings-at-runtime-without-being-an-administrator.aspx#comments</comments><description>&lt;p&gt;Today there &lt;a target="_blank" href="http://stackoverflow.com/questions/4763710/get-iis-bindings-at-runtime"&gt;was a question in StackOverflow&lt;/a&gt; asking whether it was possible to read the IIS binding information such as Port and Protocols from the ASP.NET application itself to try to handle redirects from HTTP to HTTPS in a way that was reliable without worrying about using different ports than 80/443. &lt;/p&gt;
&lt;p&gt;Turns out this is possible in the context of the IIS worker process by using Microsoft.Web.Administration.&lt;/p&gt;
&lt;p&gt;The following function will take care of that by reading the Worker Process isolated configuration file and find the HTTP based bindings.&lt;/p&gt;
&lt;div class="code"&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IEnumerable&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;KeyValuePair&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;GetBindings(&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;HttpContext&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;context)&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #006400;"&gt;// Get the Site name&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;siteName&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;System.Web.Hosting.HostingEnvironment.SiteName&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&gt;      &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #006400;"&gt;// Get the sites section from the AppPool.config     &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000000;"&gt;Microsoft.Web.Administration.&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ConfigurationSection&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;sitesSection&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;span style="color: #808080;"&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; &lt;/span&gt;&lt;span style="color: #000000;"&gt;Microsoft.Web.Administration.WebConfigurationManager.GetSection(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #808080;"&gt; "system.applicationHost/sites"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&gt;&amp;nbsp;&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;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(Microsoft.Web.Administration.&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ConfigurationElement&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;site&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;sitesSection.GetCollection())&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&lt;span style="color: #808080;"&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; &lt;/span&gt;&lt;span style="color: #006400;"&gt;// Find the right Site     &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Equals((&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;)site[&lt;/span&gt;&lt;span style="color: #808080;"&gt;"name"&lt;/span&gt;&lt;span style="color: #000000;"&gt;],&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;siteName,&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;StringComparison&lt;/span&gt;&lt;span style="color: #000000;"&gt;.OrdinalIgnoreCase))&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&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; &lt;/span&gt;&lt;span style="color: #006400;"&gt;// For each binding see if they are http based and return the port and protocol     &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080;"&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; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(Microsoft.Web.Administration.&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ConfigurationElement&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;binding&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;site.GetCollection(&lt;/span&gt;&lt;span style="color: #808080;"&gt;"bindings"&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&lt;span style="color: #808080;"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;protocol&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;)binding[&lt;/span&gt;&lt;span style="color: #808080;"&gt;"protocol"&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;bindingInfo&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;)binding[&lt;/span&gt;&lt;span style="color: #808080;"&gt;"bindingInformation"&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(protocol.StartsWith(&lt;/span&gt;&lt;span style="color: #808080;"&gt;"http"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;StringComparison&lt;/span&gt;&lt;span style="color: #000000;"&gt;.OrdinalIgnoreCase))&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&lt;span style="color: #808080;"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;[]&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;parts&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;bindingInfo.Split(&lt;/span&gt;&lt;span style="color: #808080;"&gt;':'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(parts.Length&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;==&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&lt;span style="color: #808080;"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;port&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;=&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;parts[&lt;/span&gt;&lt;span style="color: #800000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000000;"&gt;yield&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;KeyValuePair&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;(protocol,&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;port)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;span style="color: #808080;"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;span style="color: #808080;"&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; &lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;span style="color: #808080;"&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; &lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt; &lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you want to try it, you could use the following page, just save it as test.aspx and add the function above, the result is a simple table that shows the protocol and port to be used:&lt;/p&gt;
&lt;div class="code"&gt;&lt;span style="background-color: #ffff99"&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;%@&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Page Language&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="C#"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; %&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;     &lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: #ffff99"&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;%@&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Import Namespace&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="System.Collections.Generic"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; %&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;     &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; runat&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="server"&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Page_Load(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;sender,&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;e)&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000000;"&gt;Response.Write(&lt;/span&gt;&lt;span style="color: #808080;"&gt;"&amp;lt;table border='1'&amp;gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(KeyValuePair&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;binding&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;GetBindings(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Context))&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&lt;span style="color: #808080;"&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; &lt;/span&gt;&lt;span style="color: #000000;"&gt;Response.Write(&lt;/span&gt;&lt;span style="color: #808080;"&gt;"&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&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; &lt;/span&gt;&lt;span style="color: #000000;"&gt;Response.Write(binding.Key)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&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; &lt;/span&gt;&lt;span style="color: #000000;"&gt;Response.Write(&lt;/span&gt;&lt;span style="color: #808080;"&gt;"&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&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; &lt;/span&gt;&lt;span style="color: #000000;"&gt;Response.Write(binding.Value)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&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; &lt;/span&gt;&lt;span style="color: #000000;"&gt;Response.Write(&lt;/span&gt;&lt;span style="color: #808080;"&gt;"&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000000;"&gt;Response.Write(&lt;/span&gt;&lt;span style="color: #808080;"&gt;"&amp;lt;/table&amp;gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;;&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;span style="color: #808080;"&gt;     &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt; &lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;&lt;br /&gt;
Also, you will need to add Microsoft.Web.Administration to your compilation assemblies inside the web.config for it to work:
&lt;/p&gt;
&lt;div class="code"&gt;
	&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;?xml&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;version&lt;/span&gt;&lt;span style="color: blue;"&gt;="1.0"?&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;
	&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;configuration&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;system.web&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;compilation&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;debug&lt;/span&gt;&lt;span style="color: blue;"&gt;="true"&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;assemblies&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;add&lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;assembly&lt;/span&gt;&lt;span style="color: blue;"&gt;="Microsoft.Web.Administration,&amp;nbsp;Version=7.0.0.0,&amp;nbsp;Culture=neutral,&amp;nbsp;PublicKeyToken=31bf3856ad364e35"/&amp;gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;assemblies&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;compilation&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;
	&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;system.web&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;
	&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;configuration&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10118913" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/PiUErwJKkMo" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/Microsoft-Web-Administration/">Microsoft.Web.Administration</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2011/01/21/get-iis-bindings-at-runtime-without-being-an-administrator.aspx</feedburner:origLink></item><item><title>Managing ASP.NET Configuration Settings using IIS Manager</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/RG-jQ3HQRnM/managing-asp-net-configuration-settings-using-iis-manager.aspx</link><pubDate>Tue, 02 Nov 2010 17:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10084843</guid><dc:creator>CarlosAg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=10084843</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2010/11/02/managing-asp-net-configuration-settings-using-iis-manager.aspx#comments</comments><description>&lt;p&gt;Today somebody asked a question about how to manage some ASP.NET configuration settings such as changing the trust level of the application and adding a few application settings and changing compilation settings to debug. I thought it would be trivial to search the web for an article or something that would show the features we added in IIS 7.0 to manage those, but to my surprise I was not able to find anything that would clearly show it, so I decided to write this pretty quickly for anyone that is not aware.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-49-33-metablogapi/1462.image_5F00_68634C25.png"&gt;&lt;img height="350" width="508" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-49-33-metablogapi/1464.image_5F00_thumb_5F00_12EF0736.png" alt="image" border="0" title="image" style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;With the release of IIS 7.0 (included in Windows Vista and Windows Server 2008), and of course included in IIS 7.5 (Windows 7 and Windows Server 2008 R2) we added a set of features for managing some of the configuration of common ASP.NET features inside the same IIS Manager. Those features include:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;.NET Authorization Rules&lt;sup&gt; 1&lt;/sup&gt; &amp;ndash; To manage the authorization rules for ASP.NET, this is particularly useful when using Classic Mode. This UI basically is to manage the system.web/authorization section in a graphical way.&lt;/li&gt;
&lt;li&gt;.NET Compilation &amp;ndash; This exposes the settings used by the ASP.NET compilation engine, such as list of assemblies, Debug settings, VB settings (Option Strict, Option Explicit), Temp directory, etc. This UI saves all the settings in the system.web/compilation section.&lt;/li&gt;
&lt;li&gt;.NET Error Pages&lt;sup&gt; 1&lt;/sup&gt; &amp;ndash; Allows you to manage the ASP.NET custom errors, exposing the system.web/customErrors.&lt;/li&gt;
&lt;li&gt;.NET Globalization &amp;ndash; Allows you to manage the globalization settings such as file encoding, ui culture, etc. This modifies the section system.web/globalization&lt;/li&gt;
&lt;li&gt;.NET Providers &lt;sup&gt;2&lt;/sup&gt; &amp;ndash; Allows you to manage the different provider configuration for the ASP.NET providers, such as Roles, Membership and Profile. (system.web/membership, system.web/profile, system.web/roleManager, etc).&lt;/li&gt;
&lt;li&gt;.NET Users, .NET Roles and .NET Profile &lt;sup&gt;2&lt;/sup&gt; &amp;ndash; Configure options that track settings for ASP.NET applications. All these features uses the ASP.NET runtime configuration to allow you to manage their settings, such as adding users, roles and profile settings. (What this post is about). These does not modify configuration but instead they use the Provider configured (such as SqlMembershipProvider, SqlRoleProvider, WindowsTokenRoleProvider, etc)&lt;/li&gt;
&lt;li&gt; .NET Trust Levels, allows you to configure the security trust level policy for the application. Modifies system.web/trust section.&lt;/li&gt;
&lt;li&gt;Application Settings &amp;ndash; Allows you to manage the name/value pair stored in the .NET appSettings section.&lt;/li&gt;
&lt;li&gt;Connection Strings &amp;ndash; Configures the database connection strings that can be used by ASP.NET applications. Manages the connectionStrings section.&lt;/li&gt;
&lt;li&gt;Machine Key &amp;ndash; Allows you to modify the machine key and other related settings stored in system.web/machineKey section.&lt;/li&gt;
&lt;li&gt;Pages and Controls &amp;ndash; Allows you to modify settings from the system.web/pages section, such as Base class, Namespaces, and Controls registered.&lt;/li&gt;
&lt;li&gt;Session State &amp;ndash; Allows you to configure the session state settings such as connection string, cookie configuration and other configuration included in system.web/sessionState.&lt;/li&gt;
&lt;li&gt;SMTP E-mail &amp;ndash; Configure the SMTP settings such as Server, Delivery mode, or Pickup directory, included in system.net/mailSettings/smtp section.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;sup&gt;1&lt;/sup&gt; &amp;ndash; These features are included in Windows 7 and Windows Server 2008 R2, but can be installed for Windows Vista and Windows Server 2008 when &lt;a target="_blank" href="http://www.iis.net/download/AdministrationPack"&gt;downloading the Administration Pack for IIS7&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;sup&gt;2&lt;/sup&gt; &amp;ndash; Note, these features require hosting the ASP.NET runtime and due to technical limitations only application pools configure to run using .NET Version 2.0 will show these features. This means that if you configure your application pool to run .NET 4.0 (in IIS 7.0 and IIS 7.5) you will not see those features. As a workaround you could temporarily change the application pool to run in 2.0, make your changes and switch it back to 4.0 (of course, not recommended for production environments).&lt;/p&gt;
&lt;p&gt;These features are not meant to expose all the settings included in ASP.NET, and they only include configuration settings up to .NET 2.0. I should also add that IIS includes a generic configuration editor that allows you to manage a lot more configuration settings from ASP.NET, IIS, and more, in the image below you can see a lot more sections like webParts, trace, siteMap, and others:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-49-33-metablogapi/1462.image_5F00_245F680E.png"&gt;&lt;img height="484" width="591" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-49-33-metablogapi/7416.image_5F00_thumb_5F00_014EF69E.png" alt="image" border="0" title="image" style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The best thing is that you can apply the changes immediately or you can also make changes and just generate the code to automate them later using code, command line or scripts them using Javascript, Managed code, or AppCmd.exe.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-49-33-metablogapi/6648.image_5F00_19DE93EE.png"&gt;&lt;img height="463" width="644" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-49-33-metablogapi/7713.image_5F00_thumb_5F00_40ACAA2E.png" alt="image" border="0" title="image" style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10084843" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/RG-jQ3HQRnM" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/-NET/">.NET</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS+Manager/">IIS Manager</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2010/11/02/managing-asp-net-configuration-settings-using-iis-manager.aspx</feedburner:origLink></item><item><title>Using the SEO Toolkit to generate a Sitemap of a remote Web Site</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/SziCU75Ue0E/using-the-seo-toolkit-to-generate-a-sitemap-of-a-remote-web-site.aspx</link><pubDate>Tue, 12 Oct 2010 18:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10074870</guid><dc:creator>CarlosAg</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=10074870</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2010/10/12/using-the-seo-toolkit-to-generate-a-sitemap-of-a-remote-web-site.aspx#comments</comments><description>&lt;p&gt;The &lt;a href="http://blogs.msdn.com/b/carlosag/archive/2009/11/17/announcing-iis-seo-toolkit-v1-0-release.aspx" target="_blank"&gt;SEO Toolkit&lt;/a&gt; includes a set of features (like Robots Editor and Sitemap Editor) that only work when you are working with a local copy of your Web Site. The reason behind it is that we have to understand where we need to save the files that we need to generate (like Robots.txt and Sitemap XML files) without having to ask for physical paths as well as to verify that the functionality is added correctly such as only allowing Robots.txt in the root of a site, etc. Unfortunately this means that if you have a remote server that you cannot have a running local copy then you cannot use those features. (Note that you can still use &lt;a href="http://learn.iis.net/page.aspx/641/understanding-site-analysis-reports/" target="_blank"&gt;Site Analysis&lt;/a&gt; tool since that will crawl your Web Site regardless of platform or framework and will store the report locally just fine.)&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;The Good News&lt;/h2&gt;  &lt;p&gt;The good news is that you can technically trick the SEO Toolkit into thinking you have a working copy locally and allow you to generate the Sitemap or Robots.txt file without too much hassle (“too much” being the key). &lt;/p&gt;  &lt;p&gt;For this sample, lets assume we want to create a Sitemap from a remote Web site, in this case I will use my own Web site (http://www.carlosag.net/ , but you can specify your own Web site, below are the steps you need to follow to enable those features for any remote Web site (even if it is running in other versions of IIS or any other Web Server).&lt;/p&gt;  &lt;h2&gt;Create a Fake Site&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;Open IIS Manager (Start Menu-&amp;gt;InetMgr.exe)&lt;/li&gt;    &lt;li&gt;Expand the Tree until you can see the “Sites” node. &lt;/li&gt;    &lt;li&gt;Right-click the “Sites” node and select “Add Web Site…”&lt;/li&gt;    &lt;/ul&gt;&lt;ul&gt;     &lt;li&gt;Specify a Name (in my case I’ll use MySite)&lt;/li&gt;      &lt;li&gt;Click “Select” to choose the DefaultAppPool from the Application Pool list. This will avoid creating an additional AppPool that will never run.&lt;/li&gt;      &lt;li&gt;Specify a Physical Path where you will want the Robots and Sitemap files to be saved. I recommend creating just a temporary directory that clearly states this is a fake site. So I will choose c:\FakeSite\ for that.&lt;/li&gt;      &lt;li&gt;&lt;strong&gt;Important&lt;/strong&gt;. Set the Host name so that it matches your Web Site, for example in my case &lt;a href="http://www.carlosag.net"&gt;www.carlosag.net&lt;/a&gt;.&lt;/li&gt;      &lt;li&gt;Uncheck the “Start Web site immediately”, since we do not need this to run.&lt;/li&gt;      &lt;li&gt;Click OK&lt;/li&gt;   &lt;/ul&gt;   &lt;p&gt;This is how my Create site dialog looks like:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-49-33-metablogapi/7534.image_5F00_3844F7E7.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-49-33-metablogapi/0675.image_5F00_thumb_5F00_17BDB835.png" width="244" height="237" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Use the Sitemap Editor&lt;/h2&gt;  &lt;p&gt;Since we have a site that SEO Toolkit thinks it is locally now you should be able to use the features as usual.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Select the new site created above in the Tree&lt;/li&gt;    &lt;li&gt;Double-click the Search Engine Optimization icon in the Home page&lt;/li&gt;    &lt;li&gt;Click the link “Create a new Sitemap”&lt;/li&gt;    &lt;li&gt;Specify a name, in my case Sitemap.xml&lt;/li&gt;    &lt;li&gt;Since this is a remote site, you will see that the physical location option shows an empty list, so change the “URL structure” to will use the “&amp;lt;Run new Site Analysis&amp;gt;..” or if you already have one you can choose that.&lt;/li&gt;    &lt;/ul&gt;&lt;ul&gt;     &lt;li&gt;If creating a new one, just specify a name and click OK (I will use MySite). At this point the SEO Toolkit starts crawling the Remote site to discover links and URLs, when it is done it will present you the virtual namespace structure so you can work with.&lt;/li&gt;   &lt;/ul&gt;    &lt;ul&gt;&lt;li&gt;After the crawling is done, you can now check any files you want to include in your Sitemap and leverage the Server response to define the changed date and all the features as if the content was local. and Click OK&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This is the way the dialog looks when discovered my remote Web site URLs:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-49-33-metablogapi/0268.image_5F00_42961C47.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-49-33-metablogapi/7853.image_5F00_thumb_5F00_494925CA.png" width="244" height="207" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You will find your Sitemap.xml generated in the physical directory specified when creating the site (in my case c:\FakeSite\Sitemap.xml&amp;quot;).&lt;/p&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;Use the Robots Editor&lt;/h2&gt;  &lt;p&gt;Just as with the Sitemap Editor, once you prepare a fake site for the remote server, you should be able to use the Robots Editor and leverage the same Site analysis output to build your Robots.txt file.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-49-33-metablogapi/0184.image_5F00_09130C50.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: ; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-49-33-metablogapi/4807.image_5F00_thumb_5F00_61D8C31A.png" width="244" height="189" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Summary&lt;/h2&gt;  &lt;p&gt;In this blog I show how you can use the Sitemap and Robots Editor included in the &lt;a href="http://www.iis.net/download/SEOToolkit" target="_blank"&gt;SEO Toolkit&lt;/a&gt; when working with remote Web sites that might be running in different platforms or different versions of IIS. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10074870" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/SziCU75Ue0E" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS+Manager/">IIS Manager</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2010/10/12/using-the-seo-toolkit-to-generate-a-sitemap-of-a-remote-web-site.aspx</feedburner:origLink></item><item><title>Free SEO Analysis using IIS SEO Toolkit</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/VCw_ALUB79c/free-seo-analysis-using-iis-seo-toolkit.aspx</link><pubDate>Fri, 14 May 2010 00:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10012848</guid><dc:creator>CarlosAg</dc:creator><slash:comments>10</slash:comments><description>&lt;p&gt;In my spare time I&amp;rsquo;ve been thinking about new ideas for the &lt;a href="http://www.iis.net/download/SEOToolkit" mce_href="http://www.iis.net/download/SEOToolkit"&gt;SEO Toolkit&lt;/a&gt;, and it occurred to me that rather than continuing trying to figure out more reports and better diagnostics against some random fake sites, that it could be interesting to ask openly for anyone that is wanting a free SEO analysis report of your site and test drive some of it against real sites.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;So what is in it for you, I will analyze your site to look for common SEO errors, I will create a digest of actions to do and other things (like generating a diagram of your site, layer information, etc), and will deliver it to you in a form of an email. If you agree I will post some of the results (hiding identification information like site, url, etc, so that it is made anonymously if needed).&lt;/li&gt;
&lt;li&gt;and what is in it for me, well I will crawl your Web Site (once or twice at most, with a limit set to a few hundred pages) using the &lt;a href="http://www.iis.net/download/SEOToolkit" mce_href="http://www.iis.net/download/SEOToolkit"&gt;SEO Toolkit&lt;/a&gt; to test drive some ideas and reporting stuff that I&amp;rsquo;m starting to build and to continue investigating common patterns and errors.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So if you want in, just post me your URL in the comments of this blog (make sure you are reading this blog from a URL inside &lt;a href="http://blogs.msdn.com/carlosag/" mce_href="http://blogs.msdn.com/carlosag/"&gt;http://blogs.msdn.com/carlosag/&lt;/a&gt; , otherwise you might be posting comments in some syndicating site.), I will only allow the first few sites (if successful I will start another batch in the future) and I will be doing one by one in the following days. Make sure to include a way to contact you whether using the MSDN user infrastructure or include an email so that I can contact you with the results.&lt;/p&gt;
&lt;p&gt;Alternatively I will take also URLs using Twitter at &lt;a title="http://twitter.com/CarlosAguilarM" href="http://twitter.com/CarlosAguilarM" mce_href="http://twitter.com/CarlosAguilarM"&gt;http://twitter.com/CarlosAguilarM&lt;/a&gt; so hurry up and let me know if you want me to look at your site.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10012848" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/VCw_ALUB79c" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2010/05/13/free-seo-analysis-using-iis-seo-toolkit.aspx</feedburner:origLink></item><item><title>IIS SEO Toolkit and W3C Validation Service</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/jRSWRDcrbX0/iis-seo-toolkit-and-w3c-validation-service.aspx</link><pubDate>Mon, 10 May 2010 21:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10010531</guid><dc:creator>CarlosAg</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=10010531</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2010/05/10/iis-seo-toolkit-and-w3c-validation-service.aspx#comments</comments><description>&lt;P&gt;One thing that I’ve been asked several times about the SEO Toolkit is if it does a full standards validation on the markup and content that is processed, and if not, to add support for more comprehensive standards validation, in particular XHTML and HTML 4.01. Currently the markup validation performed by the SEO Toolkit is really simple, its main goal is to make sure that the markup is correctly organized, for example that things like &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;Test&amp;lt;/b&amp;gt;&amp;lt;/i&amp;gt; are not found in the markup, the primary reason is to make sure that basic blocks of markup are generally "easy" to parse by Search Engines and that the semantics will not be terribly broken if a link, text or style is not correctly closed (since all of them would affect SEO).&lt;/P&gt;
&lt;P&gt;So the first thing I would say is that we have heard the feedback and are looking at what we could possibly add in future versions, however why wait, right?&lt;/P&gt;
&lt;P&gt;One thing that many people do not realize is that the &lt;A href="http://blogs.msdn.com/carlosag/archive/2009/11/23/iis-seo-toolkit-crawler-module-extensibility.aspx" target=_blank mce_href="http://blogs.msdn.com/carlosag/archive/2009/11/23/iis-seo-toolkit-crawler-module-extensibility.aspx"&gt;SEO Toolkit can be extended to add new violations&lt;/A&gt;, new metadata and new rules to the analysis process and as such during a demo I gave a few weeks ago I decided to write a sample on how to consume the online &lt;A href="http://validator.w3.org/" target=_blank mce_href="http://validator.w3.org/"&gt;W3C Markup Validation Service&lt;/A&gt; from the SEO Toolkit. &lt;/P&gt;
&lt;H2&gt;Download&lt;/H2&gt;
&lt;P&gt;&lt;A title=http://www.carlosag.net/downloads/SEOW3Validator.zip href="http://www.carlosag.net/downloads/SEOW3Validator.zip" mce_href="http://www.carlosag.net/downloads/SEOW3Validator.zip"&gt;You can download the SEOW3Validator including the source code at http://www.carlosag.net/downloads/SEOW3Validator.zip&lt;/A&gt;. &lt;/P&gt;
&lt;H2&gt;How to install it&lt;/H2&gt;
&lt;P&gt;To run it you just need to:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Unzip the contents in a folder. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Install the SEOW3Validator.dll assembly in the GAC: &lt;/STRONG&gt;&lt;/LI&gt;
&lt;OL&gt;
&lt;LI&gt;Open a Windows Explorer window and navigate to c:\Windows\assembly &lt;/LI&gt;
&lt;LI&gt;Drag and Drop the SEOW3Validator.dll to the c:\Windows\assembly explorer window. &lt;/LI&gt;
&lt;LI&gt;Alternatively you can just run gacutil.exe /i SEOW3Validator.dll, usually located at C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin or v7A. &lt;/LI&gt;
&lt;LI&gt;If you have problems with this, you could try just copying the assembly to the GAC (copy SEOW3Validator.dll c:\Windows\assembly\GAC_MSIL\SEOW3Validator\1.0.0.0__995ee9b8fa017847\SEOW3Validator.dll) &lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Register the moduleProvider in Administration.config: In an elevated prompt open C:\Windows\System32\Inetsrv\config\Administration.config and add the following line right inside the &amp;lt;moduleProviders&amp;gt; right before closing the &amp;lt;/moduleProviders&amp;gt;: &lt;/LI&gt;
&lt;DIV class=code&gt;&amp;nbsp; &lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;add&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="SEOW3Validator"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="SEOW3Validator.SEOW3ValidatorModuleProvider, SEOW3Validator, Version=1.0.0.0, Culture=neutral, PublicKeyToken=995ee9b8fa017847"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt;&lt;/FONT&gt; &lt;/DIV&gt;&lt;/OL&gt;
&lt;P&gt;You should be able to now run the SEO Toolkit just as before but now you will find new violations, for example in my site I get the ones below. Notice that there are a new set of violations like W3 Validator – 68, etc, and all of them belong to the W3C category. (I would have liked to have better names, but the way the W3 API works is not really friendly for making this any better).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitandW3CValidator_BEC8/SampleValidatorResults_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitandW3CValidator_BEC8/SampleValidatorResults_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=SampleValidatorResults border=0 alt=SampleValidatorResults src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitandW3CValidator_BEC8/SampleValidatorResults_thumb.png" width=641 height=484 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitandW3CValidator_BEC8/SampleValidatorResults_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;And when double clicking any of those results you get the details as reported by the W3 Validation Service:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitandW3CValidator_BEC8/SampleValidatorDetails_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitandW3CValidator_BEC8/SampleValidatorDetails_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=SampleValidatorDetails border=0 alt=SampleValidatorDetails src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitandW3CValidator_BEC8/SampleValidatorDetails_thumb.png" width=437 height=484 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitandW3CValidator_BEC8/SampleValidatorDetails_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H2&gt;The Code&lt;/H2&gt;
&lt;P&gt;The code is actually pretty simple, the main class is called &lt;STRONG&gt;SEOW3ValidatorExtension&lt;/STRONG&gt; that derives from &lt;A href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.crawlermodule(VS.90).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.crawlermodule(VS.90).aspx"&gt;CrawlerModule&lt;/A&gt; and overrides the Process method to call the W3C Validation service sending the actual markup in the request, this means that it does not matter if your site is an Intranet or in the Internet, it will work; and for every warning and error that is returned by the Validator it will add a new violation to the SEO report. &lt;/P&gt;
&lt;P&gt;The code looks like this:&lt;/P&gt;
&lt;DIV class=code&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;W3Validator&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;validator&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;W3Validator()&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;W3ValidatorResults&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;results&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;validator.Validate(context.UrlInfo.FileName,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.UrlInfo.ContentTypeNormalized,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.UrlInfo.Response)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;foreach&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(W3ValidatorWarning&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;warning&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;in&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;results.Warnings)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.UrlInfo.AddViolation(CreateWarning(warning))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;foreach&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(W3ValidatorError&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;error&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;in&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;results.Errors)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.UrlInfo.AddViolation(CreateError(error))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt; &lt;/DIV&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I created a helper class W3Validator that basically encapsulates the consumption of the W3C Validation Service, the code is far from what I would like it to be however there are some "interesting" decisions on the way the API is exposed, I would have probably designed the service differently and not return the results formatted in HTML when this is actually an API/WebService that can be presented somewhere else than a browser. So a lot of the code is to just re-format the results to look "decent", but to be honest I did not want to spend too much time on it so everything was put together quite quickly. Also, if you look at the names I used for violations, I did not want to hard-code specific Message IDs and since the Error Message was different for all of them even within the same Message ID, it was not easy to provide better messages. Anyway, overall it is pretty usable and should be a good way to do W3 Validation.&lt;/P&gt;
&lt;P&gt;Note that one of the cool things you get for free is that since these are stored as violations, you can then re-run the report and &lt;A href="http://blogs.msdn.com/carlosag/archive/2009/11/11/iis-seo-toolkit-report-comparison.aspx" mce_href="http://blogs.msdn.com/carlosag/archive/2009/11/11/iis-seo-toolkit-report-comparison.aspx"&gt;use the Compare Report feature to see the progress while fixing them&lt;/A&gt;. Also, since they are stored as part of the report you will not need to keep running the validator over and over again but instead just open it and continue looking at them, as well as analyzing the data in the Reports and Queries, and be able to export them to Excel, etc.&lt;/P&gt;
&lt;P&gt;Hopefully this will give you a good example on some of the interesting things you can achieve with the SEO Toolkit and its extensibility.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10010531" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/jRSWRDcrbX0" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS+Manager/">IIS Manager</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2010/05/10/iis-seo-toolkit-and-w3c-validation-service.aspx</feedburner:origLink></item><item><title>IIS SEO Toolkit Available in 10 Languages</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/lr6sC2bZw3E/iis-seo-toolkit-available-in-10-languages.aspx</link><pubDate>Fri, 09 Apr 2010 06:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9992925</guid><dc:creator>CarlosAg</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9992925</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2010/04/09/iis-seo-toolkit-available-in-10-languages.aspx#comments</comments><description>&lt;P&gt;A couple of months ago I blogged about the &lt;A href="http://blogs.msdn.com/carlosag/archive/2010/02/01/announcing-iis-seo-toolkit-v1-0-1.aspx" target=_blank mce_href="http://blogs.msdn.com/carlosag/archive/2010/02/01/announcing-iis-seo-toolkit-v1-0-1.aspx"&gt;release of the v1.0.1 of the IIS Search Engine Optimization Toolkit&lt;/A&gt;. In March we released the localized versions of the SEO Toolkit so now it is available in 10 languages: English, Japanese, French, Russian, Korean, German, Spanish, Chinese Simplified, Italian and Chinese Traditional.&lt;/P&gt;
&lt;P&gt;Here are all the direct links to download it.&lt;/P&gt;
&lt;TABLE style="BORDER-COLLAPSE: collapse" border=1 cellSpacing=0 cellPadding=3&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM: #4f81bd 0.5pt solid; BORDER-LEFT: #4f81bd 0.5pt solid; BACKGROUND: #4f81bd; COLOR: white; BORDER-TOP: #4f81bd 0.5pt solid; BORDER-RIGHT: #4f81bd 0.5pt solid" width=169&gt;Name&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: #4f81bd 0.5pt solid; BORDER-LEFT: #4f81bd 0.5pt solid; BACKGROUND: #4f81bd; COLOR: white; BORDER-TOP: #4f81bd 0.5pt solid; BORDER-RIGHT: #4f81bd 0.5pt solid" width=100&gt;Language&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM: #4f81bd 0.5pt solid; BORDER-LEFT: #4f81bd 0.5pt solid; BACKGROUND: #4f81bd; COLOR: white; BORDER-TOP: #4f81bd 0.5pt solid; BORDER-RIGHT: #4f81bd 0.5pt solid" width=764&gt;Download URL&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;IIS SEO Toolkit 32bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;english&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;&lt;A title="IIS SEO Toolkit 32 bit english" href="http://download.microsoft.com/download/A/C/A/ACA8D740-A59D-4D25-A2D5-1DCFD1D9A01F/IISSEO_x86.msi" mce_href="http://download.microsoft.com/download/A/C/A/ACA8D740-A59D-4D25-A2D5-1DCFD1D9A01F/IISSEO_x86.msi"&gt;http://download.microsoft.com/download/A/C/A/ACA8D740-A59D-4D25-A2D5-1DCFD1D9A01F/IISSEO_x86.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;IIS SEO Toolkit 64bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;english&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;&lt;A title="IIS SEO Toolkit 64 bit english" href="http://download.microsoft.com/download/A/C/A/ACA8D740-A59D-4D25-A2D5-1DCFD1D9A01F/IISSEO_amd64.msi" mce_href="http://download.microsoft.com/download/A/C/A/ACA8D740-A59D-4D25-A2D5-1DCFD1D9A01F/IISSEO_amd64.msi"&gt;http://download.microsoft.com/download/A/C/A/ACA8D740-A59D-4D25-A2D5-1DCFD1D9A01F/IISSEO_amd64.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;IIS SEO Toolkit 32bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;ja-jp&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;&lt;A title="IIS SEO Toolkit 32 bit japanese" href="http://download.microsoft.com/download/3/6/1/36179752-3497-4C2C-B2C5-9B4FA14EAC3A/IISSEO_x86_ja-JP.msi" mce_href="http://download.microsoft.com/download/3/6/1/36179752-3497-4C2C-B2C5-9B4FA14EAC3A/IISSEO_x86_ja-JP.msi"&gt;http://download.microsoft.com/download/3/6/1/36179752-3497-4C2C-B2C5-9B4FA14EAC3A/IISSEO_x86_ja-JP.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;IIS SEO Toolkit 64bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;ja-jp&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;&lt;A title="IIS SEO Toolkit 64 bit japanese" href="http://download.microsoft.com/download/3/6/1/36179752-3497-4C2C-B2C5-9B4FA14EAC3A/IISSEO_amd64_ja-JP.msi" mce_href="http://download.microsoft.com/download/3/6/1/36179752-3497-4C2C-B2C5-9B4FA14EAC3A/IISSEO_amd64_ja-JP.msi"&gt;http://download.microsoft.com/download/3/6/1/36179752-3497-4C2C-B2C5-9B4FA14EAC3A/IISSEO_amd64_ja-JP.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;IIS SEO Toolkit 32bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;fr-fr&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;&lt;A title="IIS SEO Toolkit 32 bit french" href="http://download.microsoft.com/download/D/C/5/DC576407-7273-412C-9AC8-AE78E4CFE017/IISSEO_x86_fr-FR.msi" mce_href="http://download.microsoft.com/download/D/C/5/DC576407-7273-412C-9AC8-AE78E4CFE017/IISSEO_x86_fr-FR.msi"&gt;http://download.microsoft.com/download/D/C/5/DC576407-7273-412C-9AC8-AE78E4CFE017/IISSEO_x86_fr-FR.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;IIS SEO Toolkit 64bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;fr-fr&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;&lt;A title="IIS SEO Toolkit 64 bit french" href="http://download.microsoft.com/download/D/C/5/DC576407-7273-412C-9AC8-AE78E4CFE017/IISSEO_amd64_fr-FR.msi" mce_href="http://download.microsoft.com/download/D/C/5/DC576407-7273-412C-9AC8-AE78E4CFE017/IISSEO_amd64_fr-FR.msi"&gt;http://download.microsoft.com/download/D/C/5/DC576407-7273-412C-9AC8-AE78E4CFE017/IISSEO_amd64_fr-FR.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;IIS SEO Toolkit 32bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;ru-ru&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;&lt;A title="IIS SEO Toolkit 32 bit russian" href="http://download.microsoft.com/download/8/6/A/86A0BCE1-419F-4550-968E-A8E5A8467B32/IISSEO_x86_ru-RU.msi" mce_href="http://download.microsoft.com/download/8/6/A/86A0BCE1-419F-4550-968E-A8E5A8467B32/IISSEO_x86_ru-RU.msi"&gt;http://download.microsoft.com/download/8/6/A/86A0BCE1-419F-4550-968E-A8E5A8467B32/IISSEO_x86_ru-RU.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;IIS SEO Toolkit 64bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;ru-ru&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;&lt;A title="IIS SEO Toolkit 64 bit russian" href="http://download.microsoft.com/download/8/6/A/86A0BCE1-419F-4550-968E-A8E5A8467B32/IISSEO_amd64_ru-RU.msi" mce_href="http://download.microsoft.com/download/8/6/A/86A0BCE1-419F-4550-968E-A8E5A8467B32/IISSEO_amd64_ru-RU.msi"&gt;http://download.microsoft.com/download/8/6/A/86A0BCE1-419F-4550-968E-A8E5A8467B32/IISSEO_amd64_ru-RU.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;IIS SEO Toolkit 32bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;ko-kr&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;&lt;A title="IIS SEO Toolkit 32 bit korean" href="http://download.microsoft.com/download/F/8/6/F8654213-40C6-4706-9128-536A6A4BC570/IISSEO_x86_ko-KR.msi" mce_href="http://download.microsoft.com/download/F/8/6/F8654213-40C6-4706-9128-536A6A4BC570/IISSEO_x86_ko-KR.msi"&gt;http://download.microsoft.com/download/F/8/6/F8654213-40C6-4706-9128-536A6A4BC570/IISSEO_x86_ko-KR.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;IIS SEO Toolkit 64bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;ko-kr&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;&lt;A title="IIS SEO Toolkit 64 bit korean" href="http://download.microsoft.com/download/F/8/6/F8654213-40C6-4706-9128-536A6A4BC570/IISSEO_amd64_ko-KR.msi" mce_href="http://download.microsoft.com/download/F/8/6/F8654213-40C6-4706-9128-536A6A4BC570/IISSEO_amd64_ko-KR.msi"&gt;http://download.microsoft.com/download/F/8/6/F8654213-40C6-4706-9128-536A6A4BC570/IISSEO_amd64_ko-KR.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;IIS SEO Toolkit 32bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;de-de&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;&lt;A title="IIS SEO Toolkit 32 bit german" href="http://download.microsoft.com/download/1/8/1/1813318E-6358-4BDC-B148-C1826A74994D/IISSEO_x86_de-DE.msi" mce_href="http://download.microsoft.com/download/1/8/1/1813318E-6358-4BDC-B148-C1826A74994D/IISSEO_x86_de-DE.msi"&gt;http://download.microsoft.com/download/1/8/1/1813318E-6358-4BDC-B148-C1826A74994D/IISSEO_x86_de-DE.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;IIS SEO Toolkit 64bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;de-de&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;&lt;A title="IIS SEO Toolkit 64 bit german" href="http://download.microsoft.com/download/1/8/1/1813318E-6358-4BDC-B148-C1826A74994D/IISSEO_amd64_de-DE.msi" mce_href="http://download.microsoft.com/download/1/8/1/1813318E-6358-4BDC-B148-C1826A74994D/IISSEO_amd64_de-DE.msi"&gt;http://download.microsoft.com/download/1/8/1/1813318E-6358-4BDC-B148-C1826A74994D/IISSEO_amd64_de-DE.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;IIS SEO Toolkit 32bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;es-es&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;&lt;A title="IIS SEO Toolkit 32 bit spanish" href="http://download.microsoft.com/download/1/6/6/166C82C0-4B72-4282-9A86-47C85CE7E20C/IISSEO_x86_es-ES.msi" mce_href="http://download.microsoft.com/download/1/6/6/166C82C0-4B72-4282-9A86-47C85CE7E20C/IISSEO_x86_es-ES.msi"&gt;http://download.microsoft.com/download/1/6/6/166C82C0-4B72-4282-9A86-47C85CE7E20C/IISSEO_x86_es-ES.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;IIS SEO Toolkit 64bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;es-es&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;&lt;A title="IIS SEO Toolkit 64 bit spanish" href="http://download.microsoft.com/download/1/6/6/166C82C0-4B72-4282-9A86-47C85CE7E20C/IISSEO_amd64_es-ES.msi" mce_href="http://download.microsoft.com/download/1/6/6/166C82C0-4B72-4282-9A86-47C85CE7E20C/IISSEO_amd64_es-ES.msi"&gt;http://download.microsoft.com/download/1/6/6/166C82C0-4B72-4282-9A86-47C85CE7E20C/IISSEO_amd64_es-ES.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;IIS SEO Toolkit 32bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;zh-cn&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;&lt;A title="IIS SEO Toolkit 32 bit chinese" href="http://download.microsoft.com/download/D/6/C/D6C6DE59-2EE8-4DD3-9E30-739A5BE42F3C/IISSEO_x86_zh-CN.msi" mce_href="http://download.microsoft.com/download/D/6/C/D6C6DE59-2EE8-4DD3-9E30-739A5BE42F3C/IISSEO_x86_zh-CN.msi"&gt;http://download.microsoft.com/download/D/6/C/D6C6DE59-2EE8-4DD3-9E30-739A5BE42F3C/IISSEO_x86_zh-CN.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;IIS SEO Toolkit 64bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;zh-cn&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;&lt;A title="IIS SEO Toolkit 64 bit chinese" href="http://download.microsoft.com/download/D/6/C/D6C6DE59-2EE8-4DD3-9E30-739A5BE42F3C/IISSEO_amd64_zh-CN.msi" mce_href="http://download.microsoft.com/download/D/6/C/D6C6DE59-2EE8-4DD3-9E30-739A5BE42F3C/IISSEO_amd64_zh-CN.msi"&gt;http://download.microsoft.com/download/D/6/C/D6C6DE59-2EE8-4DD3-9E30-739A5BE42F3C/IISSEO_amd64_zh-CN.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;IIS SEO Toolkit 32bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;it-it&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;&lt;A title="IIS SEO Toolkit 32 bit italian" href="http://download.microsoft.com/download/6/1/F/61FC149C-A950-40F4-9795-F3D4F2115721/IISSEO_x86_it-IT.msi" mce_href="http://download.microsoft.com/download/6/1/F/61FC149C-A950-40F4-9795-F3D4F2115721/IISSEO_x86_it-IT.msi"&gt;http://download.microsoft.com/download/6/1/F/61FC149C-A950-40F4-9795-F3D4F2115721/IISSEO_x86_it-IT.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;IIS SEO Toolkit 64bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;it-it&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;&lt;A title="IIS SEO Toolkit 64 bit italian" href="http://download.microsoft.com/download/6/1/F/61FC149C-A950-40F4-9795-F3D4F2115721/IISSEO_amd64_it-IT.msi" mce_href="http://download.microsoft.com/download/6/1/F/61FC149C-A950-40F4-9795-F3D4F2115721/IISSEO_amd64_it-IT.msi"&gt;http://download.microsoft.com/download/6/1/F/61FC149C-A950-40F4-9795-F3D4F2115721/IISSEO_amd64_it-IT.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;IIS SEO Toolkit 32bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;zh-tw&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #4f81bd 1pt solid"&gt;&lt;A title="IIS SEO Toolkit 32 bit chinese" href="http://download.microsoft.com/download/6/1/F/61FC149C-A950-40F4-9795-F3D4F2115721/IISSEO_x86_zh-TW.msi" mce_href="http://download.microsoft.com/download/6/1/F/61FC149C-A950-40F4-9795-F3D4F2115721/IISSEO_x86_zh-TW.msi"&gt;http://download.microsoft.com/download/6/1/F/61FC149C-A950-40F4-9795-F3D4F2115721/IISSEO_x86_zh-TW.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;IIS SEO Toolkit 64bit&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;zh-tw&lt;/TD&gt;
&lt;TD style="BORDER-TOP: #dddddd 0.5pt solid"&gt;&lt;A title="IIS SEO Toolkit 64 bit chinese" href="http://download.microsoft.com/download/6/4/0/64067386-3BF6-493E-B7DB-4423839C316B/IISSEO_amd64_zh-TW.msi" mce_href="http://download.microsoft.com/download/6/4/0/64067386-3BF6-493E-B7DB-4423839C316B/IISSEO_amd64_zh-TW.msi"&gt;http://download.microsoft.com/download/6/4/0/64067386-3BF6-493E-B7DB-4423839C316B/IISSEO_amd64_zh-TW.msi&lt;/A&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Here is a screenshot of how the SEO Toolkit running in Spanish.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/89fc8a2f0800_127FC/seo-toolkit-in-spanish_4.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/89fc8a2f0800_127FC/seo-toolkit-in-spanish_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=seo-toolkit-in-spanish border=0 alt=seo-toolkit-in-spanish src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/89fc8a2f0800_127FC/seo-toolkit-in-spanish_thumb_1.png" width=644 height=465 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/89fc8a2f0800_127FC/seo-toolkit-in-spanish_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;If you want to read the download files in the Microsoft Download Center you can click the links below:&lt;/P&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=ja&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=ja&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c"&gt;IIS Search Engine Optimization Toolkit - 32bit ja-jp&lt;/A&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=fr&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=fr&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c"&gt;IIS Search Engine Optimization Toolkit - 32bit fr-fr&lt;/A&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=ru&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=ru&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c"&gt;IIS Search Engine Optimization Toolkit - 32bit ru-ru&lt;/A&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=ko&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=ko&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c"&gt;IIS Search Engine Optimization Toolkit - 32bit ko-kr&lt;/A&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=de&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=de&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c"&gt;IIS Search Engine Optimization Toolkit - 32bit de-de&lt;/A&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=es&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=es&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c"&gt;IIS Search Engine Optimization Toolkit - 32bit es-es&lt;/A&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c"&gt;IIS Search Engine Optimization Toolkit - 32bit zh-cn&lt;/A&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=it&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c"&gt;IIS Search Engine Optimization Toolkit - 32bit it-it&lt;/A&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&amp;amp;FamilyID=d8c32f95-2d50-43a1-99b9-fa8e5bbfc34c"&gt;IIS Search Engine Optimization Toolkit - 32bit zh-tw&lt;/A&gt; 
&lt;P&gt;To learn more about the SEO Toolkit you can visit:&lt;/P&gt;
&lt;P&gt;&lt;A title=http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx href="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx" mce_href="http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx"&gt;http://blogs.msdn.com/carlosag/archive/tags/SEO/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.iis.net/expand/SEOToolkit" mce_href="http://www.iis.net/expand/SEOToolkit"&gt;http://www.iis.net/expand/SEOToolkit&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;And for any help or provide us feedback you can do that in the &lt;A href="http://forums.iis.net/1162.aspx" mce_href="http://forums.iis.net/1162.aspx"&gt;IIS.NET SEO Forum&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9992925" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/lr6sC2bZw3E" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2010/04/09/iis-seo-toolkit-available-in-10-languages.aspx</feedburner:origLink></item><item><title>Setting up a Reverse Proxy using IIS, URL Rewrite and ARR</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/9LLB3SRrSB8/setting-up-a-reverse-proxy-using-iis-url-rewrite-and-arr.aspx</link><pubDate>Fri, 02 Apr 2010 02:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9989325</guid><dc:creator>CarlosAg</dc:creator><slash:comments>15</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9989325</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2010/04/02/setting-up-a-reverse-proxy-using-iis-url-rewrite-and-arr.aspx#comments</comments><description>&lt;P&gt;Today there &lt;A href="http://forums.iis.net/p/1166442/1939293.aspx" target=_blank mce_href="http://forums.iis.net/p/1166442/1939293.aspx"&gt;was a question in the IIS.net Forums&lt;/A&gt; asking how to expose two different Internet sites from another site making them look like if they were subdirectories in the main site.&lt;/P&gt;
&lt;P&gt;So for example the goal was to have a site: &lt;A href="http://www.site.com/" mce_href="http://www.site.com"&gt;www.site.com&lt;/A&gt; expose a &lt;A href="http://www.site.com/company1" mce_href="http://www.site.com/company1"&gt;www.site.com/company1&lt;/A&gt;&amp;nbsp; and a &lt;A href="http://www.site.com/company2" mce_href="http://www.site.com/company2"&gt;www.site.com/company2&lt;/A&gt; and have the content from “www.company1.com” served for the first one and “www.company2.com” served in the second one. Furthermore we would like to have the responses cached in the server for performance reasons.&amp;nbsp;The following image shows a simple diagram of this:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 573px; HEIGHT: 280px" title="Reverse Proxy Sample" alt="Reverse Proxy Sample" src="http://www.carlosag.net/images/ReverseProxySample.jpg" width=573 height=280 mce_src="http://www.carlosag.net/images/ReverseProxySample.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This sounds easy since its just about routing or proxying every single request to the correct servers, right? Wrong!!! If it only it was that easy. Turns out the most challenging thing is that in this case &lt;STRONG&gt;we are modifying the structure of the underlying URLs and the original layout in the servers &lt;/STRONG&gt;which makes relative paths break and of course images, Stylesheets (css), javascripts and other resources are not shown correctly.&lt;/P&gt;
&lt;P&gt;To try to clarify this, imagine that a user requests using his browser the page at &lt;A href="http://www.site.com/company1/default.aspx" mce_href="http://www.site.com/company1/default.aspx"&gt;http://www.site.com/company1/default.aspx&lt;/A&gt;, and so based on the specification above the request is proxied/routed to &lt;A href="http://www.company1.com/default.aspx" mce_href="http://www.company1.com/default.aspx"&gt;http://www.company1.com/default.aspx&lt;/A&gt; on the server-side. So far so good, however, imagine that the markup returned by this HTML turns out to have an image tag like “&lt;EM&gt;&amp;lt;img src=/some-image.png /&amp;gt;&lt;/EM&gt;”, well the problem is that now the browser will resolve that relative path using the base path on the original request he made which was &lt;A href="http://www.site.com/company1/default.aspx" mce_href="http://www.site.com/company1/default.aspx"&gt;http://www.site.com/company1/default.aspx&lt;/A&gt; resulting in a request for the image at &lt;A href="http://www.site.com/some-image.png" mce_href="http://www.site.com/some-image.png"&gt;http://www.site.com/some-image.png&lt;/A&gt; instead of the right “company1” folder that would be &lt;A href="http://www.site.com/company1/some-image.png" mce_href="http://www.site.com/company1/some-image.png"&gt;http://www.site.com/company1/some-image.png&lt;/A&gt; .&lt;/P&gt;
&lt;P&gt;Do you see it? Basically the problem is that any relative path or for that matter absolute paths as well need to be translated to the new URL structure imposed by the original goal.&lt;/P&gt;
&lt;P&gt;So how do we do it then?&lt;/P&gt;
&lt;H2&gt;Enter URL Rewrite 2.0 and Application Request Routing&lt;/H2&gt;
&lt;P&gt;URL Rewrite 2.0 includes the ability to rewrite the content of a response as it is getting served back to the client which will allow us to rewrite those links without having to touch the actual application.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Software Required:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;IIS 7.0 or IIS 7.5 (included in Windows Vista, Windows 2008, Windows 7 or Windows 2008 R2).&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.iis.net/expand/URLRewrite" target=_blank mce_href="http://www.iis.net/expand/URLRewrite"&gt;Install URL Rewrite 2.0&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.iis.net/expand/ApplicationRequestRouting" target=_blank mce_href="http://www.iis.net/expand/ApplicationRequestRouting"&gt;Install Application Request Routing&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;BR&gt;Steps&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;The first thing you need to do is enable Proxy support in ARR. &lt;/LI&gt;
&lt;OL&gt;
&lt;LI&gt;To do that just launch IIS Manager and click the server node in the tree view. &lt;/LI&gt;
&lt;LI&gt;Double click the “Application Request Routing Cache” icon&lt;/LI&gt;
&lt;LI&gt;Select the “Server Proxy Settings…” task in the Actions panel&lt;/LI&gt;
&lt;LI&gt;And Make sure that “Enable Proxy” checkbox is marked. What this will do is allow any request in the server that is rewritten to a server that is not the local machine will be routed to the right place automatically without any further configuration.&lt;/LI&gt;&lt;/OL&gt;
&lt;LI&gt;Configure URL Rewrite to route the right folders and their requests to the right site. But rather than bothering you with UI steps I will show you the configuration and then explain step by step what each piece is doing. &lt;/LI&gt;
&lt;LI&gt;Note that for this post I will only take care of Company1, but you can imagine the same steps apply for Company2, and to test this you can just save the configuration file below as web.config and save it in your inetpub\wwwroot\&amp;nbsp; or in any other site root and you can test it.&lt;/LI&gt;&lt;/OL&gt;
&lt;DIV class=code&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;?xml&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; version&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="1.0"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; encoding&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="UTF-8"?&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;configuration&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;system.webServer&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;rewrite&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;rules&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;rule&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Route the requests for Company1"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; stopProcessing&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="true"&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;match&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; url&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="^company1/(.*)"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;conditions&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;add&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; input&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="{CACHE_URL}"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; pattern&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="^(https?)://"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;conditions&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;action&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; type&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Rewrite"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; url&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="{C:1}://www.company1.com/{R:1}"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;serverVariables&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;set&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="HTTP_ACCEPT_ENCODING"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; value&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=""&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;serverVariables&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;rule&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;rules&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;outboundRules&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;rule&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="ReverseProxyOutboundRule1"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; preCondition&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="ResponseIsHtml1"&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;match&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; filterByTags&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; pattern&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="^http(s)?://www.company1.com/(.*)"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;action&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; type&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Rewrite"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; value&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="/company1/{R:2}"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;rule&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;rule&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="RewriteRelativePaths"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; preCondition&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="ResponseIsHtml1"&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;match&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; filterByTags&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; pattern&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="^/(.*)"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; negate&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="false"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;action&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; type&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Rewrite"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; value&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="/company1/{R:1}"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;rule&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;preConditions&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;preCondition&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="ResponseIsHtml1"&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;add&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; input&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="{RESPONSE_CONTENT_TYPE}"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; pattern&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="^text/html"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;preCondition&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;preConditions&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;outboundRules&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;rewrite&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;system.webServer&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;configuration&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt; &lt;/DIV&gt;
&lt;H2&gt;Setup the Routing&lt;/H2&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;rule&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Route the requests for Company1"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; stopProcessing&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="true"&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;match&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; url&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="^company1/(.*)"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;conditions&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;add&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; input&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="{CACHE_URL}"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; pattern&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="^(https?)://"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;conditions&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;action&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; type&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Rewrite"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; url&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="{C:1}://www.company1.com/{R:1}"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;serverVariables&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;set&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="HTTP_ACCEPT_ENCODING"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; value&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=""&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;serverVariables&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;rule&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt; 
&lt;P&gt;The first rule is an inbound rewrite rule that basically captures all the requests to the root folder /company1/*, so if using Default Web Site, anything going to &lt;A href="http://localhost/company1/" mce_href="http://localhost/company1/"&gt;http://localhost/company1/&lt;/A&gt;* will be matched by this rule and it will rewrite it to &lt;A href="http://www.company1.com/" mce_href="http://www.company1.com"&gt;www.company1.com&lt;/A&gt; respecting the HTTP vs HTTPS traffic. &lt;/P&gt;
&lt;P&gt;One thing to highlight which is what took me a bit of time is the “serverVariables” entry in that rule that basically is overwriting the Accept-Encoding header, the reason I do this is because if you do not remove that header then the response will likely be compressed (Gzip or deflate) and Output Rewriting is not supported on that case, and you will end up with an error message like:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;HTTP Error 500.52 - URL Rewrite Module Error. &lt;BR&gt;Outbound rewrite rules cannot be applied when the content of the HTTP response is encoded ("gzip").&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Also note that to be able to use this feature for security reasons you need to explicitly enable this by allowing the server variable. &lt;A href="http://learn.iis.net/page.aspx/686/setting-http-request-headers-and-iis-server-variables/" target=_blank mce_href="http://learn.iis.net/page.aspx/686/setting-http-request-headers-and-iis-server-variables/"&gt;See enabling server variables here&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;Outbound Rewriting to fix the Links&lt;/H2&gt;
&lt;P&gt;The last two rules just rewrite the links and scripts and other resources so that the URLs are translated to the right structure. The first one rewrites absolute paths, and the last one rewrites the relative paths. Note that if you use relative paths using “..” this will not work, but you can easily fix the rule above, I was too lazy to do that and since I never use those when I create a site it works for me :)&lt;/P&gt;
&lt;H2&gt;Setting up Caching for ARR&lt;/H2&gt;
&lt;P&gt;A huge added value of using ARR is that now we can with a couple of clicks enable disk caching so that the requests are cached locally in the &lt;A href="http://www.site.com/" mce_href="http://www.site.com"&gt;www.site.com&lt;/A&gt;, so that not every single request ends up paying the price to go to the backend servers. &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;To do that just launch IIS Manager and click the server node in the tree view.&lt;/LI&gt;
&lt;LI&gt;Double click the “Application Request Routing Cache” icon&lt;/LI&gt;
&lt;LI&gt;Select the “Add Drive…” task in the Actions panel. &lt;/LI&gt;
&lt;LI&gt;Specify a directory where you want to keep your cache. Note that this can be any subfolder in your system.&lt;/LI&gt;
&lt;LI&gt;Make sure that “Enable Disk Cache” checkbox is marked in the Server Proxy Settings mentioned above. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;As easy as that now you will see caching working and your site will act as a container of other servers in the internet. Pretty cool hah! :)&lt;/P&gt;
&lt;P&gt;So in this post we saw how with literally few lines of XML, URL Rewrite and ARR we were able to enable a proxy/routing scenario with the ability to rewrite links and furthermore with caching support.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9989325" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/9LLB3SRrSB8" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/URL+Rewrite/">URL Rewrite</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/ARR/">ARR</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2010/04/02/setting-up-a-reverse-proxy-using-iis-url-rewrite-and-arr.aspx</feedburner:origLink></item><item><title>SEO made easy with IIS URL Rewrite 2.0 SEO templates</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/7G1xKibGTHM/seo-made-easy-with-iis-url-rewrite-templates.aspx</link><pubDate>Thu, 01 Apr 2010 00:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9988483</guid><dc:creator>CarlosAg</dc:creator><slash:comments>7</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9988483</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2010/04/01/seo-made-easy-with-iis-url-rewrite-templates.aspx#comments</comments><description>&lt;P&gt;A few weeks ago my team released the version 2.0 of the &lt;A href="http://www.iis.net/expand/URLRewrite" target=_blank mce_href="http://www.iis.net/expand/URLRewrite"&gt;URL Rewrite for IIS&lt;/A&gt;. URL Rewrite is probably the most powerful Rewrite engine for Web Applications. It gives you many features including &lt;STRONG&gt;Inbound Rewriting&lt;/STRONG&gt; (ie. Rewrite the URL, Redirect to another URL, Abort Requests, use of Maps, and more), and in Version 2.0 it also includes &lt;STRONG&gt;Outbound Rewriting &lt;/STRONG&gt;so that you can rewrite URLs or any markup as the content is being sent back even if its generated using PHP, ASP.NET or any other technology.&lt;/P&gt;
&lt;P&gt;It also includes a very powerful User Interface that allows you to test your regular expressions and even better it includes a set of templates for common types of Rules. Some of those rules are incredibly valuable for SEO (Search Engine Optimization) purposes. The SEO rules are:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;Enforce Lowercase URLs.&lt;/STRONG&gt; It will make sure that every URL is used with only lower case and if not it will redirect with a 301 to the lower-case version.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Enforce a Canonical Domain Name.&lt;/STRONG&gt; It will help you specify what domain name you want to use for your site and it will redirect the traffic to the right host name.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Append or Remove the Trailing Slash.&lt;/STRONG&gt; It will make sure your request either include or not include the trailing slash depending on your preference.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/SEOmadeeasywithIISURLRewri.0SEOtemplates_F3F5/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/SEOmadeeasywithIISURLRewri.0SEOtemplates_F3F5/image_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/SEOmadeeasywithIISURLRewri.0SEOtemplates_F3F5/image_thumb.png" width=694 height=463 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/SEOmadeeasywithIISURLRewri.0SEOtemplates_F3F5/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;For more information on the SEO Templates look at: &lt;A href="http://learn.iis.net/page.aspx/806/seo-rule-templates/" mce_href="http://learn.iis.net/page.aspx/806/seo-rule-templates/"&gt;http://learn.iis.net/page.aspx/806/seo-rule-templates/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;What is really cool is that you can use the &lt;A href="http://www.iis.net/expand/SEOToolkit" target=_blank mce_href="http://www.iis.net/expand/SEOToolkit"&gt;SEO Toolkit&lt;/A&gt; to run it against your application and you probably will get some violations around lower-case, or canonical domains, etc. And after seeing those you can use URL Rewrite 2.0 to fix them with one click.&lt;/P&gt;
&lt;P&gt;I have personally used it in my Web site, try the following three URLs and all of them will be redirected to the canonical form (&lt;A title=http://www.carlosag.net/Tools/CodeTranslator/ href="http://www.carlosag.net/Tools/CodeTranslator/" mce_href="http://www.carlosag.net/Tools/CodeTranslator/"&gt;http://www.carlosag.net/Tools/CodeTranslator/&lt;/A&gt;) and you will see URL Rewrite in action:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;A title=http://www.carlosag.net/Tools/CodeTranslator/ href="http://www.carlosag.net/Tools/CodeTranslator/" mce_href="http://www.carlosag.net/Tools/CodeTranslator/"&gt;http://www.carlosag.net/Tools/CodeTranslator/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A title=http://www.carlosag.net/Tools/CodeTranslator/ href="http://carlosag.net/Tools/CodeTranslator/" mce_href="http://carlosag.net/Tools/CodeTranslator/"&gt;http://carlosag.net/Tools/CodeTranslator/&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://www.carlosag.net/Tools/CodeTranslator" mce_href="http://www.carlosag.net/Tools/CodeTranslator"&gt;http://www.carlosag.net/Tools/CodeTranslator&lt;/A&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Note that at the end those templates just translate to web.config settings that become part of your application that can be XCOPY with it. This works with ASP.NET, PHP, or any other server technology including static files. Below is the output of the Canonical Host Name rule which I use on my Web site’s web.config.&lt;/P&gt;
&lt;DIV class=code&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;?xml&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; version&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="1.0"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; encoding&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="UTF-8"?&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;configuration&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;system.webServer&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;rewrite&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;rules&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;rule&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="CanonicalHostNameRule1"&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;match&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; url&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="(.*)"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;conditions&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;add&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; input&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="{HTTP_HOST}"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; pattern&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="^www\.carlosag\.net$"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; negate&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="true"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;conditions&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;action&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; type&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Redirect"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; url&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="http://www.carlosag.net/{R:1}"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&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;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;rule&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;rules&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;rewrite&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;system.webServer&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;configuration&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt; &lt;/DIV&gt;
&lt;P&gt;There are many more features that I could talk, but for now this was just a quick SEO related post.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9988483" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/7G1xKibGTHM" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/URL+Rewrite/">URL Rewrite</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2010/04/01/seo-made-easy-with-iis-url-rewrite-templates.aspx</feedburner:origLink></item><item><title>Analyze your IIS Log Files - Favorite Log Parser Queries</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/rj5A2fTAg54/analyze-your-iis-log-files-favorite-log-parser-queries.aspx</link><pubDate>Thu, 25 Mar 2010 22:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9985383</guid><dc:creator>CarlosAg</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9985383</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2010/03/25/analyze-your-iis-log-files-favorite-log-parser-queries.aspx#comments</comments><description>&lt;P&gt;The other day I was asked if I knew about a tool that would allow users to easily analyze the IIS Log Files, to process and look for specific data that could easily be automated. My recommendation was that if they were comfortable with using a SQL-like language that they should use &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&amp;amp;displaylang=en"&gt;Log Parser&lt;/A&gt;. Log Parser is a very powerful tool that provides a generic SQL-like language on top of many types of data like IIS Logs, Event Viewer entries, XML files, CSV files, File System and others; and it allows you to export the result of the queries to many output formats such as CSV (Comma-Separated Values, etc), XML, SQL Server, Charts and others; and it works well with IIS 5, 6, 7 and 7.5.&lt;/P&gt;
&lt;P&gt;To use it you just need to install it and use the LogParser.exe that is found in its installation directory (on my x64 machine it is located at: C:\Program Files (x86)\Log Parser 2.2). &lt;/P&gt;
&lt;P&gt;I also thought on sharing some of my favorite queries. To run them, just execute LogParser.exe and make sure to specify that the input is an IIS Log file (-i:W3C) and for ease of use in this case we will export to a CSV file that can be then opened in Excel (-o:CSV) for further analysis:&lt;/P&gt;
&lt;DIV class=code&gt;&lt;FONT color=#000000&gt;&lt;STRONG&gt;LogParser.exe&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;-i:W3C&lt;/FONT&gt;&lt;FONT color=#808080&gt; "&lt;EM&gt;Query-From-The-Table-Below&lt;/EM&gt;" &lt;/FONT&gt;&lt;FONT color=#000000&gt;-o:CSV&lt;/FONT&gt; &lt;/DIV&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR style="BACKGROUND-COLOR: #dddddd"&gt;
&lt;TD vAlign=top width="20%"&gt;&lt;STRONG&gt;Purpose&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD vAlign=top width="40%"&gt;&lt;STRONG&gt;Query&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD vAlign=top width="40%"&gt;&lt;STRONG&gt;Sample Output&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=110&gt;Number of Hits per Client IP, including a Reverse DNS lookup (&lt;STRONG&gt;SLOW&lt;/STRONG&gt;)&lt;/TD&gt;
&lt;TD vAlign=top width=265&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;c-ip&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Machine,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;REVERSEDNS(c-ip)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;Name&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;COUNT(*)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;c:\inetpub\logs\LogFiles\W3SVC1\*&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;GROUP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Machine&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;ORDER&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;DESC&lt;/FONT&gt; &lt;/TD&gt;
&lt;TD vAlign=top width=229&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=64&gt;Machine&lt;/TD&gt;
&lt;TD width=64&gt;Name&lt;/TD&gt;
&lt;TD width=64&gt;Hits&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;::1&lt;/TD&gt;
&lt;TD&gt;CARLOSAGDEV&lt;/TD&gt;
&lt;TD&gt;57&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;127.0.0.1&lt;/TD&gt;
&lt;TD&gt;MACHINE1&lt;/TD&gt;
&lt;TD&gt;28&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;127.X.X.X&lt;/TD&gt;
&lt;TD&gt;MACHINE2&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=110&gt;Top 25 File Types&lt;/TD&gt;
&lt;TD vAlign=top width=265&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;TOP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;25&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;EXTRACT_EXTENSION(cs-uri-stem)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Extension,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;COUNT(*)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;c:\inetpub\logs\LogFiles\W3SVC1\*&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;GROUP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Extension&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;ORDER&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;DESC&lt;/FONT&gt; &lt;/TD&gt;
&lt;TD vAlign=top width=229&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=64&gt;Extension&lt;/TD&gt;
&lt;TD width=64&gt;Hits&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;gif&lt;/TD&gt;
&lt;TD&gt;52127&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;bmp&lt;/TD&gt;
&lt;TD&gt;20377&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;axd&lt;/TD&gt;
&lt;TD&gt;10321&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;txt&lt;/TD&gt;
&lt;TD&gt;460&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;htm&lt;/TD&gt;
&lt;TD&gt;362&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=110&gt;Top 25 URLs&lt;/TD&gt;
&lt;TD vAlign=top width=265&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;TOP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;25&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;cs-uri-stem&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;as&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Url,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;COUNT(*)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;c:\inetpub\logs\LogFiles\W3SVC1\*&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;GROUP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;cs-uri-stem&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;ORDER&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;By&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;DESC&lt;/FONT&gt; &lt;/TD&gt;
&lt;TD vAlign=top width=229&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=64&gt;Url&lt;/TD&gt;
&lt;TD width=64&gt;Hits&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;/WebResource.axd&lt;/TD&gt;
&lt;TD&gt;10318&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;/favicon.ico&lt;/TD&gt;
&lt;TD&gt;8523&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;/Tools/CodeTranslator/Translate.ashx&lt;/TD&gt;
&lt;TD&gt;6519&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;/App_Themes/Silver/carlosag.css&lt;/TD&gt;
&lt;TD&gt;5898&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;/images/arrow.gif&lt;/TD&gt;
&lt;TD&gt;5720&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=110&gt;Number of hits per hour for the month of March&lt;/TD&gt;
&lt;TD vAlign=top width=265&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;QUANTIZE(TO_LOCALTIME(TO_TIMESTAMP(date,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;time)),&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;3600&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;AS&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hour,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;COUNT(*)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;AS&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;c:\inetpub\logs\LogFiles\W3SVC1\*&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;WHERE&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;date&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;'2010-03-01' &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;and&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;date&amp;lt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;'2010-04-01'&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;Group&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;By&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hour&lt;/FONT&gt; &lt;/TD&gt;
&lt;TD vAlign=top width=229&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=71&gt;Hour&lt;/TD&gt;
&lt;TD width=83&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width=64&gt;Hits&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=71&gt;3/3/2010&lt;/TD&gt;
&lt;TD width=83&gt;10:00:00&lt;/TD&gt;
&lt;TD&gt;33&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=71&gt;3/3/2010&lt;/TD&gt;
&lt;TD width=83&gt;11:00:00&lt;/TD&gt;
&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=71&gt;3/3/2010&lt;/TD&gt;
&lt;TD width=83&gt;12:00:00&lt;/TD&gt;
&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=110&gt;Number of hits per Method (GET, POST, etc)&lt;/TD&gt;
&lt;TD vAlign=top width=265&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;cs-method&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Method,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;COUNT(*)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;c:\inetpub\logs\LogFiles\W3SVC1\*&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;GROUP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Method&lt;/FONT&gt; &lt;/TD&gt;
&lt;TD vAlign=top width=229&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=64&gt;Method&lt;/TD&gt;
&lt;TD width=64&gt;Hits&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;GET&lt;/TD&gt;
&lt;TD&gt;133566&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;POST&lt;/TD&gt;
&lt;TD&gt;10901&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;HEAD&lt;/TD&gt;
&lt;TD&gt;568&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;OPTIONS&lt;/TD&gt;
&lt;TD&gt;11&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;PROPFIND&lt;/TD&gt;
&lt;TD&gt;18&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=110&gt;Number of requests made by user&lt;/TD&gt;
&lt;TD vAlign=top width=265&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;TOP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;25&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;cs-username&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;User&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;COUNT(*)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;as&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;c:\inetpub\logs\LogFiles\W3SVC1\*&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;WHERE&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;User&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;Is&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;Not&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;Null&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;GROUP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;User&lt;/FONT&gt; &lt;/TD&gt;
&lt;TD vAlign=top width=229&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=64&gt;User&lt;/TD&gt;
&lt;TD width=64&gt;Count&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Administrator&lt;/TD&gt;
&lt;TD&gt;566&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Guest&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=110&gt;Extract Values from Query String (d and t) and use them for Aggregation&lt;/TD&gt;
&lt;TD vAlign=top width=265&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;TOP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;25&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;EXTRACT_VALUE(cs-uri-query,&lt;/FONT&gt;&lt;FONT color=#808080&gt;'d'&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;as&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Query_D,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;EXTRACT_VALUE(cs-uri-query,&lt;/FONT&gt;&lt;FONT color=#808080&gt;'t'&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;as&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Query_T,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;COUNT(*)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;c:\inetpub\logs\LogFiles\W3SVC1\*&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;WHERE&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Query_D&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;IS&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;NOT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;NULL&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;GROUP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Query_D,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Query_T&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;ORDER&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;By&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;DESC&lt;/FONT&gt; &lt;/TD&gt;
&lt;TD vAlign=top width=229&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=165&gt;Query_D&lt;/TD&gt;
&lt;TD width=103&gt;Query_T&lt;/TD&gt;
&lt;TD width=64&gt;Hits&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=165&gt;Value in Query1&lt;/TD&gt;
&lt;TD width=103&gt;Value in T1&lt;/TD&gt;
&lt;TD&gt;1556&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=165&gt;Value in Query2&lt;/TD&gt;
&lt;TD width=103&gt;Value in T2&lt;/TD&gt;
&lt;TD&gt;938&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=165&gt;Value in Query3&lt;/TD&gt;
&lt;TD width=103&gt;Value in T3&lt;/TD&gt;
&lt;TD&gt;877&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width=165&gt;Value in Query4&lt;/TD&gt;
&lt;TD width=103&gt;Value in T4&lt;/TD&gt;
&lt;TD&gt;768&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=110&gt;Find the Slowest 25 URLs (in average) in the site&lt;/TD&gt;
&lt;TD vAlign=top width=265&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;TOP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;25&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;cs-uri-stem&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;as&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;URL,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;MAX(time-taken)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Max,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;MIN(time-taken)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Min,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;Avg&lt;/FONT&gt;&lt;FONT color=#000000&gt;(time-taken)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Average&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;c:\inetpub\logs\LogFiles\W3SVC1\*&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;GROUP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;URL&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;ORDER&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;By&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Average&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;DESC&lt;/FONT&gt; &lt;/TD&gt;
&lt;TD vAlign=top width=229&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=191&gt;URL&lt;/TD&gt;
&lt;TD width=77&gt;Max&lt;/TD&gt;
&lt;TD width=64&gt;Min&lt;/TD&gt;
&lt;TD width=64&gt;Average&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;/Test/Default.aspx&lt;/TD&gt;
&lt;TD&gt;23215&lt;/TD&gt;
&lt;TD&gt;23215&lt;/TD&gt;
&lt;TD&gt;23215&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;/WebSite/Default.aspx&lt;/TD&gt;
&lt;TD&gt;5757&lt;/TD&gt;
&lt;TD&gt;2752&lt;/TD&gt;
&lt;TD&gt;4178&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;/Remote2008.jpg&lt;/TD&gt;
&lt;TD&gt;3510&lt;/TD&gt;
&lt;TD&gt;3510&lt;/TD&gt;
&lt;TD&gt;3510&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;/wordpress/&lt;/TD&gt;
&lt;TD&gt;6541&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;3271&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;/RemoteVista.jpg&lt;/TD&gt;
&lt;TD&gt;3314&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;1658&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=110&gt;List the count of each Status and Substatus code&lt;/TD&gt;
&lt;TD vAlign=top width=265&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;TOP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;25&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;STRCAT(TO_STRING(sc-status),&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;STRCAT(&lt;/FONT&gt;&lt;FONT color=#808080&gt;'.'&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;TO_STRING(sc-substatus)))&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Status,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;COUNT(*)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;AS&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;c:\inetpub\logs\LogFiles\W3SVC1\*&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;GROUP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Status&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;ORDER&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Status&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;ASC&lt;/FONT&gt; &lt;/TD&gt;
&lt;TD vAlign=top width=229&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=81&gt;Status&lt;/TD&gt;
&lt;TD width=77&gt;Hits&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;200&lt;/TD&gt;
&lt;TD&gt;144&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;304&lt;/TD&gt;
&lt;TD&gt;38&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;400&lt;/TD&gt;
&lt;TD&gt;9&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;403.14&lt;/TD&gt;
&lt;TD&gt;10&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;404&lt;/TD&gt;
&lt;TD&gt;64&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;404.3&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;500.19&lt;/TD&gt;
&lt;TD&gt;23&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=110&gt;List all the requests by user agent&lt;/TD&gt;
&lt;TD vAlign=top width=265&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;cs(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;User&lt;/FONT&gt;&lt;FONT color=#000000&gt;-Agent)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;UserAgent,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;COUNT(*)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;as&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;c:\inetpub\logs\LogFiles\W3SVC1\*&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;GROUP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;UserAgent&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;ORDER&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;DESC&lt;/FONT&gt; &lt;/TD&gt;
&lt;TD vAlign=top width=229&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=289&gt;UserAgent&lt;/TD&gt;
&lt;TD width=77&gt;Hits&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;iisbot/1.0+(+http://www.iis.net/iisbot.html)&lt;/TD&gt;
&lt;TD&gt;104&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Mozilla/4.0+(compatible;+MSIE+8.0;…&lt;/TD&gt;
&lt;TD&gt;77&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;Microsoft-WebDAV-MiniRedir/6.1.7600&lt;/TD&gt;
&lt;TD&gt;23&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;DavClnt&lt;/TD&gt;
&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=110&gt;List all the Win32 Error codes that have been logged&lt;/TD&gt;
&lt;TD vAlign=top width=265&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;sc-win32-status&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;As&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Win32-Status,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;WIN32_ERROR_DESCRIPTION(sc-win32-status)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;as&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;Description&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;COUNT(*)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;AS&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Hits&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;c:\inetpub\logs\LogFiles\W3SVC1\*&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;WHERE&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Win32-Status&amp;lt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;0&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;GROUP&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Win32-Status&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;ORDER&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;BY&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Win32-Status&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;ASC&lt;/FONT&gt; &lt;/TD&gt;
&lt;TD vAlign=top width=229&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=0&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width=90&gt;Win32-Status&lt;/TD&gt;
&lt;TD width=339&gt;Description&lt;/TD&gt;
&lt;TD width=64&gt;Hits&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;2&lt;/TD&gt;
&lt;TD&gt;The system cannot find the file specified.&lt;/TD&gt;
&lt;TD&gt;64&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;13&lt;/TD&gt;
&lt;TD&gt;The data is invalid.&lt;/TD&gt;
&lt;TD&gt;9&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;50&lt;/TD&gt;
&lt;TD&gt;The request is not supported.&lt;/TD&gt;
&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;A final note: any time you deal with Date and Time, remember to use the TO_LOCALTIME function to convert the log times to your local time, otherwise you will find it very confusing when your entries seem to be reported incorrectly.&lt;/P&gt;
&lt;P&gt;If you need any help you can always visit the &lt;A href="http://forums.iis.net/default.aspx?GroupID=51" target=_blank mce_href="http://forums.iis.net/default.aspx?GroupID=51"&gt;Log Parser Forums&lt;/A&gt; to find more information or ask specific questions.&lt;/P&gt;
&lt;P&gt;Any other useful queries I missed?&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9985383" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/rj5A2fTAg54" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2010/03/25/analyze-your-iis-log-files-favorite-log-parser-queries.aspx</feedburner:origLink></item><item><title>IIS SEO Toolkit: Find warnings of HTTP content linked by pages using HTTPS</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/DWpuR4HoXY0/iis-seo-toolkit-find-warnings-of-http-content-linked-by-pages-using-https.aspx</link><pubDate>Fri, 26 Feb 2010 09:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9969803</guid><dc:creator>CarlosAg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9969803</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2010/02/26/iis-seo-toolkit-find-warnings-of-http-content-linked-by-pages-using-https.aspx#comments</comments><description>&lt;P&gt;Are you an developer/owner/publisher/etc of a site that uses HTTPS (SSL) for secure access? If you are, please continue to read.&lt;/P&gt;
&lt;P&gt;Have you ever visited a Web site that is secured using SSL (Secure Sockets Layer) just to get an ugly Security Warning message like:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Do you want to view only the webpage content that was delivered securely?&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;This webpage contains content that will not be delivered using a secure HTTPS connection, which could compromise the security of the entire webpage.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitFindwarningsofHTTPcontentse_C8E/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitFindwarningsofHTTPcontentse_C8E/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitFindwarningsofHTTPcontentse_C8E/image_thumb.png" width=460 height=169 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitFindwarningsofHTTPcontentse_C8E/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;How frustrating is this for you? Do you think that end-users know what is the right answer to the question above? Honestly, I think it actually even feels like the Yes/No buttons and the phrasing of the question would cause me to click the wrong option.&lt;/P&gt;
&lt;P&gt;What this warning is basically trying to tell the user is that even though he/she navigated to a page that you thought was secured by using SSL, the page is consuming resources that are coming from an unsecured location, this could be scripts, style-sheets or other types of objects that could potentially pose a security risk since they could be tampered on the way or come from different locations. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;As a site owner/developer/publisher/etc should always make sure that you are not going to expose your customers to such a bad experience, &lt;/STRONG&gt;leaving them with an answer that they can’t possibly choose right. For one if they ‘&lt;STRONG&gt;choose Yes’ &lt;/STRONG&gt;they will get an incomplete experience being broken images, broken scripts or something worse; otherwise they can ‘&lt;STRONG&gt;choose No’ &lt;/STRONG&gt;which is even worse since that means you are actually teaching them to ignore this warnings which could indeed in some cases be real signs of security issues. &lt;/P&gt;
&lt;P&gt;Bottom-line it should be imperative that any issue like this should be treated as a bug and fixed in the application if possible.&lt;/P&gt;
&lt;P&gt;But the big question is &lt;STRONG&gt;how do you find these issues&lt;/STRONG&gt;? Well the answer is very simple yet extremely time consuming, just navigate to every single page of your site using SSL and as you do that examine every single resource in the page (styles, objects, scripts, etc) and see if the URL is pointing to a non-HTTPS location.&lt;/P&gt;
&lt;H2&gt;&lt;STRONG&gt;Enter the &lt;A href="http://www.iis.net/expand/SEOToolkit" target=_blank mce_href="http://www.iis.net/expand/SEOToolkit"&gt;IIS Search Engine Optimization (SEO) Toolkit&lt;/A&gt;.&lt;/STRONG&gt;&lt;/H2&gt;
&lt;P&gt;The good news is that using the SEO Toolkit is extremely simple to find these issues. &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;To do that just start a new Analysis using the &lt;A href="http://www.iis.net/expand/SEOToolkit" target=_blank mce_href="http://www.iis.net/expand/SEOToolkit"&gt;IIS SEO Toolkit&lt;/A&gt; using the HTTPS URL of your site, for example: https://www.example.com/ &lt;/LI&gt;
&lt;LI&gt;Once the analysis is over just select the option “Query-&amp;gt;Open Query” and open the following XML file: &lt;BR&gt;&lt;/LI&gt;
&lt;DIV class=code&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;?xml&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; version&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="1.0"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; encoding&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="utf-8"?&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;query&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; dataSource&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="links"&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;filter&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;expression&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; field&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="LinkingUrl"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; operator&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Begins"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; value&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="https://"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;expression&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; field&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="LinkedUrl"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; operator&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Begins"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; value&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="http://"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;expression&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; field&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="LinkType"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; operator&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="NotEquals"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; value&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Link"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;expression&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; field&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="LinkType"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; operator&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="NotEquals"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; value&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Rss"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;filter&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;displayFields&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="LinkingUrl"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="LinkedUrl"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="LinkedStatus"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="LinkType"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;displayFields&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;query&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt; &lt;/DIV&gt;
&lt;LI&gt;Just by doing that it will open a Query Window that will show all the links in your site that have such a problem. Note that the query simply looks for all the resources that are being linked by a URL that begins with HTTPS and that the target resource is using HTTP and that are not normal links (since they do not have that problem). &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;This is how my quick repro looks like. Note that it actually tells you the type of resource it is (an image and a style in this case). Additionally if you double click the row it will show you exactly the place in the markup where the problem occurs so you can easily fix it.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitFindwarningsofHTTPcontentse_C8E/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitFindwarningsofHTTPcontentse_C8E/image_6.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitFindwarningsofHTTPcontentse_C8E/image_thumb_2.png" width=595 height=484 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitFindwarningsofHTTPcontentse_C8E/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H2&gt;Summary&lt;/H2&gt;
&lt;P&gt;Using the IIS SEO Toolkit and it powerful Query Engine you can easily detect conditions on your site that otherwise would take an incredible amount of time and that would be prohibitively expensive to do constantly. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9969803" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/DWpuR4HoXY0" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2010/02/26/iis-seo-toolkit-find-warnings-of-http-content-linked-by-pages-using-https.aspx</feedburner:origLink></item><item><title>Announcing: IIS SEO Toolkit v1.0.1</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/ka5UlssgcQA/announcing-iis-seo-toolkit-v1-0-1.aspx</link><pubDate>Mon, 01 Feb 2010 07:42:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9956176</guid><dc:creator>CarlosAg</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9956176</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2010/02/01/announcing-iis-seo-toolkit-v1-0-1.aspx#comments</comments><description>&lt;p&gt;Last week we released a refresh for the IIS Search Engine Optimization (SEO) Toolkit v1.0. This version is a minor update that includes fixes for all the important bugs reported in the &lt;a href="http://forums.iis.net/1162.aspx" target="_blank"&gt;IIS.NET SEO Forum&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Some of the fixes included in this version are:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Pages sending the XHTML content type 'application/xhtml+xml' are not parsed correctly as HTML causing their links and violations to be empty.&lt;/li&gt;    &lt;li&gt;Report Analysis fails if the META tags include certain characters.&lt;/li&gt;    &lt;li&gt;&amp;lt;style&amp;gt; tag is not parsed correctly if it is empty causing Invalid Markup violations to be flagged incorrectly.&lt;/li&gt;    &lt;li&gt;Memory is not released when the &amp;quot;Store Copies of analyzed web pages locally&amp;quot; button is unchecked.&lt;/li&gt;    &lt;li&gt;HTML with leading empty lines and doctype fails to parse correctly causing their links and violations to be empty.&lt;/li&gt;    &lt;li&gt;Internal Link criteria option of &amp;quot;host: &amp;lt;sitename&amp;gt; and subdomains (*.&amp;lt;sitename&amp;gt;)&amp;quot; fails to work as expected under certain configurations.&lt;/li&gt;    &lt;li&gt;System.NullReferenceException when content attribute is misisng in Meta tag&lt;/li&gt;    &lt;li&gt;Windows authentication does not work with servers configured with NTLM or Kerberos only challenge.&lt;/li&gt;    &lt;li&gt;External META tags are stored in the report making it cumbersome to use the important ones.&lt;/li&gt;    &lt;li&gt;Several localization related bugs.&lt;/li&gt;    &lt;li&gt;DTD error when navigating to the Sitemap and Sitemap Index User Interface.&lt;/li&gt;    &lt;li&gt;And others…&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;This release is compatible with v1.0 RTM and it will upgrade if already installed. So go ahead and install the new version using Web Platform Installed by clicking: &lt;a title="http://go.microsoft.com/?linkid=9695987" href="http://go.microsoft.com/?linkid=9695987" target="_blank"&gt;http://go.microsoft.com/?linkid=9695987&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Learn more about it at: &lt;a title="http://www.iis.net/expand/SEOToolkit" href="http://www.iis.net/expand/SEOToolkit"&gt;http://www.iis.net/expand/SEOToolkit&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9956176" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/ka5UlssgcQA" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS+News+Item/">IIS News Item</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS+Manager/">IIS Manager</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2010/02/01/announcing-iis-seo-toolkit-v1-0-1.aspx</feedburner:origLink></item><item><title>IIS SEO Toolkit – Crawler Module Extensibility</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/_eGx96YUAm8/iis-seo-toolkit-crawler-module-extensibility.aspx</link><pubDate>Mon, 23 Nov 2009 22:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9927571</guid><dc:creator>CarlosAg</dc:creator><slash:comments>26</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9927571</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2009/11/23/iis-seo-toolkit-crawler-module-extensibility.aspx#comments</comments><description>&lt;H1&gt;&amp;nbsp;&lt;/H1&gt;
&lt;H1&gt;Sample SEO Toolkit CrawlerModule Extensibility&lt;/H1&gt;
&lt;P&gt;In this blog we are going to write an example on how to extend the SEO Toolkit functionality, so for that we are going to pretend our company has a large Web site that includes several images, and now we are interested in making sure all of them comply to a certain standard, lets say all of them should be smaller than 1024x768 pixels and that the quality of the images is no less than 16 bits per pixel. Additionally we would also like to be able to make custom queries that can later allow us to further analyze the contents of the images and filter based on directories and more. &lt;/P&gt;
&lt;P&gt;For this we will extend the SEO Toolkit crawling process to perform the additional processing for images, we will be adding the following new capabilities:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Capture additional information from the Content. In this case we will capture information about the image, in particular we will extend the report to add a "Image Width", "Image Height" and a "Image Pixel Format". &lt;/LI&gt;
&lt;LI&gt;Flag additional violations. In this example we will flag three new violations: 
&lt;OL&gt;
&lt;LI&gt;Image is too large. This violation will be flagged any time the content length of the image is larger than the "Maximum Download Size per URL" configured at the start of the analysis. It will also flag this violation if the resolution is larger than 1024x768. &lt;/LI&gt;
&lt;LI&gt;Image pixel format is too small. This violation will be flagged if the image is 8 or 4 bits per pixel. &lt;/LI&gt;
&lt;LI&gt;Image has a small resolution. This will be flagged if the image resolution per inch is less than 72dpi. &lt;/LI&gt;&lt;/OL&gt;&lt;/LI&gt;&lt;/OL&gt;
&lt;H2&gt;Enter CrawlerModule&lt;/H2&gt;
&lt;P&gt;A crawler module is a class that extends the crawling process in Site Analysis to provide custom functionality while processing each URL. By deriving from this class you can easily raise your own set of violations or add your own data and links to any URL. &lt;/P&gt;
&lt;DIV class=code&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;abstract&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;CrawlerModule&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;IDisposable&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Methods&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;BeginAnalysis()&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;virtual&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;EndAnalysis(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;cancelled)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;abstract&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Process(CrawlerProcessContext&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;context)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Properties &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;protected&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;WebCrawler&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Crawler&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;protected&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;CrawlerSettings&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Settings&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt; &lt;/DIV&gt;
&lt;P&gt;It includes three main methods:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;BeginAnalysis. This method is invoked once at the beginning of the crawling process and allows you to perform any initialization needed. Common tasks include registering custom properties in the Report that can be accessed through the Crawler property. &lt;/LI&gt;
&lt;LI&gt;Process. This method is invoked for each URL once its contents has been downloaded. The context argument includes a property URLInfo that provides all the metadata extracted for the URL. It also includes a list of Violations and Links in the URL. Common tasks include augmenting the metadata of the URL whether using its contents or external systems, flagging new custom Violations, or discovering new links in the contents. &lt;/LI&gt;
&lt;LI&gt;EndAnalysis. This method is invoked once at the end of the crawling process and allows you to do any final calculations on the report once all the URLs have been processed. Common tasks in this method include performing aggregations of data across all the URLs, or identifying violations that depend on all the data being available (such as finding duplicates). &lt;/LI&gt;&lt;/OL&gt;
&lt;H2&gt;Coding the Image Crawler Module &lt;/H2&gt;
&lt;P&gt;Create a Class Library in Visual Studio and add the code shown below.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Open Visual Studio and select the option File-&amp;gt;New Project &lt;/LI&gt;
&lt;LI&gt;In the New Project dialog select the Class Library project template and specify a name and a location such as "SampleCrawlerModule" &lt;/LI&gt;
&lt;LI&gt;Using the Menu "Project-&amp;gt;Add Reference", add a reference to the IIS SEO Toolkit client library (C:\Program Files\Reference Assemblies\Microsoft\IIS\Microsoft.Web.Management.SEO.Client.dll). &lt;/LI&gt;
&lt;LI&gt;Since we are going to be registering this through the IIS Manager extensibility, add a reference to the IIS Manager extensibility DLL (c:\windows\system32\inetsrv\Microsoft.Web.Management.dll) using the "Project-&amp;gt;Add Reference" menu. &lt;/LI&gt;
&lt;LI&gt;Also, since we will be using the .NET Bitmap class you need to add a reference to "System.Drawing" using the "Project-&amp;gt;Add Reference" menu. &lt;/LI&gt;
&lt;LI&gt;Delete the auto-generated Class1.cs since we will not be using it. &lt;/LI&gt;
&lt;LI&gt;Using the Menu "Project-&amp;gt;Add New Item" Add a new class named "ImageExtension". &lt;/LI&gt;&lt;/OL&gt;
&lt;DIV class=code&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;System&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;System.Drawing&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;System.Drawing.Imaging&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Microsoft.Web.Management.SEO.Crawler&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;namespace&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;SampleCrawlerModule&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;/// &amp;lt;summary&amp;gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;/// Extension to add validation and metadata to images while crawling &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;/// &amp;lt;/summary&amp;gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;internal&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImageExtension&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;CrawlerModule&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;const&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImageWidthField&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt; "iWidth"&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;const&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImageHeightField&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt; "iHeight"&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;const&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImagePixelFormatField&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt; "iPixFmt"&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;BeginAnalysis()&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Register the properties we want to augment at the begining of the analysis &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Crawler.Report.RegisterProperty(ImageWidthField,&lt;/FONT&gt;&lt;FONT color=#808080&gt; "Image Width"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&lt;FONT color=#000000&gt;))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Crawler.Report.RegisterProperty(ImageHeightField,&lt;/FONT&gt;&lt;FONT color=#808080&gt; "Image Height"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;int&lt;/FONT&gt;&lt;FONT color=#000000&gt;))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Crawler.Report.RegisterProperty(ImagePixelFormatField,&lt;/FONT&gt;&lt;FONT color=#808080&gt; "Image Pixel Format"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;&lt;FONT color=#000000&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#000000&gt;))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Process(CrawlerProcessContext&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;context)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Make sure only process the Content Types we need to &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;switch&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(context.UrlInfo.ContentTypeNormalized)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt; "image/jpeg"&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt; "image/png"&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt; "image/gif"&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt; "image/bmp"&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Process only known content types &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;break;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;default&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Ignore any other &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#006400&gt;//-------------------------------------------- &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// If the content length of the image was larger than the max &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;//&amp;nbsp;&amp;nbsp; allowed to download, then flag a violation, and stop &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(context.UrlInfo.ContentLength&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Crawler.Settings.MaxContentLength)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Violations.AddImageTooLargeViolation(context,&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; "It is larger than the allowed download size"&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Stop processing since we do not have all the content &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Load the image from the response into a bitmap &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(Bitmap&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;bitmap&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Bitmap(context.UrlInfo.ResponseStream))&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Size&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;size&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;bitmap.Size&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#006400&gt;//-------------------------------------------- &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Augment the metadata by adding our fields &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.UrlInfo.SetPropertyValue(ImageWidthField,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;size.Width)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.UrlInfo.SetPropertyValue(ImageHeightField,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;size.Height)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.UrlInfo.SetPropertyValue(ImagePixelFormatField,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;bitmap.PixelFormat.ToString())&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#006400&gt;//-------------------------------------------- &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// Additional Violations: &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// If the size is outside our standards, then flag violation &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(size.Width&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;1024&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;amp;&amp;amp;&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;size.Height&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;768&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Violations.AddImageTooLargeViolation(context,&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#2b91af&gt;String&lt;/FONT&gt;&lt;FONT color=#000000&gt;.Format(&lt;/FONT&gt;&lt;FONT color=#808080&gt;"The image size is: {0}x{1}"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;size.Width,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;size.Height))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#006400&gt;// If the format is outside our standards, then flag violation &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;switch&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(bitmap.PixelFormat)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;PixelFormat.Format1bppIndexed:&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;PixelFormat.Format4bppIndexed:&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;case&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;PixelFormat.Format8bppIndexed:&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Violations.AddImagePixelFormatSmall(context)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;break;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(bitmap.VerticalResolution&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;72&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;||&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;bitmap.HorizontalResolution&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&amp;lt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;72&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;Violations.AddImageResolutionSmall(context,&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;bitmap.HorizontalResolution&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;+&lt;/FONT&gt;&lt;FONT color=#808080&gt; "x" &lt;/FONT&gt;&lt;FONT color=#000000&gt;+&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;bitmap.VerticalResolution)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;/// &amp;lt;summary&amp;gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;/// Helper class to hold the violations &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#006400&gt;/// &amp;lt;/summary&amp;gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Violations&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationInfo&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImageTooLarge&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationInfo(&lt;/FONT&gt;&lt;FONT color=#808080&gt;"ImageTooLarge"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationLevel.Warning,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; "Image is too large."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; "The Image is too large: {details}."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; "Make sure that the image content is required."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; "Images"&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationInfo&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImagePixelFormatSmall&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationInfo(&lt;/FONT&gt;&lt;FONT color=#808080&gt;"ImagePixelFormatSmall"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationLevel.Warning,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; "Image pixel format is too small."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; "The Image pixel format is too small"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; "Make sure that the quality of the image is good."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; "Images"&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;readonly&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationInfo&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImageResolutionSmall&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationInfo(&lt;/FONT&gt;&lt;FONT color=#808080&gt;"ImageResolutionSmall"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;ViolationLevel.Warning,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; "Image resolution is small."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; "The Image resolution is too small: ({res})"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; "Make sure that the image quality is good."&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&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;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; "Images"&lt;/FONT&gt;&lt;FONT color=#000000&gt;)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;internal&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;AddImageTooLargeViolation(CrawlerProcessContext&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;context,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;details)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.Violations.Add(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Violation(ImageTooLarge,&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#800000&gt;0&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; "details"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;details))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;internal&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;AddImagePixelFormatSmall(CrawlerProcessContext&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;context)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.Violations.Add(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Violation(ImagePixelFormatSmall,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#800000&gt;0&lt;/FONT&gt;&lt;FONT color=#000000&gt;))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;internal&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;static&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;AddImageResolutionSmall(CrawlerProcessContext&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;context,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;string&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;resolution)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;context.Violations.Add(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Violation(ImageResolutionSmall,&lt;/FONT&gt;&lt;FONT color=#808080&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#800000&gt;0&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt; "res"&lt;/FONT&gt;&lt;FONT color=#000000&gt;,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;resolution))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt; &lt;/DIV&gt;
&lt;P&gt;As you can see in the BeginAnalysis the module registers three new properties with the Report using the Crawler property. This is only required if you want to provide either a custom text or use it for different type other than a string. Note that current version only allows primitive types like Integer, Float, DateTime, etc. &lt;/P&gt;
&lt;P&gt;During the Process method it first makes sure that it only runs for known content types, then it performs any validations raising a set of custom violations that are defined in the Violations static helper class. Note that we load the content from the Response Stream, which is the property that contains the received from the server. Note that if you were analyzing text the property Response would contain the content (this is based on Content Type, so HTML, XML, CSS, etc, will be kept in this String property).&lt;/P&gt;
&lt;H3&gt;Registering it&lt;/H3&gt;
&lt;P&gt;When running inside IIS Manager, crawler modules need to be registered as a standard UI module first and then inside their initialization they need to be registered using the IExtensibilityManager interface. In this case to keep the code as simple as possible everything is added in a single file. So add a new file called "RegistrationCode.cs" and include the contents below:&lt;/P&gt;
&lt;DIV class=code&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;System&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Microsoft.Web.Management.Client&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Microsoft.Web.Management.SEO.Crawler&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;using&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Microsoft.Web.Management.Server&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;namespace&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;SampleCrawlerModule&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;internal&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;SampleCrawlerModuleProvider&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ModuleProvider&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ModuleDefinition&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;GetModuleDefinition(IManagementContext&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;context)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ModuleDefinition(Name,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;&lt;FONT color=#000000&gt;(SampleCrawlerModule).AssemblyQualifiedName)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#2b91af&gt;Type&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ServiceType&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;get&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;null;&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;SupportsScope(ManagementScope&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;scope)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;true;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;internal&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;class&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;SampleCrawlerModule&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;:&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Module&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;protected&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;override&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;void&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;Initialize(IServiceProvider&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;serviceProvider,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ModuleInfo&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;moduleInfo)&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;{&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;base&lt;/FONT&gt;&lt;FONT color=#000000&gt;.Initialize(serviceProvider,&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;moduleInfo)&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;IExtensibilityManager&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;em&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;=&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;(IExtensibilityManager)GetService(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;&lt;FONT color=#000000&gt;(IExtensibilityManager))&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&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; &lt;/FONT&gt;&lt;FONT color=#000000&gt;em.RegisterExtension(&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;typeof&lt;/FONT&gt;&lt;FONT color=#000000&gt;(CrawlerModule),&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;FONT color=#808080&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#000000&gt;ImageExtension())&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;;&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt;&lt;FONT color=#808080&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;}&lt;/FONT&gt; &lt;/DIV&gt;
&lt;P&gt;This code defines a standard UI IIS Manager module and in its client-side initialize method it uses the IExtensibilityManager interface to register the new instance of the Image extension. This will make it visible to the Site Analysis feature.&lt;/P&gt;
&lt;H3&gt;Testing it&lt;/H3&gt;
&lt;P&gt;To test it we need to add the UI module to Administration.config, that also means that the assembly needs to be registered in the GAC. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;To Strongly name the assembly&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In Visual Studio, you can do this easily by using the menu "Project-&amp;gt;Properties", and select the "Signing" tab, check the "Sign the assembly", and choose a file, if you don't have one you can easily just choose New and specify a name.&lt;/P&gt;
&lt;P&gt;After this you can compile and now should be able to add it to the GAC. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;To GAC it&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If you have the SDK's you should be able to call it like in my case:&lt;/P&gt;
&lt;P&gt;"\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /if SampleCrawlerModule.dll &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;(Note, you could also just open Windows Explorer, navigate to c:\Windows\assembly and drag &amp;amp; drop your file in there, that will GAC it automatically).&lt;/P&gt;
&lt;P&gt;Finally to see the right name that should be use in Administration.config run the following command:&lt;/P&gt;
&lt;P&gt;"\Program Files\Microsoft SDKs\Windows\v6.0A\bin\gacutil.exe" /l SampleCrawlerModule&lt;/P&gt;
&lt;P&gt;In my case it displays:&lt;/P&gt;
&lt;P&gt;SampleCrawlerModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6f4d9863e5b22f10, …&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Finally register it in Administration.config&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Open Administration.config in Notepad using an elevated instance, find the &amp;lt;/moduleProviders&amp;gt; and add a string like the one below but replacing the right values for Version and PublicKeyToken:&lt;/P&gt;
&lt;DIV class=code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;add&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="SEOSample"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; type&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="SampleCrawlerModule.SampleCrawlerModuleProvider, SampleCrawlerModule, &lt;EM&gt;&lt;FONT color=#8080c0&gt;Version=1.0.0.0, Culture=neutral, PublicKeyToken=6f4d9863e5b22f10&lt;/FONT&gt;&lt;/EM&gt;"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt;&lt;/FONT&gt; &lt;/DIV&gt;
&lt;H3&gt;Use it&lt;/H3&gt;
&lt;P&gt;After registration you now should be able to launch IIS Manager and navigate to Search Engine Optimization. Start a new Analysis to your Web site. Once completed if there are any violations you will see them correctly in the Violations Summary or any other report. For example see below all the violations in the "Images" category.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb.png" width=244 height=187 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Since we also extended the metadata by including the new fields (Image Width, Image Height, and Image Pixel Format) now you can use them with the Query infrastructure to easily create a report of all the images:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb_1.png" width=244 height=187 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;And since they are standard fields, they can be used in Filters, Groups, and any other functionality, including exporting data. So for example the following query can be opened in the Site Analysis feature and will display an average of the width and height of images summarized by type of image:&lt;/P&gt;
&lt;DIV class=code&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;?xml&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; version&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="1.0"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; encoding&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="utf-8"?&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;query&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; dataSource&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="urls"&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;filter&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;expression&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; field&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="ContentTypeNormalized"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; operator&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Begins"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; value&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="image/"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;filter&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;group&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="ContentTypeNormalized"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;group&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;displayFields&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="ContentTypeNormalized"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="(Count)"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Average(iWidth)"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000&gt;field&lt;/FONT&gt;&lt;FONT color=#ff0000&gt; name&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;="Average(iHeight)"&lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;/&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;displayFields&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt; &lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000&gt;query&lt;/FONT&gt;&lt;FONT color=#0000ff&gt;&amp;gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt; &lt;/DIV&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_6.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb_2.png" width=244 height=187 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;And of course violation details are shown as specified, including Recommendation, Description, etc:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_8.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb_3.png" width=220 height=244 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitCrawlerModuleExtensibility_10038/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H2&gt;Summary&lt;/H2&gt;
&lt;P&gt;As you can see extending the SEO Toolkit using a Crawler Module allows you to provide additional information, whether Metadata, Violations or Links to any document being processed. This can be used to add support for content types not supported out-of-the box such as PDF, Office Documents or anything else that you need. It also can be used to extend the metadata by writing custom code to wire data from other system into the report giving you the ability to exploit this data using the Query capabilities of Site Analysis. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9927571" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/_eGx96YUAm8" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS+Manager/">IIS Manager</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2009/11/23/iis-seo-toolkit-crawler-module-extensibility.aspx</feedburner:origLink></item><item><title>IIS SEO Toolkit Extensibility</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/dhXrRDREITs/iis-seo-toolkit-extensibility.aspx</link><pubDate>Mon, 23 Nov 2009 21:46:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9927567</guid><dc:creator>CarlosAg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9927567</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2009/11/23/iis-seo-toolkit-extensibility.aspx#comments</comments><description>&lt;p&gt;The IIS SEO Toolkit includes a lot of functionality built-in such as built-in violation rules, processing of different content types (like HTML, CSS, RSS, etc) and more, however it might not do all the things that you would need it to do, for example, it might not process a set of documents that you use, or it might not gather all the information that you are interested in while processing a document. The good news is that it includes enough extensibility to let you build on top of its rich capabilities and provide additional ones easily using .NET.&lt;/p&gt;  &lt;p&gt;There are three main extensibility points in this first release, including:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Crawler Module&lt;/strong&gt;. This extensibility point allows you to provide your own code to hook to the process of crawling a Web site in the Site Analysis process. Using this extensibility point you can extend the built in set of violation rules with your own. You can also gather additional information such as links or any metadata of a resource, whether directly extracted from the content or from an external system. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Site Analyzer Extension&lt;/strong&gt;. This feature allows you to provide your own set of tasks to be exposed in the Site Analysis user interface. These tasks will be displayed in the main menu bar in the report dashboard. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Sitemap Extension&lt;/strong&gt;. This class allows you to provide your own set of tasks to be exposed in the Sitemaps, Sitemap and Sitemap Index user interface. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;This is the first of a series of extensibility blog entries for the IIS SEO Toolkit where I will cover all of the extensibility points mentioned above.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9927567" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/dhXrRDREITs" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS+Manager/">IIS Manager</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2009/11/23/iis-seo-toolkit-extensibility.aspx</feedburner:origLink></item><item><title>Slides for IIS – Web Application Gallery presentation at DevConnections</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/j0KUaFFuCIY/slides-for-iis-web-application-gallery-presentation-at-devconnections.aspx</link><pubDate>Mon, 23 Nov 2009 20:55:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9927528</guid><dc:creator>CarlosAg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9927528</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2009/11/23/slides-for-iis-web-application-gallery-presentation-at-devconnections.aspx#comments</comments><description>&lt;p&gt;Two weeks ago I presented at DevConnections the talk &amp;quot;AMS10: Developing and Deploying for the Windows Web App Gallery&amp;quot;, here are the slides.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.carlosag.net/downloads/Aguilar_DevConnections_AMS10_Developing and Deploying for the Windows Web App Gallery.zip" target="_blank"&gt;Download the Web Application Gallery Talk slides here.&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A few final links:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Microsoft Web Platform: &lt;a title="http://www.microsoft.com/web/" href="http://www.microsoft.com/web/"&gt;http://www.microsoft.com/web/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Download Web PI: &lt;a title="http://www.microsoft.com/web/downloads/platform.aspx" href="http://www.microsoft.com/web/downloads/platform.aspx"&gt;http://www.microsoft.com/web/downloads/platform.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Submit your Applications at: &lt;a title="http://www.microsoft.com/web/gallery/developer.aspx" href="http://www.microsoft.com/web/gallery/developer.aspx"&gt;http://www.microsoft.com/web/gallery/developer.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9927528" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/j0KUaFFuCIY" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2009/11/23/slides-for-iis-web-application-gallery-presentation-at-devconnections.aspx</feedburner:origLink></item><item><title>IIS SEO Toolkit - New Reports (Redirects and Link Depth)</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/4OMK3MvXl2M/iis-seo-toolkit-new-reports-redirects-and-link-depth.aspx</link><pubDate>Wed, 18 Nov 2009 23:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9924139</guid><dc:creator>CarlosAg</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9924139</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2009/11/18/iis-seo-toolkit-new-reports-redirects-and-link-depth.aspx#comments</comments><description>&lt;p&gt;In the new version of the IIS SEO Toolkit we added two new reports that are very interesting, both from an SEO perspective as well as from user experience and site organization. These reports are located in the Links category of the reports&lt;/p&gt;  &lt;h2&gt;Redirects&lt;/h2&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;This report shows a summary of all the redirects that were found while crawling the Web site. The first column (Linking-URL) is the URL that was visited that resulted in redirection to the Linked-URL (second column). The third column (Linking-Status code) specifies what type of redirection happened based on the &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode.aspx" target="_blank"&gt;HTTP status code&lt;/a&gt; enumeration. The most common values will be MovedPermanently/Moved which is a 301, or Found/Redirect which is a 302. The last column shows the status code for the final URL so you can easily identify redirects that failed or that redirected to another redirect.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_thumb.png" width="484" height="346" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Why should you care&lt;/h3&gt;  &lt;p&gt;This report is interesting because Redirects might affect your Search Engine rankings and make your users have the perception that your site is slower. For more information on Redirects see: &lt;a href="http://blogs.msdn.com/carlosag/archive/2009/06/12/redirects-301-302-and-iis-seo-toolkit.aspx" target="_blank"&gt;Redirects, 301, 302 and IIS SEO Toolkit&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;Link Depth&lt;/h2&gt;  &lt;p&gt;This is probably one of my favorite reports since it is almost impossible to find this type of information in any other 'easy' way.&lt;/p&gt;  &lt;p&gt;The report basically tells you how hard it is for users that land in your home page to get to any of the pages in your site. For example in the image below it shows that it takes 5 clicks for a user to get from the home page of my site to the XGrid.htc component.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_thumb_1.png" width="484" height="346" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is very valuable information because you will be able to understand how deep your Web site is, in my case if you were to walk the entire site and layout its structure in a hierarchical diagram it would basically be 5 levels deep. Remember, you want your site to be shallow so that its easily discoverable and crawled by Search Engines. &lt;/p&gt;  &lt;p&gt;Even more interesting you can double click any of the results and see the list of clicks that the user has to make it to get to the page.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_6.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_thumb_2.png" width="436" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Note that it shows the URL, the Title of the page as well as the Text of the Link you need to click to get to the Next URL (the one with a smaller index). So as you can see in my case the user needs to go to the home page, click the link with text &amp;quot;XGrid&amp;quot;, which takes it to the /XGrid/ url (index 3) which then needs to click the link with text &amp;quot;This is a new...&amp;quot;, etc.&lt;/p&gt;  &lt;p&gt;Note that as you select the URLs in the list it will highlight in the markup the link that takes you to the next URL.&lt;/p&gt;  &lt;p&gt;The data of this report is powered by a new type of query we called Route Query. The reason this is interesting is because you can customize the report to add different filters, or change the start URL, or more.&lt;/p&gt;  &lt;p&gt;For example, lets say I want to figure out all the pages that the user can get to when they land in my site in a specific page, say &lt;a title="http://www.carlosag.net/Tools/XGrid/editsample.htm" href="http://www.carlosag.net/Tools/XGrid/editsample.htm"&gt;http://www.carlosag.net/Tools/XGrid/editsample.htm&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;In the Dashboard view of a Report, select the option 'Query-&amp;gt;New Routes Query'. This will open a new Query tab where you can specify the Start URL that you are interested.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitNewReportsRedirectsandLinkD_149A6/image_thumb_3.png" width="484" height="346" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As you can see this report clearly shows that if a user visits my site and lands on this page they will basically be blocked and only be able to see 8 pages of the entire site. This is a clear example on where a link to the Home page would be beneficial.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Other common scenarios that this query infrastructure could be used for is to find ways to direct traffic from your most common pages to your conversion pages, this report will let you figure out how difficult or easy it is to get from any page to your conversion pages&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924139" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/4OMK3MvXl2M" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS+Manager/">IIS Manager</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2009/11/18/iis-seo-toolkit-new-reports-redirects-and-link-depth.aspx</feedburner:origLink></item><item><title>IIS SEO Toolkit - Start new analysis automatically through code</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/XsBCc_tgtyo/iis-seo-toolkit-start-new-analysis-automatically-through-code.aspx</link><pubDate>Wed, 18 Nov 2009 06:00:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9924091</guid><dc:creator>CarlosAg</dc:creator><slash:comments>6</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9924091</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2009/11/18/iis-seo-toolkit-start-new-analysis-automatically-through-code.aspx#comments</comments><description>&lt;p&gt;One question that I've been asked several times is: &lt;em&gt;&amp;quot;&lt;strong&gt;Is it possible to schedule the &lt;a href="http://www.iis.net/extensions/SEOToolkit" target="_blank"&gt;IIS SEO Toolkit&lt;/a&gt; to run automatically every night?&lt;/strong&gt;&amp;quot;&lt;/em&gt;. Other related questions are: &amp;quot;&lt;em&gt;&lt;strong&gt;Can I automate the SEO Toolkit so that as part of my build process I'm able to catch regressions on my application?&lt;/strong&gt;&lt;/em&gt;&amp;quot;, or &amp;quot;&lt;em&gt;&lt;strong&gt;Can I run it automatically after every check-in to my source control system to ensure no links are broken?&lt;/strong&gt;&lt;/em&gt;&amp;quot;, etc.&lt;/p&gt;  &lt;p&gt;The good news is that the answer is &lt;strong&gt;YES&lt;/strong&gt;!. The bad news is that you have to write a bit of code to be able to make it work. Basically the SEO Toolkit includes a Managed code API to be able to start the analysis just like the User Interface does, and you can call it from any application you want using Managed Code. &lt;/p&gt;  &lt;p&gt;In this blog I will show you how to write a simple command application that will start a new analysis against the site provided in the command line argument and process a few queries after finishing.&lt;/p&gt;  &lt;h2&gt;IIS SEO Crawling APIs&lt;/h2&gt;  &lt;p&gt;The most important type included is a class called &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.webcrawler.aspx" target="_blank"&gt;WebCrawler&lt;/a&gt;. This class takes care of all the process of driving the analysis. The following image shows this class and some of the related classes that you will need to use for this.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitStartnewanalysisthroughcode_13F/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitStartnewanalysisthroughcode_13F/image_thumb.png" width="484" height="200" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.webcrawler.aspx" target="_blank"&gt;WebCrawler&lt;/a&gt; class is initialized through the configuration specified in the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.crawlersettings.aspx" target="_blank"&gt;CrawlerSettings&lt;/a&gt;. The WebCrawler class also contains two methods Start() and Stop() which starts the crawling process in a set of background threads. With the WebCrawler class you can also gain access to the &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.crawlerreport.aspx" target="_blank"&gt;CrawlerReport&lt;/a&gt; through the Report property. The &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.crawlerreport.aspx" target="_blank"&gt;CrawlerReport&lt;/a&gt; class represents the results (whether completed or in progress) of the crawling process. It has a method called &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.crawlerreport.geturls.aspx" target="_blank"&gt;GetUrls&lt;/a&gt;() that returns an instance to all the UrlInfo items. A &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.web.management.seo.crawler.urlinfo.aspx" target="_blank"&gt;UrlInfo&lt;/a&gt; is the most important class that represents a URL that has been downloaded and processed, it has all the metadata such as Title, Description, ContentLength, ContentType, and the set of Violations and Links that it includes.&lt;/p&gt;  &lt;h3&gt;Developing the Sample&lt;/h3&gt;  &lt;ol&gt;   &lt;li&gt;Start Visual Studio. &lt;/li&gt;    &lt;li&gt;Select the option &amp;quot;File-&amp;gt;New Project&amp;quot; &lt;/li&gt;    &lt;li&gt;In the &amp;quot;New Project&amp;quot; dialog select the template &amp;quot;Console Application&amp;quot;, enter the name &amp;quot;SEORunner&amp;quot; and press OK. &lt;/li&gt;    &lt;li&gt;Using the menu &amp;quot;Project-&amp;gt;Add Reference&amp;quot; add a reference to the IIS SEO Toolkit Client assembly &amp;quot;c:\Program Files\Reference Assemblies\Microsoft\IIS\Microsoft.Web.Management.SEO.Client.dll&amp;quot;. &lt;/li&gt;    &lt;li&gt;Replace the code in the file Program.cs with the code shown below. &lt;/li&gt;    &lt;li&gt;Build the Solution &lt;/li&gt; &lt;/ol&gt;  &lt;div class="code"&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;System&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;System.IO&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;System.Linq&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;System.Net&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;System.Threading&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Microsoft.Web.Management.SEO.Crawler&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;namespace&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;SEORunner&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Program&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Main(&lt;/font&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;font color="#000000"&gt;[]&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;args)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(args.Length&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;!&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;1&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Please specify the URL.&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;return;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Create a URI class      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;Uri&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;startUrl&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;Uri(args[&lt;/font&gt;&lt;font color="#800000"&gt;0&lt;/font&gt;&lt;font color="#000000"&gt;])&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Run the analysis      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;CrawlerReport&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;RunAnalysis(startUrl)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Run a few queries...      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;LogSummary(report)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;LogStatusCodeSummary(report)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;LogBrokenLinks(report)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;CrawlerReport&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;RunAnalysis(Uri&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;startUrl)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;CrawlerSettings&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;settings&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;CrawlerSettings(startUrl)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;settings.ExternalLinkCriteria&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;ExternalLinkCriteria.SameFolderAndDeeper&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Generate a unique name      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;settings.Name&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;startUrl.Host&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt; &amp;quot; &amp;quot; &lt;/font&gt;&lt;font color="#000000"&gt;+&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#2b91af"&gt;DateTime&lt;/font&gt;&lt;font color="#000000"&gt;.Now.ToString(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;yy-MM-dd hh-mm-ss&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Use the same directory as the default used by the UI      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;path&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#2b91af"&gt;Path&lt;/font&gt;&lt;font color="#000000"&gt;.Combine(&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Environment&lt;/font&gt;&lt;font color="#000000"&gt;.GetFolderPath(&lt;/font&gt;&lt;font color="#2b91af"&gt;Environment&lt;/font&gt;&lt;font color="#000000"&gt;.SpecialFolder.MyDocuments),&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;quot;IIS SEO Reports&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;settings.DirectoryCache&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#2b91af"&gt;Path&lt;/font&gt;&lt;font color="#000000"&gt;.Combine(path,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;settings.Name)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Create a new crawler and start running      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;WebCrawler&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;crawler&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;WebCrawler(settings)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;crawler.Start()&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Processed - Remaining - Download Size&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;while&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(crawler.IsRunning)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Thread&lt;/font&gt;&lt;font color="#000000"&gt;.Sleep(&lt;/font&gt;&lt;font color="#800000"&gt;1000&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;{0,9:N0} - {1,9:N0} - {2,9:N2} MB&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;crawler.Report.GetUrlCount(),&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;crawler.RemainingUrls,&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;crawler.BytesDownloaded&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;/&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#800000"&gt;1048576&lt;/font&gt;&lt;font color="#000000"&gt;.0f)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#006400"&gt;// Save the report      &lt;br /&gt;&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;crawler.Report.Save(path)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Crawling complete!!!&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;crawler.Report&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;LogSummary(CrawlerReport&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine()&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;----------------------------&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot; Overview&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;----------------------------&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Start URL:&amp;#160; {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.Settings.StartUrl)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Start Time: {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.Settings.StartTime)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;End Time:&amp;#160;&amp;#160; {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.Settings.EndTime)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;URLs:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.GetUrlCount())&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Links:&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.Settings.LinkCount)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;Violations: {0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.Settings.ViolationCount)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;LogBrokenLinks(CrawlerReport&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine()&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;----------------------------&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot; Broken links&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;----------------------------&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;item&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;from&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.GetUrls()&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;where&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url.StatusCode&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;==&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;HttpStatusCode.NotFound&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;&amp;amp;&amp;amp;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;!url.IsExternal&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;orderby&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url.Url.AbsoluteUri&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;ascending&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;select&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(item.Url.AbsoluteUri)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;LogStatusCodeSummary(CrawlerReport&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine()&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;----------------------------&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot; Status Code summary&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;----------------------------&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;item&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;from&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;report.GetUrls()&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;group&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;by&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;url.StatusCode&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;into&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;g&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;orderby&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;g.Key&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;select&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;g)&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;{&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#2b91af"&gt;Console&lt;/font&gt;&lt;font color="#000000"&gt;.WriteLine(&lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;{0,20} - {1,5:N0}&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;item.Key,&lt;/font&gt;&lt;font color="#808080"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#000000"&gt;item.Count())&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;font color="#808080"&gt;      &lt;br /&gt;&lt;/font&gt;&lt;font color="#000000"&gt;}&lt;/font&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;If you are not using Visual Studio, &lt;/strong&gt;you can just save the contents above in a file, call it &lt;font color="#000000"&gt;SEORunner&lt;/font&gt;.cs and compile it using the command line:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe /r:&amp;quot;c:\Program Files\Reference Assemblies\Microsoft\IIS\Microsoft.Web.Management.SEO.Client.dll&amp;quot; /optimize+ &lt;font color="#000000"&gt;SEORunner&lt;/font&gt;.cs&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;After that you should be able to run SEORunner.exe and pass the URL of your site as a argument, you will see an output like:&lt;/p&gt;  &lt;div class="code"&gt;   &lt;pre&gt;Processed - Remaining - Download Size
       56 -       149 -      0.93 MB
      127 -       160 -      2.26 MB
      185 -       108 -      3.24 MB
      228 -        72 -      4.16 MB
      254 -        48 -      4.98 MB
      277 -        36 -      5.36 MB
      295 -        52 -      6.57 MB
      323 -        25 -      7.53 MB
      340 -         9 -      8.05 MB
      358 -         1 -      8.62 MB
      362 -         0 -      8.81 MB
Crawling complete!!!

----------------------------
 Overview
----------------------------
Start URL:  http://www.carlosag.net/
Start Time: 11/16/2009 12:16:04 AM
End Time:   11/16/2009 12:16:15 AM
URLs:       362
Links:      3463
Violations: 838

----------------------------
 Status Code summary
----------------------------
                  OK -   319
    MovedPermanently -    17
               Found -    23
            NotFound -     2
 InternalServerError -     1

----------------------------
 Broken links
----------------------------
http://www.carlosag.net/downloads/ExcelSamples.zip&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The most interesting method above is RunAnalysis, it creates a new instance of the CrawlerSettings and specifies the start URL. Note that it also specifies that we should consider internal all the pages that are hosted in the same directory or subdirectories. We also set the a unique name for the report and use the same directory as the IIS SEO UI uses so that opening IIS Manager will show the reports just as if they were generated by it. Then we finally call Start() which will start the number of worker threads specified in the WebCrawler::WorkerCount property. We finally just wait for the WebCrawler to be done by querying the IsRunning property.&lt;/p&gt;

&lt;p&gt;The remaining methods just leverage LINQ to perform a few queries to output things like a report aggregating all the URLs processed by Status code and more.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;As you can see the IIS SEO Toolkit crawling APIs allow you to easily write your own application to start the analysis against your Web site which can be easily integrated with the Windows Task Scheduler or your own scripts or build system to easily allow for continuous integration. &lt;/p&gt;

&lt;p&gt;Once the report is saved locally it can then be opened using IIS Manager and continue further analysis as with any other report. This sample console application can be scheduled using the Windows Task Scheduler so that it can run every night or at any time. Note that you could also write a few lines of PowerShell to automate it without the need of writing C# code and do that by only command line, but that is left for another post.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9924091" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/XsBCc_tgtyo" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2009/11/18/iis-seo-toolkit-start-new-analysis-automatically-through-code.aspx</feedburner:origLink></item><item><title>Announcing: IIS SEO Toolkit v1.0 release</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/_YSeqGfpfAM/announcing-iis-seo-toolkit-v1-0-release.aspx</link><pubDate>Tue, 17 Nov 2009 21:06:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9923857</guid><dc:creator>CarlosAg</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9923857</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2009/11/17/announcing-iis-seo-toolkit-v1-0-release.aspx#comments</comments><description>&lt;p&gt;Today we are announcing the final release of the &lt;a href="http://www.iis.net/extensions/SEOToolkit" target="_blank"&gt;IIS Search Engine Optimization (SEO) Toolkit v1.0&lt;/a&gt;. This version builds upon the &lt;a href="http://blogs.msdn.com/carlosag/archive/2009/06/03/iis-search-engine-optimization-toolkit-beta-1.aspx" target="_blank"&gt;Beta 1&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/carlosag/archive/2009/09/25/iis-search-engine-optimization-seo-toolkit-announcing-beta-2.aspx" target="_blank"&gt;Beta 2&lt;/a&gt; versions and is 100% compatible with those versions so any report you currently have continues to work in the new version. The new version includes a set of bug fixes and new features such as:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Extensibility&lt;/strong&gt;. In this version we are opening a new set of API's to allow you to develop extensions for the crawling process, including the ability to augment the metadata in the report with your own, extend the set of tasks provided in the Site Analysis and Sitemaps User Interface and more. More on this on a upcoming post.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;New Reports&lt;/strong&gt;. Based on feedback we added a Redirects summary report in the Links section as well as a new Link Depth report that allows you to easily know which pages are the &amp;quot;most hidden pages&amp;quot; in your site, or in other words if a user landed at your sites home page, &amp;quot;how many clicks does he need to do to reach a particular page&amp;quot;.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;New Routes Query&lt;/strong&gt;. We added a new type of Query called Routes. This is the underlying data that powers the &amp;quot;Link Depth&amp;quot; report mentioned above, however it is also exposed as a new query type so that you can create your own queries to customize the Start page and any other kind of things, like filtering, grouping, etc.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;New option to opt-out from keeping a local cache of files&lt;/strong&gt;. We added a new switch in the &amp;quot;Advanced Settings&amp;quot; of the New Analysis dialog to disable the option of keeping the files stored locally. This allows you to run a report which runs faster and that consumes a lot less disk space than when keeping the files cached. The only side effect is that you will not be able to get the &amp;quot;Content&amp;quot; tab and the contextual position of the links as well as the Word Analysis feature. Everything else continues to work just as any other report. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;HTML Metadata is now stored in the Report&lt;/strong&gt;. By leveraging the Extensibility mentioned in bullet 1, the HTML parser now stores all the HTML META tags content so that you can later use them to write your own queries, whether to filter, group data or just export it, this gives you a very interesting set of options if you have any metadata like Author, or any custom.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Several Bug Fixes&lt;/strong&gt;:&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;Internal URLs linked by External URLs now are also included in the crawling process.&lt;/li&gt;      &lt;li&gt;Groupings in queries should be case sensitive&lt;/li&gt;      &lt;li&gt;Show contextual information (link position) in Routes&lt;/li&gt;      &lt;li&gt;The Duplicate detection logic should only include valid responses (do not include 404 NOT Found, 401, etc)&lt;/li&gt;      &lt;li&gt;Canonical URLs should support sub-domains.&lt;/li&gt;      &lt;li&gt;Several Accessibility fixes. (High DPI, Truncation in small resolutions, Hotkeys, Keyboard navigation, etc).&lt;/li&gt;      &lt;li&gt;Several fixes for Right-To-Left languages. (Layout and UI)&lt;/li&gt;      &lt;li&gt;Help shortcuts enabled.&lt;/li&gt;      &lt;li&gt;New Context Menus for Copying content&lt;/li&gt;      &lt;li&gt;Add link position information for Canonical URLs&lt;/li&gt;      &lt;li&gt;Remove x-javascript validation for this release&lt;/li&gt;      &lt;li&gt;Robots algorithm should be case sensitive&lt;/li&gt;      &lt;li&gt;many more&lt;/li&gt;   &lt;/ol&gt; &lt;/ol&gt;  &lt;p&gt;This version can upgrade both Beta 1 and Beta 2 version so go ahead and &lt;a href="http://go.microsoft.com/?linkid=9695987" target="_blank"&gt;try it&lt;/a&gt; and PLEASE provide us with feedback and any additional things you would like to see for the next version at the &lt;a href="http://forums.iis.net/1162.aspx" target="_blank"&gt;SEO Forum in the IIS Web site&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://go.microsoft.com/?linkid=9695987" target="_blank"&gt;Click here to install the IIS SEO Toolkit&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9923857" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/_YSeqGfpfAM" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS+Manager/">IIS Manager</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2009/11/17/announcing-iis-seo-toolkit-v1-0-release.aspx</feedburner:origLink></item><item><title>IIS SEO Toolkit Presentation at DevConnections</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/Ht81cppqxxs/iis-seo-toolkit-presentation-at-devconnections.aspx</link><pubDate>Wed, 11 Nov 2009 16:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9920889</guid><dc:creator>CarlosAg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9920889</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2009/11/11/iis-seo-toolkit-presentation-at-devconnections.aspx#comments</comments><description>&lt;P&gt;Yesterday I presented the session "AMS04: Boost Your Site’s Search Ranking with the IIS Search Engine Optimization Toolkit" at the ASP.NET Connections, it was fun to talk to a few attendees that had several questions around the tool and SEO in general. It is always really interesting learning about all the unique environments and types of applications that are being built and how the SEO Toolkit can help them.&lt;/P&gt;
&lt;P&gt;&lt;A title="IIS SEO Toolkit slides" href="http://www.carlosag.net/downloads/Aguilar-DevConnections-AMS04-IIS-SEO-Toolkit.zip" mce_href="http://www.carlosag.net/downloads/Aguilar-DevConnections-AMS04-IIS-SEO-Toolkit.zip"&gt;Here are the IIS SEO Toolkit slides that I used&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.iis.net/extensions/SEOToolkit" target=_blank mce_href="http://www.iis.net/extensions/SEOToolkit"&gt;Here you can find the IIS SEO Toolkit download&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;And by far the easiest way to get it installed is using the &lt;A href="http://weblogs.asp.net/scottgu/archive/2009/06/02/microsoft-web-platform-installer.aspx" target=_blank mce_href="http://weblogs.asp.net/scottgu/archive/2009/06/02/microsoft-web-platform-installer.aspx"&gt;Microsoft Web Platform Installer&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Please send any question and feedback at &lt;A href="http://forums.iis.net/1162.aspx" target=_blank mce_href="http://forums.iis.net/1162.aspx"&gt;IIS SEO Toolkit Forums&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;And by the way, stay tuned for the RTW version of IIS SEO Toolkit coming SOON.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9920889" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/Ht81cppqxxs" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2009/11/11/iis-seo-toolkit-presentation-at-devconnections.aspx</feedburner:origLink></item><item><title>IIS SEO Toolkit – Report Comparison</title><link>http://feedproxy.google.com/~r/CarlosAg/~3/9RUGq13FJXo/iis-seo-toolkit-report-comparison.aspx</link><pubDate>Wed, 11 Nov 2009 00:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9920523</guid><dc:creator>CarlosAg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.msdn.com/b/carlosag/rsscomments.aspx?WeblogPostID=9920523</wfw:commentRss><comments>http://blogs.msdn.com/b/carlosag/archive/2009/11/11/iis-seo-toolkit-report-comparison.aspx#comments</comments><description>&lt;P&gt;One of my favorites features in the IIS Search Engine Optimization (SEO) Toolkit is what we called Report Comparison. Report Comparison basically allows you to compare two different versions of the results of crawling the same site to see what changed in between. This is a really convenient way to track not only changes in terms of SEO violations but also to be able to compare any attributes on the pages such as Title, Heading, Description, Links, Violations, etc. &lt;/P&gt;
&lt;H2&gt;How to access the feature&lt;/H2&gt;
&lt;P&gt;There are a couple of ways to get to this feature.&lt;/P&gt;
&lt;P&gt;1) Use the Compare Reports task. While in the Site Analysis Reports listing you can select two reports by using Ctrl+Click, and if both reports are compatible (e.g. they use the same Start URL) the task "Compare Reports" will be shown. Just clicking on that will get you the comparison.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsTask_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsTask_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=CompareReportsTask border=0 alt=CompareReportsTask src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsTask_thumb.png" width=244 height=150 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsTask_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;2) Use the Compare to another report menu item. While in the Dashboard view of a Report you can use the "Report-&amp;gt;Compare To Another Report" menu item which will show a dialog where you can either select an existing report or even start a new analysis to compare with.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsMenu_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsMenu_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=CompareReportsMenu border=0 alt=CompareReportsMenu src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsMenu_thumb.png" width=244 height=151 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareReportsMenu_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H2&gt;Report Comparison Page&lt;/H2&gt;
&lt;P&gt;In both cases you will get the Report Comparison Page displaying the results as shown in the next image.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareResults_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareResults_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=CompareResults border=0 alt=CompareResults src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareResults_thumb.png" width=244 height=175 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/CompareResults_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The Report Comparison page includes a couple of "sections" with data. At the very top it includes links showing the Name and the Date when the reports were ran. If you click on them it will open the report directly just as if you had used the Site Analysis report listing view. &lt;/P&gt;
&lt;P&gt;The next sections shows a lot of interesting built-in data such as:&lt;/P&gt;
&lt;TABLE border=0 cellSpacing=0 cellPadding=2 width="100%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;&lt;STRONG&gt;Total # of URLs&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD vAlign=top&gt;This basically shows the total # of URLs found in both versions. When clicking the link you will get the listing of URLs based on the version of the report you choose.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;New and Removed&lt;/TD&gt;
&lt;TD vAlign=top&gt;These are the number of new URLs that were either added in the new version or removed from the old version. &lt;BR&gt;When clicking the added link you will get the listing of URLs based on the new version of the report and if you click the removed link you will get the listing based on the old URLs.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;Changed and Unchanged&lt;/TD&gt;
&lt;TD vAlign=top&gt;These are the number of URLs that were modified or not modified. These are calculated by comparing the hashes of the files in both versions. &lt;BR&gt;When clicking the links you will get a query that displays a comparison of both versions of URLs showing their content length. (See below)&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;&lt;STRONG&gt;Total # of Violations&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD vAlign=top&gt;This shows the total # of violations found in both versions. &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;New in existing pages and Fixed in existing pages&lt;/TD&gt;
&lt;TD vAlign=top&gt;These are the number of violations introduced or removed on URLs that exist in both reports. &lt;BR&gt;When clicking the added link you will get the listing of violations based on the new version of the report and if you click the removed link you will get the listing based on the old violations.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;Introduced in new pages&lt;/TD&gt;
&lt;TD vAlign=top&gt;These are the number of violations introduced on URLs that are found only in the new report. &lt;BR&gt;When clicking the added link you will get the listing of violations based on the new version of the report.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;Fixed by page removal&lt;/TD&gt;
&lt;TD vAlign=top&gt;These are the number of violations that were removed due to the fact that their URLs were no longer found in the new report. &lt;BR&gt;When clicking the added link you will get the listing of violations based on the old version of the report.&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width="30%"&gt;&lt;STRONG&gt;Others&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD vAlign=top&gt;There are a number of additional reports which basically compare different attributes in URLs that are found in both reports. They compare things like Time Taken, Content Length, Status Code and # of Links. &lt;BR&gt;When clicking the links you will get the query that displays a comparison of both versions of the reports showing the relevant fields. (See below)&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Whenever you click the links you get a query dialog that you can customize just as any Query in the Query builder, where you can Add/Remove columns, add filters, etc.&lt;/P&gt;
&lt;P&gt;My favorite one is the "Modified URLs" source when you actually can add filters that compare URLs coming from the two different reports.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/QueryDialog_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/QueryDialog_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=QueryDialog border=0 alt=QueryDialog src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/QueryDialog_thumb.png" width=244 height=188 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/QueryDialog_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Note that when you double click or "right-click –&amp;gt; Compare Details" any of the rows you get a side-by-side comparison of everything in the URL:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=SideBySideDialog border=0 alt=SideBySideDialog src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog_thumb.png" width=244 height=153 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Again, you can use any of the tabs to see side-by-side things like the Content of the pages or the Links both versions have or the violations, or pretty much everything that you can see for just one.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog2_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog2_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=SideBySideDialog2 border=0 alt=SideBySideDialog2 src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog2_thumb.png" width=244 height=157 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideDialog2_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Finally, you can also right click on the Query dialog and choose "Compare Contents". This will launch whatever File Comparison tool you have configured using the "Edit Feature Settings". In this case I have configured WinDiff.exe which shows something like:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideContents_2.png" mce_href="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideContents_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=SideBySideContents border=0 alt=SideBySideContents src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideContents_thumb.png" width=244 height=165 mce_src="http://blogs.msdn.com/blogfiles/carlosag/WindowsLiveWriter/IISSEOToolkitReportComparison_C4D3/SideBySideContents_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H3&gt;Summary&lt;/H3&gt;
&lt;P&gt;As you can see Report Comparison offers is a powerful feature that allows you to keep track of changes between two different reports. This easily allows you to understand over time how your site has been affected by changes. For Site managers it will allow them to query and maintain a history with all the changes. You can imagine that using an automated build process that runs IIS SEO Toolkit crawling whenever a build is made that keeps the report stored somewhere and potentially annotate it with the build number you could even keep a correlation of changes in code with Web site crawling.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9920523" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/CarlosAg/~4/9RUGq13FJXo" height="1" width="1"/&gt;</description><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS/">IIS</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/IIS+Manager/">IIS Manager</category><category domain="http://blogs.msdn.com/b/carlosag/archive/tags/SEO/">SEO</category><feedburner:origLink>http://blogs.msdn.com/b/carlosag/archive/2009/11/11/iis-seo-toolkit-report-comparison.aspx</feedburner:origLink></item></channel></rss>
