<?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:cs="http://blogs.iis.net/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Just Another IIS Blog</title><link>http://blogs.iis.net/thomad/default.aspx</link><description>Zeitgeistiges about IIS</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/JustAnotherIISBlog" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>IIS7 and Failover Clustering</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/AQ4zn146iDQ/iis7-and-failover-clustering.aspx</link><pubDate>Tue, 27 Oct 2009 07:00:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3478770</guid><dc:creator>thomad</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.iis.net/thomad/rsscomments.aspx?PostID=3478770</wfw:commentRss><wfw:comment>http://blogs.iis.net/thomad/commentapi.aspx?PostID=3478770</wfw:comment><comments>http://blogs.iis.net/thomad/archive/2009/10/27/iis7-and-failover-clustering.aspx#comments</comments><description>&lt;P&gt;We recently published an &lt;A href="http://support.microsoft.com/kb/970759/" target=_blank mce_href="http://support.microsoft.com/kb/970759/"&gt;article&lt;/A&gt; on how to enable failover clustering for IIS7 and Microsoft Cluster Service (MSCS). MSCS provides failover and increased availability of applications by failing over to a second machine that is on stand-by or by just taking the sick machine out of the network so that no requests are routed to it anymore. &lt;/P&gt;
&lt;P&gt;There is a fundamental problem with configuring failover clustering for IIS however: IIS in itself is not an application; IIS is an application&amp;nbsp;platform and it's hard to come up with a clear yay or nay when to fail over. We don't know enough to decide if an application is terminally sick and can't recover. Is it when a web application returns 500 errors, when the application is overloaded and TCP connections can't be established anymore, when its Application Pool crashes repeatedly? What if more than one application is hosted on the IIS machine?&amp;nbsp;Should IIS only fail over when W3SVC is terminated? Should IIS fail over if one of the web applications is dead, when 50% of the apps are dead? 90%?&amp;nbsp; &lt;/P&gt;
&lt;P&gt;There is no good way to make these decisions without involving the people managing the IIS machine and the web application developers that run code on the IIS box. And that's why we decided to publish sample code that somebody can take and adjust for their specific needs. &lt;/P&gt;
&lt;P&gt;The sample code in the &lt;A href="http://support.microsoft.com/kb/970759/" target=_blank mce_href="http://support.microsoft.com/kb/970759/"&gt;article&lt;/A&gt; is a script that can be configured as a &lt;A href="http://msdn.microsoft.com/en-us/library/aa373089(VS.85).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/aa373089(VS.85).aspx"&gt;Generic Script Resource&lt;/A&gt; in the MSCS service. The script monitors the run-time status of the IIS7 "Default Web Site" and IIS7 "DefaultAppPool" and will trigger a fail over if one of them is stopped. It is trivial to change the Site or Application Pool name in the script and it should be easy for a developer familiar with VBScript to add some custom functionality to this script. &lt;/P&gt;
&lt;P&gt;Happy fail over!&lt;/P&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3478770" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/AQ4zn146iDQ" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.iis.net/thomad/archive/2009/10/27/iis7-and-failover-clustering.aspx</feedburner:origLink></item><item><title>Kerberos Authentication Issues</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/6_l56CrHgHg/kerberos-authentication-issues.aspx</link><pubDate>Sat, 24 Oct 2009 05:30:58 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3474780</guid><dc:creator>thomad</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.iis.net/thomad/rsscomments.aspx?PostID=3474780</wfw:commentRss><wfw:comment>http://blogs.iis.net/thomad/commentapi.aspx?PostID=3474780</wfw:comment><comments>http://blogs.iis.net/thomad/archive/2009/10/23/kerberos-authentication-issues.aspx#comments</comments><description>&lt;p&gt;We ran into some problems with Kerberos authentication lately and this forced me to unearth the knowledge I once had about Kerberos. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Issue:     &lt;br /&gt;&lt;/strong&gt;Some Microsoft employees ran into &lt;a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes" target="_blank"&gt;400 errors&lt;/a&gt; when accessing certain Intranet web pages. A 400 error is pretty much a bad request. Kerberos authentication was the cause for this problem. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Details:     &lt;br /&gt;&lt;/strong&gt;The web sites in question returned a &amp;quot;400 error - request too long&amp;quot; for content protected with IIS Windows Integrated Authentication. It turns out that people who faced this problem had an &lt;a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html" target="_blank"&gt;Authorization header&lt;/a&gt; that was larger than 16kB and that HTTP.SYS (the kernel-mode driver underneath IIS) has a request limit of 16kB, i.e. no request can be larger than 16kB by default. &lt;/p&gt;  &lt;p&gt;The problem and the fix - increasing the maximum header size and the maximum request size of HTTP.SYS - is described in this &lt;a href="http://support.microsoft.com/kb/970875" target="_blank"&gt;KB article&lt;/a&gt;. So why would the Kerberos Authorization get larger than 16kB? Turns out that the Kerberos ticket which is encoded in the Authorization header contains all group memberships of the user who wants to authenticate against the web server. The more groups a user is a member of the larger the Authorization header gets. The magic number of group memberships seems to be around 300. &lt;/p&gt;  &lt;p&gt;So here are a couple of ways to investigate the problem if you think you run into similar issues:&lt;/p&gt;  &lt;p&gt;1) The whoami tool can tell you your group memberships: &lt;/p&gt;  &lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;   &lt;pre id="codeSnippet" class="csharpcode"&gt;whoami /groups &lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;2) Here is a piece of ASP.NET code that tells you how big the authorization header is and the group memberships of the authenticating user (just save the file as kerb_check.aspx in your wwwroot directory and turn Windows Integrated authentication on and anonymous authentication off):&lt;/p&gt;

&lt;blockquote&gt;
  &lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
    &lt;div id="codeSnippetWrapper" class="csharpcode-wrapper"&gt;
      &lt;pre id="codeSnippet" class="csharpcode"&gt;&amp;lt;%@Language =&lt;span class="str"&gt;&amp;quot;C#&amp;quot;&lt;/span&gt;%&amp;gt;&lt;br /&gt;&amp;lt;%  &lt;br /&gt;    &lt;span class="kwrd"&gt;int&lt;/span&gt; authHeaderSize = 0; &lt;br /&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; username = Request.ServerVariables[&lt;span class="str"&gt;&amp;quot;AUTH_USER&amp;quot;&lt;/span&gt;]; &lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (username == &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)&lt;br /&gt;    {&lt;br /&gt;        Response.Write(&lt;span class="str"&gt;&amp;quot;&amp;lt;br/&amp;gt;Authentication is not enabled&amp;quot;&lt;/span&gt;);    &lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        authHeaderSize = Request.Headers[&lt;span class="str"&gt;&amp;quot;Authorization&amp;quot;&lt;/span&gt;].Length;&lt;br /&gt;        Response.Write(&lt;span class="str"&gt;&amp;quot;&amp;lt;h2&amp;gt;Size of &amp;quot;&lt;/span&gt; + &lt;br /&gt;                        username + &lt;br /&gt;                        &lt;span class="str"&gt;&amp;quot;'s Authorization header: &amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;&amp;quot;&lt;/span&gt; + &lt;br /&gt;                        authHeaderSize + &lt;br /&gt;                        &lt;span class="str"&gt;&amp;quot;&amp;lt;/b&amp;gt; bytes. &amp;lt;p/&amp;gt;&amp;lt;/h2&amp;gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;        Response.Write(&lt;span class="str"&gt;&amp;quot;&amp;lt;h2&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;Group Memberships for user &amp;quot;&lt;/span&gt; + username + &lt;span class="str"&gt;&amp;quot;:&amp;lt;/b&amp;gt;&amp;lt;/h2&amp;gt;&amp;quot;&lt;/span&gt;);&lt;br /&gt;        &lt;span class="kwrd"&gt;int&lt;/span&gt; count=0;&lt;br /&gt;        System.Security.Principal.WindowsIdentity winId = &lt;br /&gt;                (System.Security.Principal.WindowsIdentity)HttpContext.Current.User.Identity;&lt;br /&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (System.Security.Principal.IdentityReference ir &lt;span class="kwrd"&gt;in&lt;/span&gt; winId.Groups)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                Response.Write(&lt;span class="str"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;quot;&lt;/span&gt; + &lt;br /&gt;                               ((System.Security.Principal.NTAccount)ir.Translate&lt;br /&gt;                               (&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(System.Security.Principal.NTAccount))).Value);   &lt;br /&gt;                count++;   &lt;br /&gt;            }&lt;br /&gt;            &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception inner)&lt;br /&gt;            {&lt;br /&gt;                Response.Write(&lt;span class="str"&gt;&amp;quot;&amp;lt;br/&amp;gt; --- cannot resolve group ---&amp;quot;&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        Response.Write(&lt;span class="str"&gt;&amp;quot;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;b&amp;gt;You are member of &amp;quot;&lt;/span&gt; + count + &lt;span class="str"&gt;&amp;quot; groups.&amp;lt;/b&amp;gt;&amp;quot;&lt;/span&gt;); &lt;br /&gt;    }   &lt;br /&gt; %&amp;gt;&lt;/pre&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Session-based Authentication
    &lt;br /&gt;&lt;/strong&gt;Another problem I discovered while looking at the issue: when Kerberos authentication is used IIS7 and IIS 7.5 force the re-authentication of every request. This is unfortunate because it doesn't scale well. Just imagine a single html page with 50 images. If your Kerberos header is 10kB Internet Explorer sends 510kB (51 requests x10kB authorization header) only for authentication purposes. &lt;/p&gt;

&lt;p&gt;When NTLM is used on the other hand, session-based authentication is enabled. If session-based authentication is enabled authentication only has to be done per TCP/IP session. This scales much better because Internet Explorer usually creates only &lt;a href="http://msdn.microsoft.com/en-us/library/cc304129(VS.85).aspx" target="_blank"&gt;2 to 6 TCP/IP connections&lt;/a&gt; to a web server. HTTP requests are then done within these TCP/IP sessions, i.e. the connections are reused to make multiple requests. So if session-based authentication is enabled instead of sending 510kb authentication headers only 20-60kb authentication headers will be sent by IE. &lt;/p&gt;

&lt;p&gt;I'm still investigating why session-based authentication is not used for Kerberos - I hope there is a good reason for it :). There is a configuration property in IIS7.x that allows you to switch Kerberos to session-based authentication. It is the AuthPersistNonNTLM property. If you want to turn on server-wide session-based authentication for Kerberos here is your command: &lt;/p&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;pre class="csharpcode"&gt;&lt;br /&gt;%windir%\system32\inetsrv\appcmd.exe set config -section:windowsAuthentication /authPersistNonNTLM:&lt;span class="str"&gt;&amp;quot;True&amp;quot;&lt;/span&gt; /commit:apphost&lt;/pre&gt;
&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;That's it for today. &lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;&amp;#160;&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;Thomas&lt;/div&gt;

&lt;div class="csharpcode-wrapper"&gt;
  &lt;br /&gt;&lt;/div&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3474780" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/6_l56CrHgHg" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.iis.net/thomad/archive/2009/10/23/kerberos-authentication-issues.aspx</feedburner:origLink></item><item><title>Now Available: The IIS 7.5 Application Warm-Up Module</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/Ef7Iow3J0Lw/now-available-the-iis-7-5-application-warm-up-module.aspx</link><pubDate>Wed, 14 Oct 2009 21:15:31 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3458732</guid><dc:creator>thomad</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.iis.net/thomad/rsscomments.aspx?PostID=3458732</wfw:commentRss><wfw:comment>http://blogs.iis.net/thomad/commentapi.aspx?PostID=3458732</wfw:comment><comments>http://blogs.iis.net/thomad/archive/2009/10/14/now-available-the-iis-7-5-application-warm-up-module.aspx#comments</comments><description>&lt;p&gt;IIS is a demand-driven web server, i.e. IIS does things only when asked for. For example: an IIS worker process spawns up only when requests arrive for the sites that are hosted in this worker process. Without requests there isn't a worker process. This is great from a resource consumption point of view. Worker processes which don't run do not consume resources, memory in particular. &lt;/p&gt;  &lt;p&gt;There is a drawback to this architecture however. The first requests that get handled by a newly spawned worker process might have to wait longer due to the initialization costs of the web application(s) living within the worker process. Typical example of initialization activities are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Initialization of data structures &lt;/li&gt;    &lt;li&gt;Loading data from a datastore into memory&amp;#160; (caching) &lt;/li&gt;    &lt;li&gt;Compilation of code, e.g. .NET applications &lt;/li&gt;    &lt;li&gt;Establishing database connections&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For big applications the initialization phase might take considerable time and IT administrators might not want their customers to pay the price for the initialization.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;To fix this problem IIS 7.5, which ships as part of Windows Server 2008 R2 and Windows 7, comes with a new capability that allows the warm-up of initialization-heavy web applications. &lt;/p&gt;  &lt;p&gt;The IIS Warm-Up module allows administrators or web application developers to configure a collection of URLs which will be executed before IIS accepts user requests for the web application in question. By executing the configured warm-up URLs data structures and caches will be initialized and requests arriving from the network will not experience any initialization delays.&lt;/p&gt;  &lt;p&gt;More information and the download locations for the Application Warm-Up for IIS 7.5 can be found on &lt;a href="http://www.iis.net/extensions/ApplicationWarmUp"&gt;http://www.iis.net/extensions/ApplicationWarmUp&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3458732" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/Ef7Iow3J0Lw" height="1" width="1"/&gt;</description><category domain="http://blogs.iis.net/thomad/archive/tags/Application+Warm-Up/default.aspx">Application Warm-Up</category><category domain="http://blogs.iis.net/thomad/archive/tags/IIS+7.5/default.aspx">IIS 7.5</category><feedburner:origLink>http://blogs.iis.net/thomad/archive/2009/10/14/now-available-the-iis-7-5-application-warm-up-module.aspx</feedburner:origLink></item><item><title>What account is your AppPool running as?</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/hK0NnQTVMvw/what-account-is-your-apppool-running-as.aspx</link><pubDate>Sat, 28 Mar 2009 15:23:10 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:3045077</guid><dc:creator>thomad</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.iis.net/thomad/rsscomments.aspx?PostID=3045077</wfw:commentRss><wfw:comment>http://blogs.iis.net/thomad/commentapi.aspx?PostID=3045077</wfw:comment><comments>http://blogs.iis.net/thomad/archive/2009/03/28/what-account-is-your-apppool-running-as.aspx#comments</comments><description>&lt;p&gt;IIS 7.5 on Windows 7 and Windows Server 2008 R2 is changing the default Application Pool identity from NetworkService to virtual accounts with the name of the Application Pool itself. The Application Pool ‘DefaultAppPool’ will run as the virtual account with the name ‘DefaultAppPool’. Given this change I thought it might be useful to have a little script that lists all Application Pools and the accounts they are running as. Just copy the following script and save it as myAppPools.js.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;pre id="codeSnippet" class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; ahadmin = &lt;span class="kwrd"&gt;new&lt;/span&gt; ActiveXObject(&lt;span class="str"&gt;&amp;quot;Microsoft.ApplicationHost.AdminManager&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; APPPOOLSSECTION = &lt;span class="str"&gt;&amp;quot;system.applicationHost/applicationPools&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; APPHOSTROOT     = &lt;span class="str"&gt;&amp;quot;MACHINE/WEBROOT/APPHOST&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;Main();&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;function&lt;/span&gt; Main()&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;       &lt;span class="kwrd"&gt;var&lt;/span&gt; appPoolsSection = ahadmin.GetAdminSection(APPPOOLSSECTION, APPHOSTROOT);&lt;br /&gt;       WScript.Echo (&lt;span class="str"&gt;&amp;quot;Available Application Pools and Identities&amp;quot;&lt;/span&gt;);&lt;br /&gt;       WScript.Echo (&lt;span class="str"&gt;&amp;quot;==========================================&amp;quot;&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;       &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; i=0;i&amp;lt;appPoolsSection.Collection.Count;i++)&lt;br /&gt;       {&lt;br /&gt;          &lt;span class="kwrd"&gt;var&lt;/span&gt; appPool = appPoolsSection.Collection.Item(i);         &lt;br /&gt;          &lt;span class="kwrd"&gt;var&lt;/span&gt; appPoolName = appPool.Properties.Item(&lt;span class="str"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;).Value;&lt;br /&gt;          &lt;span class="kwrd"&gt;var&lt;/span&gt; processModel = appPool.GetElementByName(&lt;span class="str"&gt;&amp;quot;processModel&amp;quot;&lt;/span&gt;);&lt;br /&gt;          &lt;span class="kwrd"&gt;if&lt;/span&gt; (processModel.Properties.Item(&lt;span class="str"&gt;&amp;quot;identityType&amp;quot;&lt;/span&gt;).Value == 0) &lt;span class="rem"&gt;//LocalSystem&lt;/span&gt;&lt;br /&gt;          {            &lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;APPPOOL:     \t&amp;quot;&lt;/span&gt; + appPoolName);&lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;IDENTITYTYPE:\tLocalsystem&amp;quot;&lt;/span&gt;);&lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;USER:        \tLocalSystem&amp;quot;&lt;/span&gt;);&lt;br /&gt;          }&lt;br /&gt;    &lt;br /&gt;          &lt;span class="kwrd"&gt;if&lt;/span&gt; (processModel.Properties.Item(&lt;span class="str"&gt;&amp;quot;identityType&amp;quot;&lt;/span&gt;).Value == 1) &lt;span class="rem"&gt;//LocalService&lt;/span&gt;&lt;br /&gt;          {            &lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;APPPOOL:     \t&amp;quot;&lt;/span&gt; + appPoolName);&lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;IDENTITYTYPE:\tLocalService&amp;quot;&lt;/span&gt;);&lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;USER:        \tLocalService&amp;quot;&lt;/span&gt;);&lt;br /&gt;          }&lt;br /&gt;&lt;br /&gt;          &lt;span class="kwrd"&gt;if&lt;/span&gt; (processModel.Properties.Item(&lt;span class="str"&gt;&amp;quot;identityType&amp;quot;&lt;/span&gt;).Value == 2) &lt;span class="rem"&gt;//NetworkService&lt;/span&gt;&lt;br /&gt;          {            &lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;APPPOOL:     \t&amp;quot;&lt;/span&gt; + appPoolName);&lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;IDENTITYTYPE:\tNetworkService&amp;quot;&lt;/span&gt;);&lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;USER:        \tNetworkService&amp;quot;&lt;/span&gt;);&lt;br /&gt;          }&lt;br /&gt;          &lt;span class="kwrd"&gt;if&lt;/span&gt; (processModel.Properties.Item(&lt;span class="str"&gt;&amp;quot;identityType&amp;quot;&lt;/span&gt;).Value == 3) &lt;span class="rem"&gt;//Specific User&lt;/span&gt;&lt;br /&gt;          {            &lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;APPPOOL:     \t&amp;quot;&lt;/span&gt; + appPoolName);&lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;IDENTITYTYPE:\tSpecific User&amp;quot;&lt;/span&gt;);&lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;USER:        \t&amp;quot;&lt;/span&gt; + processModel.Properties.Item(&lt;span class="str"&gt;&amp;quot;userName&amp;quot;&lt;/span&gt;).Value);&lt;br /&gt;          }&lt;br /&gt;          &lt;span class="kwrd"&gt;if&lt;/span&gt; (processModel.Properties.Item(&lt;span class="str"&gt;&amp;quot;identityType&amp;quot;&lt;/span&gt;).Value == 4) &lt;span class="rem"&gt;//AppPool identity&lt;/span&gt;&lt;br /&gt;          {            &lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;APPPOOL:     \t&amp;quot;&lt;/span&gt; + appPoolName);&lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;IDENTITYTYPE:\tAppPoolIdentity&amp;quot;&lt;/span&gt;);&lt;br /&gt;             WScript.Echo (&lt;span class="str"&gt;&amp;quot;USER:        \t&amp;quot;&lt;/span&gt; + appPoolName);&lt;br /&gt;          }&lt;br /&gt;          WScript.Echo(&lt;span class="str"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt;);&lt;br /&gt;       }&lt;br /&gt;    }&lt;br /&gt;    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (e)&lt;br /&gt;    {&lt;br /&gt;       WScript.Echo(&lt;span class="str"&gt;&amp;quot;Script failed&amp;quot;&lt;/span&gt; + e.number);&lt;br /&gt;       WScript.Echo(e.description);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=3045077" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/hK0NnQTVMvw" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.iis.net/thomad/archive/2009/03/28/what-account-is-your-apppool-running-as.aspx</feedburner:origLink></item><item><title>Now available for download: Release Candidate of IIS PowerShell Snap-in</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/flJDLwG4oVs/now-available-for-download-release-candidate-of-iis-powershell-snap-in.aspx</link><pubDate>Fri, 16 Jan 2009 18:28:41 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2871898</guid><dc:creator>thomad</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.iis.net/thomad/rsscomments.aspx?PostID=2871898</wfw:commentRss><wfw:comment>http://blogs.iis.net/thomad/commentapi.aspx?PostID=2871898</wfw:comment><comments>http://blogs.iis.net/thomad/archive/2009/01/16/now-available-for-download-release-candidate-of-iis-powershell-snap-in.aspx#comments</comments><description>&lt;p&gt;We just made the &lt;a href="http://www.iis.net/extensions/PowerShell" target="_blank"&gt;Release Candidate of the IIS PowerShell Snap-in&lt;/a&gt; available. A lot of work was done between Tech Preview 2 and now. We focused mainly on augmenting the PowerShell Provider with almost 70 task-oriented cmdlets useful for day-to-day administrative tasks. Here is a quick categorization of the task-oriented cmdlets: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Mangement of Sites/Apps/Vdirs/AppPools (create/start/stop/remove/convert/recycle)&lt;/li&gt;    &lt;li&gt;Management of site bindings (add/change/remove)&lt;/li&gt;    &lt;li&gt;Management of Handlers and Modules/Managed Modules (add/change/remove)&lt;/li&gt;    &lt;li&gt;Enablement of Request Tracing&lt;/li&gt;    &lt;li&gt;Backup and Restore of IIS configuration&lt;/li&gt;    &lt;li&gt;Locking/unlocking of sections/elements/attributes&lt;/li&gt;    &lt;li&gt;Getting file system path for config files and web application content&lt;/li&gt;    &lt;li&gt;Access to run-time data, e.g.&lt;/li&gt;    &lt;li&gt;---Exploring currently executing requests&lt;/li&gt;    &lt;li&gt;---AppDomain Management&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/thomad/iisps_24FDB4A6.jpg"&gt;&lt;img title="iisps" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="452" alt="iisps" src="http://blogs.iis.net/blogs/thomad/iisps_thumb_14A23CED.jpg" width="812" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I added a new &lt;a href="http://learn.iis.net/page.aspx/492/powershell-snap-in-using-the-task-based-cmdlets-of-the-iis-powershell-snap-in/" target="_blank"&gt;walkthrough&lt;/a&gt; that uses some of the new task-oriented cmdlets. But there is an easier way to get started if you don’t want to read through the walkthrough. Just list the available cmdlets with &lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="3"&gt;get-command -pssnapin WebAdministration&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;This will display all the cmdlets available in the IIS7 PowerShell Snap-in. To find help on how to use a particular cmdlet you just have to type&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="3"&gt;get-help &amp;lt;cmdletname&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;For example:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="3"&gt;get-help New-WebSite&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;or &lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="3"&gt;get-help &amp;lt;cmdletname&amp;gt; –example&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;if you are only interested in an example how to use the cmdlet. &lt;/p&gt;  &lt;p&gt;Have fun!&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2871898" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/flJDLwG4oVs" height="1" width="1"/&gt;</description><category domain="http://blogs.iis.net/thomad/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/thomad/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://blogs.iis.net/thomad/archive/tags/IIS+6/default.aspx">IIS 6</category><category domain="http://blogs.iis.net/thomad/archive/tags/Search/default.aspx">Search</category><category domain="http://blogs.iis.net/thomad/archive/tags/Microsoft+IIS/default.aspx">Microsoft IIS</category><category domain="http://blogs.iis.net/thomad/archive/tags/command+line/default.aspx">command line</category><category domain="http://blogs.iis.net/thomad/archive/tags/Windows+Server/default.aspx">Windows Server</category><category domain="http://blogs.iis.net/thomad/archive/tags/how+to/default.aspx">how to</category><category domain="http://blogs.iis.net/thomad/archive/tags/WMI/default.aspx">WMI</category><category domain="http://blogs.iis.net/thomad/archive/tags/MVP/default.aspx">MVP</category><category domain="http://blogs.iis.net/thomad/archive/tags/server/default.aspx">server</category><category domain="http://blogs.iis.net/thomad/archive/tags/Application+Pools/default.aspx">Application Pools</category><category domain="http://blogs.iis.net/thomad/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.iis.net/thomad/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.iis.net/thomad/archive/tags/snap-in/default.aspx">snap-in</category><category domain="http://blogs.iis.net/thomad/archive/tags/application/default.aspx">application</category><category domain="http://blogs.iis.net/thomad/archive/tags/Windows+PowerShell/default.aspx">Windows PowerShell</category><category domain="http://blogs.iis.net/thomad/archive/tags/download/default.aspx">download</category><category domain="http://blogs.iis.net/thomad/archive/tags/IIS/default.aspx">IIS</category><feedburner:origLink>http://blogs.iis.net/thomad/archive/2009/01/16/now-available-for-download-release-candidate-of-iis-powershell-snap-in.aspx</feedburner:origLink></item><item><title>CTP2 of IIS7 PowerShell Provider Released!</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/N0o2h6C0llA/ctp2-of-iis7-powershell-provider-released.aspx</link><pubDate>Thu, 03 Jul 2008 17:06:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2465941</guid><dc:creator>thomad</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.iis.net/thomad/rsscomments.aspx?PostID=2465941</wfw:commentRss><wfw:comment>http://blogs.iis.net/thomad/commentapi.aspx?PostID=2465941</wfw:comment><comments>http://blogs.iis.net/thomad/archive/2008/07/03/ctp2-of-iis7-powershell-provider-released.aspx#comments</comments><description>&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;Tech Preview 2 of the IIS7 PowerShell Provider is now available for download.&amp;nbsp;&amp;nbsp;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /&gt;&lt;v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&amp;nbsp;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&amp;nbsp;&lt;/v:shapetype&gt;&lt;/SPAN&gt;&lt;/v:shapetype&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;v:shapetype stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;v:shapetype stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"&gt;&lt;/v:shapetype&gt;&lt;/SPAN&gt;&lt;/v:shapetype&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;&lt;STRONG&gt;What’s new in Tech Preview 2?&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-ansi-language: EN; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;IIS7 Powershell provider now supports SSL (installing and acquiring a certificate, creating an ssl site binding)&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Tech Preview 2 ships with 40 new cmdlets. All of these cmdlets are for day-to-day IIS tasks like creating web-sites, web-applications, enabled request tracing, adding a handler or a module.&amp;nbsp;The complete list is at &lt;A href="http://learn.iis.net/page.aspx/492/using-the-task-based-cmdlets" mce_href="http://learn.iis.net/page.aspx/492/using-the-task-based-cmdlets"&gt;&lt;SPAN style="COLOR: windowtext"&gt;http://learn.iis.net/page.aspx/492/using-the-task-based-cmdlets&lt;/SPAN&gt;&lt;/A&gt; &lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;&lt;STRONG&gt;IIS7 PowerShell Provider features: &lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;
&lt;UL type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list .5in"&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'"&gt;Create Web-Sites, Web Applications, Virtual Directories and Application Pools &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list .5in"&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'"&gt;Change Simple Configuration Properties on Web-Sites, Application Pools, Web Applications and Virtual Directories &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list .5in"&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'"&gt;Add and Change Complex Configuration Settings &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list .5in"&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'"&gt;Query Run-time Data (Web-Site State, Application Pool State, Currently Executing Requests) &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list .5in"&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'"&gt;Execute Advanced Configuration Tasks, Scripting, Integration with other PowerShell Snap-Ins and features &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l1 level1 lfo2; tab-stops: list .5in"&gt;&lt;SPAN lang=EN style="FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN; mso-fareast-font-family: 'Times New Roman'"&gt;Search and Discover Configuration Settings &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;DOWNLOAD:&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;Tech Preview 2 of the IIS 7.0 PowerShell Provider can be found here: &lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;
&lt;UL&gt;
&lt;LI&gt;x86: &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;A href="http://iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1664" mce_href="http://iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1664"&gt;&lt;FONT color=#0000ff&gt;&lt;A href="http://iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1664"&gt;http://iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1664&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;x64: &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;A href="http://iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1665" mce_href="http://iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1665"&gt;&lt;FONT color=#0000ff&gt;http://iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1665&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;FORUMS: &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;Go to our PowerShell forum if you need support or if you are looking for&amp;nbsp;'Tips and Tricks'&lt;BR&gt;&lt;A href="http://forums.iis.net/1151.aspx" mce_href="http://forums.iis.net/1151.aspx"&gt;&lt;FONT color=#0000ff&gt;&lt;A href="http://forums.iis.net/1151.aspx"&gt;http://forums.iis.net/1151.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;STRONG&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/STRONG&gt; 
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;STRONG&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;WALKTHROUGHS&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;B&gt;&lt;SPAN lang=EN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'"&gt;The walkthroughs are here: &lt;A href="http://learn.iis.net/page.aspx/447/managing-iis-with-the-iis-70-powershell-provider/" mce_href="http://learn.iis.net/page.aspx/447/managing-iis-with-the-iis-70-powershell-provider/"&gt;&lt;FONT color=#0000ff&gt;http://learn.iis.net/page.aspx/447/managing-iis-with-the-iis-70-powershell-provider/&lt;/FONT&gt;&lt;/A&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2465941" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/N0o2h6C0llA" height="1" width="1"/&gt;</description><category domain="http://blogs.iis.net/thomad/archive/tags/PowerShell/default.aspx">PowerShell</category><feedburner:origLink>http://blogs.iis.net/thomad/archive/2008/07/03/ctp2-of-iis7-powershell-provider-released.aspx</feedburner:origLink></item><item><title>Now Available: URL Rewriter Tech Preview 1 </title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/22Svu-p_8FE/now-available-url-rewriter-tech-preview-1.aspx</link><pubDate>Sat, 31 May 2008 00:31:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2391884</guid><dc:creator>thomad</dc:creator><slash:comments>8</slash:comments><wfw:commentRss>http://blogs.iis.net/thomad/rsscomments.aspx?PostID=2391884</wfw:commentRss><wfw:comment>http://blogs.iis.net/thomad/commentapi.aspx?PostID=2391884</wfw:comment><comments>http://blogs.iis.net/thomad/archive/2008/05/30/now-available-url-rewriter-tech-preview-1.aspx#comments</comments><description>&lt;P&gt;Today we are releasing Technical Preview 1 of the URL Rewrite Module for IIS 7.0.&lt;/P&gt;
&lt;P&gt;The URL Rewrite Module provides a rule-based rewriting mechanism for changing request URL’s before they get processed by IIS. The module supports regular expression based URL rewriting logic or a simpler wildcard-based URL rewriting logic. Rewriting decisions can be based on the URL, HTTP headers and server variables. While the primary purpose of the module is to rewrite URLs, it also has functionality to perform redirects, send custom responses and abort requests based on the logic expressed in the rewrite rules.&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Install the URL Rewrite Module today!&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.iis.net/Downloads/1691/ItemPermaLink.ashx" mce_href="http://www.iis.net/Downloads/1691/ItemPermaLink.ashx"&gt;Microsoft URL Rewrite Module for IIS 7.0 CTP1 (x86)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.iis.net/Downloads/1692/ItemPermaLink.ashx" mce_href="http://www.iis.net/Downloads/1692/ItemPermaLink.ashx"&gt;Microsoft URL Rewrite Module for IIS 7.0 CTP1 (x64)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Feature Set&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;Here is a quick feature overview: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Rules-based URL rewriting engine&lt;/STRONG&gt;. Rules are used to compare/match the request URL with and what to do if comparison was successful. &lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Regular expression pattern matching&lt;/STRONG&gt;. Rewrite rules can use &lt;A href="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf" mce_href="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf"&gt;ECMA-262&lt;/A&gt; compatible regular expression syntax for pattern matching. 
&lt;LI&gt;&lt;STRONG&gt;Wildcard pattern matching&lt;/STRONG&gt;. Rewrite rules can use Wildcard syntax for pattern matching &lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Back-references to patterns and conditions&lt;/STRONG&gt;. Back-references are used to capture parts of a matched URL so that it can be re-used later in a rule when constructing a substitution URL string. Back-references are available with regular expression and wildcards patterns. 
&lt;LI&gt;&lt;STRONG&gt;Global and distributed rewrite rules&lt;/STRONG&gt;. Global rules are used to define server-wide URL rewriting logic. Global rules cannot be overridden or disabled by lower configuration levels. Distributed rules are used to define URL rewriting logic specific to a particular configuration scope, e.g. an web application. 
&lt;LI&gt;&lt;STRONG&gt;Access to server variables and http headers&lt;/STRONG&gt;. Server variables and HTTP headers provide additional information about current HTTP request. This information can be used to make rewriting decisions or to compose the output URL. 
&lt;LI&gt;&lt;STRONG&gt;Various rule actions&lt;/STRONG&gt;. Instead of rewriting a URL, a rule may perform other actions, such as issue an HTTP redirect, abort the request, or send a custom status code to HTTP client. 
&lt;LI&gt;&lt;STRONG&gt;Rewrite maps&lt;/STRONG&gt;. Rewrite map is an arbitrary collection of name-value pairs that can be used within rewrite rules to generate the substitution URL during rewriting. Rewrite maps are particularly useful when you have a large set of rewrite rules, all of which use static strings (i.e. there is no pattern matching used). In those cases, instead of defining a large set of simple rewrite rules, you can put all the mappings between input URL and substitution URL as keys and values into the rewrite map, and then have one rewrite rule which references this rewrite map to look up substitution URL based on the input URL. 
&lt;LI&gt;&lt;STRONG&gt;UI for managing rewrite rules&lt;/STRONG&gt;. Rewrite rules can be added, removed and edited by using "URL Rewrite Module" feature in IIS Manager. 
&lt;LI&gt;&lt;STRONG&gt;GUI tool for importing of mod_rewrite rules&lt;/STRONG&gt;. URL rewrite module includes a GUI tool for converting rewrite rules from mod_rewrite format into IIS format.&lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;B&gt;More information&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/B&gt; 
&lt;P&gt;URL Rewrite Module Walkthroughs - &lt;A href="http://learn.iis.net/page.aspx/460/using-url-rewrite-module/" mce_href="http://learn.iis.net/page.aspx/460/using-url-rewrite-module/"&gt;http://learn.iis.net/page.aspx/460/using-url-rewrite-module/&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;URL Rewrite Module Configuration Reference - &lt;A href="http://learn.iis.net/page.aspx/465/url-rewrite-module-configuration-reference/" mce_href="http://learn.iis.net/page.aspx/465/url-rewrite-module-configuration-reference/"&gt;http://learn.iis.net/page.aspx/465/url-rewrite-module-configuration-reference/&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;B&gt;Questions and feedback&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;URL Rewrite Forum -&lt;A href="http://forums.iis.net/1152.aspx" mce_href="http://forums.iis.net/1152.aspx"&gt; http://forums.iis.net/1152.aspx&lt;/A&gt;&lt;/P&gt;
&lt;SCRIPT src="http://www.google-analytics.com/urchin.js" type=text/javascript&gt;
&lt;/SCRIPT&gt;

&lt;SCRIPT type=text/javascript&gt;
_uacct = "UA-2165857-2";
urchinTracker();
&lt;/SCRIPT&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2391884" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/22Svu-p_8FE" height="1" width="1"/&gt;</description><category domain="http://blogs.iis.net/thomad/archive/tags/IIS+News+Item/default.aspx">IIS News Item</category><category domain="http://blogs.iis.net/thomad/archive/tags/URL+Rewriter/default.aspx">URL Rewriter</category><feedburner:origLink>http://blogs.iis.net/thomad/archive/2008/05/30/now-available-url-rewriter-tech-preview-1.aspx</feedburner:origLink></item><item><title>IIS Discussion Digest: Edition 1</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/7knRTxIY2Tc/iis-discussion-digest-edition-1.aspx</link><pubDate>Sun, 11 May 2008 00:43:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2350144</guid><dc:creator>thomad</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.iis.net/thomad/rsscomments.aspx?PostID=2350144</wfw:commentRss><wfw:comment>http://blogs.iis.net/thomad/commentapi.aspx?PostID=2350144</wfw:comment><comments>http://blogs.iis.net/thomad/archive/2008/05/10/iis-discussion-digest-edition-1.aspx#comments</comments><description>&lt;p&gt;Many Microsoft folks use an internal alias to discuss their IIS issues. Each week plenty of interesting topics come up. I will try to pick the most interesting topics and blog them regularly. I was a bit late this week, but nonetheless here is Edition Numero One: &lt;/p&gt;  &lt;hr /&gt;&lt;font face="Courier New" size="2"&gt;&lt;b&gt;From: MF      &lt;br /&gt;Subject: RE: About HTTP Compression&lt;/b&gt;&lt;/font&gt;  &lt;p&gt;&lt;/p&gt; &lt;font face="Courier New" size="2"&gt;Hi All, &lt;/font&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;I remember not long ago there was a thread about what would be the minimum size of an output in order to take any advantage of having compression enabled.&amp;#160; Can somebody kindly forward that thread to me?&amp;#160; Or let me know what was the conclusion on that? &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;Tnks,      &lt;br /&gt;M. &lt;/font&gt;&lt;/p&gt; &lt;font face="Courier New" size="2"&gt;   &lt;hr /&gt;&lt;/font&gt;&lt;font face="Courier New" size="2"&gt;&lt;b&gt;From: JJ      &lt;br /&gt;Subject: RE: About HTTP Compression &lt;/b&gt;&lt;/font&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;Well, the simplistic answer is: if it is less than 2.8k compression doesn&amp;#8217;t help.&amp;#160; Why 2.8k?&amp;#160; Because default packet size is 1.4k with a minimum packets per send of 2.&amp;#160; So if you try to optimize for less than 2.8 k, you aren&amp;#8217;t really doing anything because you aren&amp;#8217;t changing the number of packets &amp;#8211; which is what drives round trips.&amp;#160; &lt;br /&gt;Beyond that statement things get a bit confusing, because you never know how many packets the server is going to send (thanks to NT&amp;#8217;s TCP implementation and scalable windows sizes, etc).&amp;#160; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&lt;/font&gt;&lt;/p&gt; &lt;font face="Courier New" size="2"&gt;   &lt;hr /&gt;    &lt;hr /&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;b&gt;From: TK        &lt;br /&gt;Subject: IIS 6 Queuing from HTTP.SYS&lt;/b&gt;       &lt;br /&gt;Delivering some IIS training at present, and had a couple of questions I'm hoping to get some feedback on around Recycling and HTTP.SYS Queuing:       &lt;br /&gt;-&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; When recycling a healthy process, is the terminating process able to send any outstanding responses after the new worker process is established? Or is the point at which the new process is registered the point at which the old HTTP.SYS response queue is invalidated? I suspect it's alive for the lifetime of the process, but I'm still reading the docs.       &lt;br /&gt;-&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; When recycling a hung application pool, does the new worker process inherit the requests currently in the HTTP.SYS queue for that namespace (assuming the app pool hasn't been picking requests up from the kernel queue for a while), or does the new w3wp only pull new requests from after it starts up?       &lt;br /&gt;Thanks!       &lt;br /&gt;      &lt;hr /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;b&gt;From: AK        &lt;br /&gt;Subject: RE: IIS 6 Queuing from HTTP.SYS &lt;/b&gt;      &lt;br /&gt;1)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WAS recycling works be creating a new Worker Process including its queue and http.sys routing new requests to that queue. The &amp;quot;old&amp;quot; WP is left for draining its queue (unless a timeout is reached&amp;#8230; in that case WAS terminates the lingering WP).       &lt;br /&gt;2)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; The above is called &amp;#8220;overlapped&amp;#8221; recycling. You can (but shouldn&amp;#8217;t IMHO) configure non-overlapped recycling. In that case the old WP termination is waited for before a new Worker Process is spun up. I don&amp;#8217;t know by heart who owns the queuing of the requests coming in during the time window where the old WP is starting shutdown and the new didn&amp;#8217;t yet start.       &lt;br /&gt;I hope this helps.       &lt;br /&gt;ciao,       &lt;br /&gt;A.       &lt;br /&gt;      &lt;hr /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;b&gt;From: TD        &lt;br /&gt;Subject: RE: IIS 6 Queuing from HTTP.SYS &lt;/b&gt;      &lt;br /&gt;2) Regarding &amp;quot;who is queuing requests coming in during the time window where the old WP is starting shutdown&amp;quot;:       &lt;br /&gt;It's HTTP.SYS. When IIS starts (WAS in IIS7 or W3SVC in IIS6) it reads configuration and configures HTTP.SYS. HTTP.SYS creates a request queue and starts listening on the network for requests. No worker processes are running. HTTP.SYS asks WAS/W3SVC to start a worker process when the first request arrives. Once the worker process is running it picks up requests from the HTTP.SYS request queue. Requests in the request queue don't get lost if the worker process is recycled or simply crashes. They simply sit in the HTTP.SYS request queue and wait until a new worker process picks them up.       &lt;br /&gt;T.       &lt;br /&gt;      &lt;hr /&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font face="Courier New"&gt;&lt;b&gt;From: AT        &lt;br /&gt;Subject: RE: IIS 6 Queuing from HTTP.SYS &lt;/b&gt;      &lt;br /&gt;Above is true unless the request is already dispatched to a worker process and the Worker Process was in the middle of sending the response when it crashed. Otherwise associated connection will be aborted. As it is not possible to recover after the Worker Process started sending the response. This is also one of the reasons why draining is necessary as indicated by A. above.       &lt;br /&gt;      &lt;hr /&gt;&lt;/font&gt;&lt;/font&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2350144" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/7knRTxIY2Tc" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.iis.net/thomad/archive/2008/05/10/iis-discussion-digest-edition-1.aspx</feedburner:origLink></item><item><title>The IIS Process Model Features</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/kW_7QgyY_H0/the-iis-process-model-features.aspx</link><pubDate>Thu, 08 May 2008 06:08:48 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2344705</guid><dc:creator>thomad</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.iis.net/thomad/rsscomments.aspx?PostID=2344705</wfw:commentRss><wfw:comment>http://blogs.iis.net/thomad/commentapi.aspx?PostID=2344705</wfw:comment><comments>http://blogs.iis.net/thomad/archive/2008/05/07/the-iis-process-model-features.aspx#comments</comments><description>&lt;p&gt;A process model is needed to run more than one web-site, web application or web-service securely and reliably on a single machine. In Shared Hosting scenarios hundreds or even thousands of web-sites run on an individual machine. The code running on these web-sites is usually not well tested, if at all. Without a powerful process model the result would be extremely poor reliability. But a process model not only guarantees availability; it also needs to isolate them so that individual web applications don't interfere with each other. &lt;/p&gt;  &lt;p&gt;The Windows Process Activation Service (WAS) is the system component providing the Process Model in IIS 7.0. This article discusses the WAS features and functions. &lt;/p&gt;  &lt;h2&gt;1. Application Pools&lt;/h2&gt;  &lt;p&gt;Processes are the containers that provide isolation and security boundaries in the Windows Operating System. Consequently web applications or web-sites have to run in separate processes in order to achieve isolation between them. In the IIS terminology the management unit for these separate IIS processes is called 'Application Pool'. &lt;/p&gt;  &lt;p&gt;An Application Pool can be configured to run a group of URLs, i.e. web-sites, web applications or web-services. When a client requests one of these Application Pool URLs an IIS worker process (w3wp.exe) is spawned by WAS to execute the code necessary to send a response. WAS's main task is to manage Application Pools - WAS spawns worker processes, monitors their health, recycles them if necessary and makes sure none of them consume more resources than specified in the corresponding AppPool configuration. WAS is also the arbiter and collector for run-time and state data, e.g. performance counters, site and Application Pool state. &lt;/p&gt;  &lt;h2&gt;2. Architectural Diagram &lt;/h2&gt;  &lt;p&gt;The diagram below shows the core pieces of the IIS7 architecture.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Configuration is stored in the applicationhost.config file (left).&amp;#160; &lt;/li&gt;    &lt;li&gt;HTTP.SYS is a kernel-mode component that listens to the network, accepts connections, assigns requests into Application Pool queues and queues these requests if no IIS worker process is running. HTTP.SYS also caches responses and does SSL in IIS 7.0 &lt;/li&gt;    &lt;li&gt;The worker process on the right hosts all custom code (e.g. ASP and ASP.Net pages, modules, ISAPI filter and extensions etc.). There can be hundreds of these worker processes depending on how the IIS Administrator decides to isolate his web-sites and applications. IIS worker processes pick up waiting requests from the corresponding HTTP.SYS request queue. &lt;/li&gt;    &lt;li&gt;The Windows Activation Service is a system service that runs in SVCHOST.EXE. WAS reads configuration from applicationhost.config, reacts to configuration changes, manages worker processes, controls their live time and health, recycles them if necessary and prevents resource exhaustion. W3SVC is another service living in the same SVCHOST.EXE as WAS. W3SVC hosts the HTTP specific part of the IIS process model; W3SVC configures HTTP.SYS with the URLs to listen on and is called by HTTP.SYS if requests arrive and worker processes are needed. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/TheIISProcessModelFeatures_1402B/procmod_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="379" alt="procmod" src="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/TheIISProcessModelFeatures_1402B/procmod_thumb.jpg" width="509" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;3. Process Model Features&lt;/h2&gt;  &lt;p&gt;Web-Sites and applications get the following benefits by running in the WAS provided infrastructure:&lt;/p&gt;  &lt;h3&gt;Efficient Resource Management&lt;/h3&gt;  &lt;h4&gt;On-Demand Activation&lt;/h4&gt;  &lt;p&gt;Resources like RAM and CPU are scarce in multi-tenant scenarios. WAS will start an IIS worker process only once requests for a particular web site or web application arrive. &lt;/p&gt;  &lt;h4&gt;Idle-timeout&lt;/h4&gt;  &lt;p&gt;Because resources are usually scarce WAS can shutdown web applications based on a configurable idle-timeout. &lt;/p&gt;  &lt;h4&gt;Health Monitoring&lt;/h4&gt;  &lt;p&gt;To ensure their health WAS monitors the worker processes it spawned. Health messages are periodically sent to each running worker process. If the worker process doesn't respond in a configurable time interval the worker process will be recycled or killed. This way undetected deadlocks in worker processes get automatically fixed by restarting the worker process. &lt;/p&gt;  &lt;h4&gt;Startup Limit&lt;/h4&gt;  &lt;p&gt;Part of the Rapid-Fail Protection feature is the Startup limit. If a worker process doesn't report back to WAS within the configurable startup-limit it will be killed and the Rapid-Fail-Protection counter is incremented. Application Pools are stopped, i.e. restarting the worker process will not be tried anymore, if the Rapid-Fail-Protection counter reaches a configurable limit within a configurable time limit. This prevents scenarios where worker processes hang or crash during startup. &lt;/p&gt;  &lt;h4&gt;Shutdown Limit&lt;/h4&gt;  &lt;p&gt;A worker process also has to shutdown in a configurable limit. If the shutdown doesn't happen in this time the worker process gets killed by WAS. This prevents resource overuse due to processes hanging in their shut-down phase. Additional shutdown settings allow an executable to be started (e.g. a debugger) when the shutdown doesn't complete within the allotted time. &lt;/p&gt;  &lt;h4&gt;CPU affinity&lt;/h4&gt;  &lt;p&gt;Configuration settings allow WAS to start worker processes that are affinitized to one or more CPUs. This prevents tenants from interfering with each other if they share the same physical machine. &lt;/p&gt;  &lt;h4&gt;User Profile&lt;/h4&gt;  &lt;p&gt;WAS can start worker processes with or without loading the user profile. &lt;/p&gt;  &lt;h3&gt;Security &lt;/h3&gt;  &lt;h4&gt;Customizable User Account&lt;/h4&gt;  &lt;p&gt;IIS worker processes can run as a preconfigured process identity or built-in accounts (LocalService, LocalSystem, NetworkService). Built-in accounts are advantages because they don't require password management. If a custom user identity is used the password is automatically encrypted. Configuration settings can be replicated to multiple machines by sharing the configuration encryption keys across machines. &lt;/p&gt;  &lt;h3&gt;Job Object Features&lt;/h3&gt;  &lt;p&gt;Job objects allow administrators to restrict worker processes to a particular CPU limit. A configurable action is taken if this CPU limit is exceeded. Job objects will also make sure that processes spawned by the worker process get terminated. &lt;/p&gt;  &lt;h3&gt;Configuration Isolation and Security&lt;/h3&gt;  &lt;p&gt;Before WAS starts an Application Pool and its worker process it generates a unique configuration file for this Application Pool. WAS also creates a unique SID for each Application Pool (similar to Service SIDs introduced in Windows Server 2008). The Application Pool configuration file is then secured with this unique SID. This ensures that Application Pool configuration files can only be read by Administrators and the Application Pool itself. &lt;/p&gt;  &lt;h3&gt;Diagnostics and Monitoring&lt;/h3&gt;  &lt;h4&gt;Event Logging&lt;/h4&gt;  &lt;p&gt;Events regarding invalid configuration, recycling, startup or shutdown of worker processes are reported to the System Eventlog. &lt;/p&gt;  &lt;h4&gt;Currently Executing Requests&lt;/h4&gt;  &lt;p&gt;WAS exposes a run-time and state control interface that allows scripts and tools to query for the currently executing requests of a particular worker process. This is useful to find requests that hang or requests that take a very long time to complete. &lt;/p&gt;  &lt;h4&gt;Performance Counters&lt;/h4&gt;  &lt;p&gt;All IIS performance counters get funneled through WAS. WAS gathers these performance counters because IIS counters are site-based and web applications can live in different Application Pools. &lt;/p&gt;  &lt;h3&gt;Recycling&lt;/h3&gt;  &lt;p&gt;Recycling allows the refresh of worker processes without losing a single request due to down-time. This is done via a feature called &amp;quot;overlapping recycling&amp;quot;. &lt;/p&gt;  &lt;h4&gt;Overlapping Recycling&lt;/h4&gt;  &lt;p&gt;WAS does this by spawning up a new worker process parallel to the old one that is still handling requests. Once the new worker process is up it starts picking up requests from the request queue while the old worker process is instructed by WAS to stop picking up requests. Once the old worker process finishes all executing requests it shuts down. This feature is called &amp;quot;overlapping recycling&amp;quot;. It ensures that no requests are lost during a recycle. &lt;/p&gt;  &lt;h4&gt;Recycling Configuration&lt;/h4&gt;  &lt;p&gt;Recycling parameters are configurable in the IIS configuration system. &lt;/p&gt;  &lt;h4&gt;Scheduled Recycling &lt;/h4&gt;  &lt;p&gt;Customers might want to recycle their applications based on a regular schedule. Via configuration settings recycling can be scheduled periodically, e.g. every 4 hours, every day at 1am etc. &lt;/p&gt;  &lt;h4&gt;Recycling Based on Memory Consumption&lt;/h4&gt;  &lt;p&gt;Applications might leak memory over time. WAS can monitor the memory consumption of each worker processes to ensure that no worker process uses more than its preconfigured limit. Reaching a configured virtual or private memory threshold will trigger the recycling of a worker process. &lt;/p&gt;  &lt;h4&gt;Recycling Based on Number of Requests&lt;/h4&gt;  &lt;p&gt;Recycling can also be configured based on the number of requests a particular worker process handled. &lt;/p&gt;  &lt;h4&gt;Custom Recycling&lt;/h4&gt;  &lt;p&gt;Custom code can custom health statistics and trigger a recycling via an API call to the WAS run-time and state API's. &lt;/p&gt;  &lt;h4&gt;Process Orphaning&lt;/h4&gt;  &lt;p&gt;Some errors only happen in a production environment. Killing worker processes ensures up-time but troubleshooting of these errors becomes difficult, e.g. if the failing worker process needs to be debugged. The process orphaning feature in WAS allows worker processes to be recycled without killing the failed worker process. Now a debugger can be attached to it. Additional process orphaning settings allow the execution of a process (e.g. a debugger) if orphaning happens. &lt;/p&gt;  &lt;h3&gt;Application Pool State Management&lt;/h3&gt;  &lt;p&gt;Application Pools can be stopped, recycled or started via publicly available API's, e.g. if an application has to be taken offline or if recycling has to be done based on parameters different from what's configurable in the applicationhost.config file. &lt;/p&gt;  &lt;h3&gt;Additional WAS Features&lt;/h3&gt;  &lt;h4&gt;Load-Balancer Features&lt;/h4&gt;  &lt;p&gt;HTTP.SYS still listens on the network and will return a 500 HTTP error message if requests are not picked up by an Application Pool. This is a problem because for a Level 5 Load Balancers (TCP/IP) a 500 HTTP error looks like a valid TCP/IP connection. A WAS configuration setting can enable HTTP.SYS to reject connections instead of sending HTTP responses. &lt;/p&gt;  &lt;p&gt;WAS can be configured to start worker processes with the following settings: &lt;/p&gt;  &lt;h4&gt;WoW64 Support&lt;/h4&gt;  &lt;p&gt;WAS can start 32-Bit or 64-Bit worker processes. &lt;/p&gt;  &lt;h4&gt;.NET Framework Preload&lt;/h4&gt;  &lt;p&gt;WAS can be configured to preload a particular version of the .NET Framework. This can make the troubleshooting of version conflicts much easier. &lt;/p&gt;  &lt;h4&gt;Web Gardens&lt;/h4&gt;  &lt;p&gt;A Web Garden is the term for an Application Pool that runs with multiple worker processes. Requests get distributed among these worker process instances using a round-robin mechanism. &lt;/p&gt;  &lt;h3&gt;WAS Multi Protocol Support&lt;/h3&gt;  &lt;p&gt;WAS not only host the HTTP stack. It can also host other protocols via its Listen Adapter and Worker Process Framework. WCF services take advantage of the WAS Multi-Protocol support. WCF protocols come with their own Listeners (e.g. the NET.TCP, NET.MSMQ or NET.PIPE Listener). These Listeners connect to WAS using the Listener Adapter Interfaces WAS provides. &lt;/p&gt;  &lt;p&gt;Application protocols that take advantage of this infrastructure can host custom application code in the same .NET Application Domain as regular ASP.NET applications. They can also take advantage of the protocol-independent services the ASP.NET Hosting Environment provides, for example on-demand compilation, configuration support etc. &lt;/p&gt;  &lt;h2&gt;4. Summary&lt;/h2&gt;  &lt;p&gt;IIS7 and WAS offer a powerful process model for web-sites, web applications and web-services. It not only ensures availability but also ensures isolation and offers great troubleshooting and monitoring support. &lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2344705" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/kW_7QgyY_H0" height="1" width="1"/&gt;</description><category domain="http://blogs.iis.net/thomad/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/thomad/archive/tags/IIS+News+Item/default.aspx">IIS News Item</category><category domain="http://blogs.iis.net/thomad/archive/tags/Hosting/default.aspx">Hosting</category><category domain="http://blogs.iis.net/thomad/archive/tags/Process+Model/default.aspx">Process Model</category><category domain="http://blogs.iis.net/thomad/archive/tags/W3SVC/default.aspx">W3SVC</category><category domain="http://blogs.iis.net/thomad/archive/tags/WAS/default.aspx">WAS</category><category domain="http://blogs.iis.net/thomad/archive/tags/Architecture/default.aspx">Architecture</category><feedburner:origLink>http://blogs.iis.net/thomad/archive/2008/05/07/the-iis-process-model-features.aspx</feedburner:origLink></item><item><title>IISRESET light</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/AT7GCo4U8Bk/iisreset-light.aspx</link><pubDate>Tue, 06 May 2008 22:41:46 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2341569</guid><dc:creator>thomad</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;font size="1"&gt;Note: This blog entry used to be on my old blog. I'm about to shut it down so I thought I replicate some of the content here.     &lt;br /&gt;&lt;/font&gt;Many IIS customers use IISRESET to get IIS back into a vanilla state. IISRESET is a pretty heavy hammer however and not needed most of the time - why would you restart FTP, WAS and W3SVC and all worker processes just because one of your web applications is locking a DLL or some content. Recycling the Application Pool causing the problem is usually enough. If you don't know which Application Pool is making the trouble you can recycle all of them. Here is how you do it with APPCMD: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Recycling the Default Application Pool: &lt;/strong&gt;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;%windir%\system32\inetsrv\appcmd recycle AppPool DefaultAppPool &lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&lt;strong&gt;You can use the APPCMD piping feature to recycle all Application Pools: &lt;/strong&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;%windir%\system32\inetsrv\appcmd list apppools /xml | appcmd recycle apppools /&lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;/pre&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Save this command as &amp;quot;%windir%\system32\IISPOOLRESET.BAT&amp;quot; and use it instead of using IISRESET.EXE. It probably takes some time to overcome the muscle memory of typing IISRESET&amp;lt;enter&amp;gt;. &lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2341569" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/AT7GCo4U8Bk" height="1" width="1"/&gt;</description><category domain="http://blogs.iis.net/thomad/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/thomad/archive/tags/appcmd/default.aspx">appcmd</category><feedburner:origLink>http://blogs.iis.net/thomad/archive/2008/05/06/iisreset-light.aspx</feedburner:origLink></item><item><title>In a Nut Shell: Shared Hosting Improvements on IIS7</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/tL9QD1Z1_ek/in-a-nut-shell-shared-hosting-improvements-on-iis7.aspx</link><pubDate>Tue, 06 May 2008 07:43:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2339706</guid><dc:creator>thomad</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;We were meeting with &lt;a href="http://www.adhost.com/" target="_blank" mce_href="http://www.adhost.com/"&gt;AdHost&lt;/a&gt; today and I gave a quick 30-minute spiel on what we improved in IIS7 when it comes to Shared Hosting. Here is the list (not necessarily complete):&lt;/p&gt;  &lt;h2&gt;1) Shared Configuration&lt;/h2&gt;  &lt;p&gt;You can have the central IIS configuration file (applicationhost.config - the metabase is gone) on a central server and share it across multiple front ends. Not limited to Shared Hosting, but most Hosters love it. More info: &lt;a title="http://learn.iis.net/page.aspx/264/shared-configuration/" href="http://learn.iis.net/page.aspx/264/shared-configuration/" mce_href="http://learn.iis.net/page.aspx/264/shared-configuration/"&gt;http://learn.iis.net/page.aspx/264/shared-configuration/&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;2) Delegated Configuration&lt;/h2&gt;  &lt;p&gt;IIS configuration can be stored either centrally like in IIS 6.0 or a hoster can allow a customer to configure his own settings. No need to call up the hoster if default documents or authentication settings need to be changed. These settings can be delegated on a feature by feature basis or even on a per configuration property level. Delegated configuration settings are shared with ASP.NET in web.config files. More information: &lt;a title="http://learn.iis.net/page.aspx/157/how-to-use-configuration-delegation-in-iis-7/" href="http://learn.iis.net/page.aspx/157/how-to-use-configuration-delegation-in-iis-7/" mce_href="http://learn.iis.net/page.aspx/157/how-to-use-configuration-delegation-in-iis-7/"&gt;http://learn.iis.net/page.aspx/157/how-to-use-configuration-delegation-in-iis-7/&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;3) New Publishing Stack&lt;/h2&gt;  &lt;p&gt;IIS7 offers a brand-new publishing stack, i.e. FTP7 supporting SSL, WebDAV (map a drive in Explorer to connect to your web-site) and a new version of Frontpage Server Extensions. &lt;/p&gt;  &lt;p&gt;More information:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;FTP7: &lt;a title="http://learn.iis.net/page.aspx/356/ftp-7-for-iis-70/" href="http://learn.iis.net/page.aspx/356/ftp-7-for-iis-70/" mce_href="http://learn.iis.net/page.aspx/356/ftp-7-for-iis-70/"&gt;http://learn.iis.net/page.aspx/356/ftp-7-for-iis-70/&lt;/a&gt;       &lt;br /&gt;WebDAV: &lt;a title="http://learn.iis.net/page.aspx/357/webdav-for-iis-70/" href="http://learn.iis.net/page.aspx/357/webdav-for-iis-70/" mce_href="http://learn.iis.net/page.aspx/357/webdav-for-iis-70/"&gt;http://learn.iis.net/page.aspx/357/webdav-for-iis-70/&lt;/a&gt;       &lt;br /&gt;Frontpage Server Extensions: &lt;a title="http://learn.iis.net/page.aspx/358/frontpage-server-extensions-fpse-for-iis-70/" href="http://learn.iis.net/page.aspx/358/frontpage-server-extensions-fpse-for-iis-70/" mce_href="http://learn.iis.net/page.aspx/358/frontpage-server-extensions-fpse-for-iis-70/"&gt;http://learn.iis.net/page.aspx/358/frontpage-server-extensions-fpse-for-iis-70/&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h2&gt;4) Improved PHP Support&lt;/h2&gt;  &lt;p&gt;Wordpress, Drupal, phpBB are very popular and there are tons of other pre-packaged PHP applications out there. But PHP didn't run to well on the Windows platform. This changed with the FastCGI feature that was introduced for IIS 6.0 and 7.0. FastCGI is shipped as part of IIS in Windows Server 2008. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;FastCGI/PHP: &lt;a href="http://learn.iis.net/page.aspx/208/fastcgi-with-php/" mce_href="http://learn.iis.net/page.aspx/208/fastcgi-with-php/"&gt;http://learn.iis.net/page.aspx/208/fastcgi-with-php/&lt;/a&gt;       &lt;br /&gt;MySQL: &lt;a href="http://learn.iis.net/page.aspx/353/mysql-server/" mce_href="http://learn.iis.net/page.aspx/353/mysql-server/"&gt;http://learn.iis.net/page.aspx/353/mysql-server/&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And something else. The SQL Server drivers for PHP were slowing things down quite a bit. But not anymore. There is new PHP driver available written by the SQL Server team itself: &lt;a title="http://www.microsoft.com/downloads/details.aspx?familyid=85f99a70-5df5-4558-991f-8aee8506833c&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?familyid=85f99a70-5df5-4558-991f-8aee8506833c&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=85f99a70-5df5-4558-991f-8aee8506833c&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=85f99a70-5df5-4558-991f-8aee8506833c&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;5) Using Windows System Resource Manager for CPU Throttling&lt;/h2&gt;  &lt;p&gt;We are currently working on a new article that outlines how to use CPU Throttling for IIS Application Pools. WSRM allows a Hoster to make sure that no Application Pool monopolizes the CPU(s) of a particular machine. Here is a start: &lt;a title="http://learn.iis.net/page.aspx/449/using-wsrm-to-manage-iis-70-apppool-cpu-utilization/" href="http://learn.iis.net/page.aspx/449/using-wsrm-to-manage-iis-70-apppool-cpu-utilization/" mce_href="http://learn.iis.net/page.aspx/449/using-wsrm-to-manage-iis-70-apppool-cpu-utilization/"&gt;http://learn.iis.net/page.aspx/449/using-wsrm-to-manage-iis-70-apppool-cpu-utilization/&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;6) Directory Quota Support&lt;/h2&gt;  &lt;p&gt;Windows Server 2008 comes with a set of new file system features; one of them is the &amp;quot;File System Resource Manager&amp;quot; (FSRM) which supports directory quotas. With FSRM a Hoster can make sure the size of a directory doesn't get bigger than a configured limit. Soft limits generate an Eventlog entry or send e-mail, hard limits don't allow the files to be written at all. File Screens can ensure that certain file types and patterns are not uploaded. Hosters can also define individual templates that apply these settings in an uniform way. Directory quotas can be set via UI, via command-line tools or via scripting. More information: &lt;a title="http://learn.iis.net/page.aspx/195/enabling-directory-quotas/" href="http://learn.iis.net/page.aspx/195/enabling-directory-quotas/" mce_href="http://learn.iis.net/page.aspx/195/enabling-directory-quotas/"&gt;http://learn.iis.net/page.aspx/195/enabling-directory-quotas/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Configuration Example (only PowerShell for now):&lt;/em&gt;&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;param&lt;/span&gt; (    [string]$directory, 
    [int] $quotaLimit,
    [int] $threshold
);

$qMgr = new-object -com Fsrm.FsrmQuotaManager;
$quota = $qMgr.CreateQuota(&lt;span class="str"&gt;&amp;quot;$directory&amp;quot;&lt;/span&gt;);
&lt;span class="rem"&gt;#quota in MB&lt;/span&gt;
$quota.QuotaLimit = ($quotaLimit*1024*1024);
$quota.AddThreshold($threshold);
&lt;span class="rem"&gt;#write to eventlog when $threshold is exceeded&lt;/span&gt;
$action = $quota.CreateThresholdAction($threshold, 1);
$action.EventType = 1;
$action.MessageText = &lt;span class="str"&gt;&amp;quot;Disk quota ($quotaLimit MB) for directory $directory exceeded.&amp;quot;&lt;/span&gt;;
$quota.Commit();&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;h2&gt;7) Bandwidth Throttling&lt;/h2&gt;

&lt;p&gt;Media content like videos or audio files (e.g. Podcasts) become more and more pervasive in Hosted Environments. But Media content can become quite a problem. Usually Hosters want to provide fast download times to maximize the user experience. This is not the case with media content however and here is why: &lt;/p&gt;

&lt;p&gt;If you look at the grand scheme of things only a fraction (about 20%) of media content is consumed before the user browses to something else. Just ask yourself how many youtube videos you really watch from start to finish. &lt;/p&gt;

&lt;p&gt;If you have a fast connection 100% of the media file gets downloaded until the user stops watching. 80% of the bits transferred were wasted. That's not a problem if you have unlimited bandwidth, but who has that? The IIS7 Bitrate Throttling Module allows Hosters to progressively throttle the bandwidth of media and other content to a desired rate or to the rate that is encoded in the media file itself. More information: &lt;a title="http://learn.iis.net/page.aspx/147/bit-rate-throttling-setup-walkthrough/" href="http://learn.iis.net/page.aspx/147/bit-rate-throttling-setup-walkthrough/" mce_href="http://learn.iis.net/page.aspx/147/bit-rate-throttling-setup-walkthrough/"&gt;http://learn.iis.net/page.aspx/147/bit-rate-throttling-setup-walkthrough/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;8) IIS7 Core Web Server Improvements&lt;/h2&gt;

&lt;h3&gt;a) No need for an anonymous account anymore. &lt;/h3&gt;

&lt;p&gt;Whenever requests are not authenticated IIS uses an anonymous user account to access web content. In IIS6 a default account is created named &amp;quot;IUSR&lt;em&gt;_&amp;lt;machinename&amp;gt;&lt;/em&gt;. For isolation purposes Hosters usually create one anonymous user account for each web-site. &lt;/p&gt;

&lt;p&gt;You don't have to do that anymore in IIS7. By leaving the anonymous username and password empty IIS7 Application Pools will use the Application Pool identity itself to access anonymous content. So if a Hoster has an individual Application Pool account for each customer he doesn't have to create a second anonymous account on top of that. The single Application Pool account is enough. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Configuration Example (removes the anonymous user server-wide):&lt;/em&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;windir%\system32\inetsrv\appcmd set config -section:anonymousAuthentication &lt;br /&gt;-username:&lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt; -password:&lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;User Interface&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/InaNutShellSharedHostingImprovementsonII_D4/image_2.png" mce_href="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/InaNutShellSharedHostingImprovementsonII_D4/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="124" alt="image" src="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/InaNutShellSharedHostingImprovementsonII_D4/image_thumb.png" width="244" border="0" mce_src="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/InaNutShellSharedHostingImprovementsonII_D4/image_thumb.png" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;b) dynamicIdleThreshold&lt;/h3&gt;

&lt;p&gt;In most Shared Hosting environments very active (hot) sites live together with infrequently requested (cold) sites. When too many Application Pools for these sites get spawned up memory becomes sparse and the Windows Memory Manager starts moving infrequently used memory pages to the pagefile. If memory pressure gets too high memory is over-committed and the machine starts thrashing. In this case the system excessively swaps memory pages between RAM and pagefile because more and more of the required memory pages reside in the page file and need to be paged back into memory. Excessive swapping of memory pages is also called thrashing. It usually starts happening when about 130% of the memory is committed. Example: For a machine with 2GB physical RAM thrashing might start at 2.6GB (2GB RAM + 600MB in the pagefile = 2.6GB/2.0GB = 130%). &lt;/p&gt;

&lt;p&gt;Thrashing is not fatal, but it certainly slows down the system. Requests start to take longer than usual. The worse thrashing gets the longer responses will take. &lt;/p&gt;

&lt;p&gt;Now back to IIS: there is a remedy in IIS 7.0 when memory becomes sparse. It's called dynamicIdleThreshold. All you have to do is to configure the percentage of memory committed, e.g. 130. Should the system get close to this limit IIS will start reducing the idle timeout of Application Pools. IIS7 starts &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;At 80% of the dynamicIdleThreshold setting it reduces the idle timeout of all Application Pools by half, e.g. the 20 minute default timeout would be set to 10 minutes. &lt;/li&gt;

  &lt;li&gt;At 85% of the dynamicIdleThreshold setting it reduces the idle timeout of all Application Pools to 1/4th, the 20 minute default timeout would be set to 5 minutes. &lt;/li&gt;

  &lt;li&gt;At 90% of the dynamicIdleThreshold setting it reduces the idle timeout of all Application Pools to 1/8th, i.e. 2.5 minutes if you use the 20 minute default. &lt;/li&gt;

  &lt;li&gt;At 95% of the dynamicIdleThreshold setting it reduces the idle timeout of all Application Pools to 1/16th, i.e. 1 minutes if you use the 20 minute default. &lt;/li&gt;

  &lt;li&gt;At 100% of the dynamicIdleThreshold setting it reduces the idle timeout of all Application Pools to 1/32th, i.e. 1 minutes if you use the 20 minute default (one minute is the minimum). &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For math wizards: Let's suppose we set dynamicIdleThreshold to 130 on our machine with 2GB physical RAM. The 80% threshold would be reached if 2.08GB of the memory are committed (80% of 2.6GB (130% dynamicIdleThreshold)). &lt;/p&gt;

&lt;p&gt;As a net result cold Application Pools get timed out much faster while hot Application Pools don't get timed out because they continuously receive requests and their idle timeout counter gets reset constantly. An Eventlog entry is generated every time an Application Pool is timed-out due to a reduced time-out. &lt;strong&gt;In our test environment we can host up to 10 times more Application Pools when enabling the dynamicIdleTimeout setting.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;The side effect of this setting is of course that process data like in memory session state gets deleted if an Application Pool times out. &lt;/p&gt;

&lt;p&gt;Here is how you configure the dynamicIdleThreshold setting:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;%windir%\system32\inetsrv\appcmd set config &lt;br /&gt;-section:system.applicationHost/webLimits -dynamicIdleThreshold:130&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;h3&gt;c) Static and Dynamic Compression&lt;/h3&gt;

&lt;p&gt;Compressing responses can be a big benefit for HTTP clients which have limited bandwidth, for example cell phones or dial-up connections. It can also save a lot of bandwidth. &lt;/p&gt;

&lt;p&gt;IIS automatically compresses static content like html or text files. To do this the HTTP client has to send the &amp;quot;Accept-Encoding: gzip&amp;quot; header. Most HTTP clients like Internet Explorer or FireFox do this automatically. The big advantage with static compression is that IIS can cache the compressed representation of the content in memory and even on disk. For the next response the already compressed representation of the content gets sent. This way it doesn't have to recompress for every new request. Compressing most static content is the default for IIS7. &lt;/p&gt;

&lt;p&gt;Dynamic content (e.g. ASP.NET, PHP or other Web Application Frameworks) is a bit trickier because the compression has to be done for every response and that costs CPU cycles of course. Due to the benefits described above it might be a good idea to turn dynamic compression on if spare CPU cycles are available however. This is not an all-or-nothing either because IIS7 has some high-watermark - low-watermark settings that allow to disable compression if the CPU reaches a certain limit, e.g. 90%. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Configuration Examples:&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Enable Dynamic Compression&lt;/p&gt;

&lt;pre class="csharpcode"&gt;%windir%\system32\inetsrv\appcmd.exe set config &lt;span class="str"&gt;&amp;quot;Default Web Site&amp;quot;&lt;/span&gt; &lt;br /&gt;-section:system.webServer/urlCompression /doDynamicCompression:&lt;span class="str"&gt;&amp;quot;True&amp;quot;&lt;/span&gt;  &lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Set Dynamic Compression High Watermark&lt;/p&gt;

&lt;pre class="csharpcode"&gt;%windir%\system32\inetsrv\appcmd.exe set config  &lt;br /&gt;-section:system.webServer/httpCompression /dynamicCompressionDisableCpuUsage:&lt;span class="str"&gt;&amp;quot;80&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;h3&gt;d) Application Pool SIDs&lt;/h3&gt;

&lt;p&gt;IIS7 generates a unique Security Identifier (SID) for every Application Pool it starts. This allows to isolate content for two or more Application Pools even if they run as the same account. You can ACL resources like files and directories for these individual Application Pool identities. See Ken Schaefer's blog for more details: &lt;a title="http://adopenstatic.com/cs/blogs/ken/archive/2008/01/29/15759.aspx" href="http://adopenstatic.com/cs/blogs/ken/archive/2008/01/29/15759.aspx" mce_href="http://adopenstatic.com/cs/blogs/ken/archive/2008/01/29/15759.aspx"&gt;http://adopenstatic.com/cs/blogs/ken/archive/2008/01/29/15759.aspx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Configuration Example:&lt;/em&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;icacls C:\content\site1\test.txt /grant &lt;span class="str"&gt;&amp;quot;IIS APPPOOL\Site1AppPool&amp;quot;&lt;/span&gt;:R&lt;/pre&gt;

&lt;h3&gt;e) Failed Request Tracing&lt;/h3&gt;

&lt;p&gt;Troubleshooting Web Server errors is hard. Especially in Hosting Environments where customers write the code but the Hoster has to troubleshoot. Often times there is a lot of code that gets executed before a response is returned. And a request can fail anywhere in the request processing. Failed Request Tracing allows an IIS administrator to specify rules for failed requests. If a request conforms to the rule (e.g. request takes longer than 30 seconds) IIS will write a detailed trace of the &amp;quot;failed&amp;quot; request to disk. Here is an example of the output: &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/InaNutShellSharedHostingImprovementsonII_D4/image_4.png" mce_href="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/InaNutShellSharedHostingImprovementsonII_D4/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="355" alt="image" src="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/InaNutShellSharedHostingImprovementsonII_D4/image_thumb_1.png" width="509" border="0" mce_src="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/InaNutShellSharedHostingImprovementsonII_D4/image_thumb_1.png" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;More information on Failed Request Tracing: &lt;a title="http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis7/" href="http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis7/" mce_href="http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis7/"&gt;http://learn.iis.net/page.aspx/266/troubleshooting-failed-requests-using-tracing-in-iis7/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;f) Running Wow64&lt;/h3&gt;

&lt;p&gt;RAM is cheap and having machines with more than 4GB of RAM is not outrageous anymore. To address more than 4GB of RAM a 64-Bit Operating System is necessary. Windows Server 2008/64-Bit is thoroughly tested and I would recommend running on 64 instead of 32-Bit. Compatibility is important however and IIS software like PHP or ISAPI filters and extension are not be available as 64-Bit binaries. 32-Bit is also quite a bit lighter-weight and doesn't need as much memory. The solution: install the 64-Bit version of Windows Server 2008 but run 32-Bit Application Pools. The &amp;quot;enable32BitAppOnWin64&amp;quot; is a per Application Pool setting, i.e. 32-Bit and 64-Bit Application Pools can be run side-by-side. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Configuration Example:&lt;/em&gt;&lt;/p&gt;

&lt;pre class="csharpcode"&gt;appcmd apppool set /apppool.name:My32BitAppPool /enable32BitAppOnWin64:true&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&lt;em&gt;User Interface&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/InaNutShellSharedHostingImprovementsonII_D4/image_6.png" mce_href="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/InaNutShellSharedHostingImprovementsonII_D4/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="331" alt="image" src="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/InaNutShellSharedHostingImprovementsonII_D4/image_thumb_2.png" width="271" border="0" mce_src="http://blogs.iis.net/blogs/thomad/WindowsLiveWriter/InaNutShellSharedHostingImprovementsonII_D4/image_thumb_2.png" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;There are a ton of new features in Windows Server 2008 and IIS7 that make Shared Hosting easier. I tried to outline the most important ones but I probably forgot a bunch. Stay tuned for future updates.&amp;#160; &lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2339706" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/tL9QD1Z1_ek" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.iis.net/thomad/archive/2008/05/06/in-a-nut-shell-shared-hosting-improvements-on-iis7.aspx</feedburner:origLink></item><item><title>Understanding IIS7 Request Restrictions on Windows Vista</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/J46N9hbohEE/understanding-iis7-request-restrictions-on-windows-vista.aspx</link><pubDate>Thu, 01 May 2008 22:31:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2333007</guid><dc:creator>thomad</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;font size="1"&gt;Note: This blog entry used to be on my old blog. I'm about to shut it down so I thought I replicate some of the content here.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;You might have run into the IIS connection limit on Windows XP. IIS 5.1 on Windows XP allowed 10 concurrent connections before it displayed a &lt;a href="http://support.microsoft.com/kb/262635" target="_blank" mce_href="http://support.microsoft.com/kb/262635"&gt;403.9 error message (Access Forbidden: Too many users are connected)&lt;/a&gt;. Not too user friendly.&lt;/p&gt;  &lt;p&gt;The only restrictions we have on Windows Vista is the &lt;em&gt;&lt;strong&gt;number of concurrent requests&lt;/strong&gt;&lt;/em&gt; IIS will execute. This is fundamentally different from the Windows XP connection limit. By limiting concurrent requests you will probably never see an error message. Request that cannot be handled because the concurrent request limit is reached will still be queued. &lt;/p&gt;  &lt;p&gt;There is only a problem if the request queue overflows - a &amp;quot;500 Server Busy&amp;quot; error. The request queue is pretty big though. Thousands of requests by default. The net effect is that the execution of too many concurrent requests will not generate an error but it might slow your server down for a little bit. Windows Server 2008 doesn't have any request restrictions. &lt;/p&gt;  &lt;p&gt;Here is how many concurrent requests IIS7 allows on Windows Vista SKUs:&lt;/p&gt;  &lt;table class="" cellspacing="0" cellpadding="2" width="400" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td class="" valign="top" width="291"&gt;&lt;strong&gt;Windows Vista Home Basic*&lt;/strong&gt;&lt;/td&gt;        &lt;td class="" valign="top" width="107"&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class="" valign="top" width="291"&gt;&lt;strong&gt;Windows Vista Home Premium&lt;/strong&gt;&lt;/td&gt;        &lt;td class="" valign="top" width="107"&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class="" valign="top" width="291"&gt;&lt;strong&gt;Windows Vista Ultimate&lt;/strong&gt;&lt;/td&gt;        &lt;td class="" valign="top" width="107"&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class="" valign="top" width="291"&gt;&lt;strong&gt;Windows Vista Professional&lt;/strong&gt;&lt;/td&gt;        &lt;td class="" valign="top" width="107"&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td class="" valign="top" width="291"&gt;&lt;strong&gt;All Windows Server 2008 SKUs&lt;/strong&gt;&lt;/td&gt;        &lt;td class="" valign="top" width="107"&gt;&lt;strong&gt;unlimited&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;font size="1"&gt;*Home Basic contains the IIS process activation and HTTP processing infrastructure, but it cannot be used as a traditional web server. It also doesn&amp;#8217;t include the IIS administration tool. &lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2333007" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/J46N9hbohEE" height="1" width="1"/&gt;</description><feedburner:origLink>http://blogs.iis.net/thomad/archive/2008/05/01/understanding-iis7-request-restrictions-on-windows-vista.aspx</feedburner:origLink></item><item><title>IIS7 PowerShell Provider Podcast</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/7LhtbfxUSFs/iis7-powershell-provider-podcast.aspx</link><pubDate>Tue, 29 Apr 2008 22:43:53 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2328688</guid><dc:creator>thomad</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Saw a post on forums.iis.net last week about a Podcast on our new IIS7 PowerShell Provider. Being the Program Manager for this thing I thought maybe these guys want me to participate in the Podcast. And sure enough - Jonathan and Hal were interested. And here it is the podcast link and the interview topics: &lt;/p&gt;  &lt;p&gt;&lt;a title="http://powerscripting.wordpress.com/2008/04/26/powerscripting-podcast-episode-23-iis7-special/" href="http://powerscripting.wordpress.com/2008/04/26/powerscripting-podcast-episode-23-iis7-special/"&gt;http://powerscripting.wordpress.com/2008/04/26/powerscripting-podcast-episode-23-iis7-special/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;strong&gt;&lt;u&gt;Interview Topics&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font size="2"&gt;Who are you&amp;#160; &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="2"&gt;What&amp;#8217;s your background at MS and elsewhere &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font size="2"&gt;Talk about the IIS7 management cmdlets &lt;/font&gt;      &lt;ul&gt;       &lt;li&gt;&lt;font size="2"&gt;Get/Set-WebConfiguration &lt;/font&gt;&lt;/li&gt;        &lt;li&gt;&lt;font size="2"&gt;Start-WebItem &lt;/font&gt;&lt;/li&gt;        &lt;li&gt;&lt;font size="2"&gt;Remove-WebConfigurationProperty &lt;/font&gt;&lt;/li&gt;        &lt;li&gt;&lt;font size="2"&gt;Ability to use XPath filters &lt;/font&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;font size="2"&gt;Talk about the IIS7 PSprovider &lt;/font&gt;      &lt;ul&gt;       &lt;li&gt;&lt;font size="2"&gt;Provider timeline - 2nd beta in June, final in October &lt;/font&gt;&lt;/li&gt;        &lt;li&gt;&lt;font size="2"&gt;Features &lt;/font&gt;          &lt;ul&gt;           &lt;li&gt;&lt;font size="2"&gt;ability to configure IIS and ASP.net, sites, vdirs, apps, all that &lt;/font&gt;&lt;/li&gt;            &lt;li&gt;&lt;font size="2"&gt;ability to delegate &lt;/font&gt;&lt;/li&gt;            &lt;li&gt;&lt;font size="2"&gt;root of namespace: sites, app pools &lt;/font&gt;&lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;font size="2"&gt;What does the future hold (that you can discuss) &lt;/font&gt;      &lt;ul&gt;       &lt;li&gt;&lt;font size="2"&gt;We talk about Server Core &lt;/font&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2328688" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/7LhtbfxUSFs" height="1" width="1"/&gt;</description><category domain="http://blogs.iis.net/thomad/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/thomad/archive/tags/IIS+News+Item/default.aspx">IIS News Item</category><category domain="http://blogs.iis.net/thomad/archive/tags/PowerShell/default.aspx">PowerShell</category><feedburner:origLink>http://blogs.iis.net/thomad/archive/2008/04/29/iis7-powershell-provider-podcast.aspx</feedburner:origLink></item><item><title>Cheesy Web Server Performance Test With PowerShell</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/CvDuxZzdImM/cheesy-web-server-performance-test-with-powershell.aspx</link><pubDate>Tue, 22 Apr 2008 07:35:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2312685</guid><dc:creator>thomad</dc:creator><slash:comments>0</slash:comments><description>&lt;p mce_keep="true"&gt;Instead of writing WCAT scripts I wrote my own little perf test client. The following .PS1 script works pretty well to do some very basic performance testing. Just enter the URL and the duration in seconds, e.g. &lt;span style="font-size: 9pt; font-family: &amp;#39;Courier New&amp;#39;; mso-no-proof: yes"&gt;&amp;quot;.\webperf.ps1 http://localhost/ 15&amp;quot;.&lt;/span&gt;&lt;/p&gt;  &lt;p mce_keep="true"&gt;The script instantiates the Net.WebClient class and calls the DownloadString member to make a HTTP request. The response is redirected to $null. The script checks on every request if the duration is expired. It reports every 100 successful responses.&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;div class="csharpcode"&gt;     &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;param&lt;/span&gt; &lt;/pre&gt;

    &lt;pre&gt;( &lt;/pre&gt;

    &lt;pre class="alt"&gt;    [string]$url, &lt;/pre&gt;

    &lt;pre&gt;    [int]$duration &lt;/pre&gt;

    &lt;pre class="alt"&gt;) &lt;/pre&gt;

    &lt;pre&gt; &lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="str"&gt;&amp;quot;URL: $url&amp;quot;&lt;/span&gt;; &lt;/pre&gt;

    &lt;pre&gt;&lt;span class="str"&gt;&amp;quot;Duration: $duration seconds`n&amp;quot;&lt;/span&gt;; &lt;/pre&gt;

    &lt;pre class="alt"&gt; &lt;/pre&gt;

    &lt;pre&gt;$starttime = get-date; &lt;/pre&gt;

    &lt;pre class="alt"&gt;$i=0; &lt;/pre&gt;

    &lt;pre&gt;$webClient = new-object Net.WebClient; &lt;/pre&gt;

    &lt;pre class="alt"&gt; &lt;/pre&gt;

    &lt;pre&gt;&lt;span class="kwrd"&gt;while&lt;/span&gt; (1) &lt;/pre&gt;

    &lt;pre class="alt"&gt;{ &lt;/pre&gt;

    &lt;pre&gt;    $webClient.DownloadString($url)&amp;gt;$null; &lt;/pre&gt;

    &lt;pre class="alt"&gt;      $i++; &lt;/pre&gt;

    &lt;pre&gt;      $timespan = new-timespan $starttime; &lt;/pre&gt;

    &lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; ($timespan.TotalSeconds &lt;span class="preproc"&gt;-ge&lt;/span&gt; $duration) &lt;/pre&gt;

    &lt;pre&gt;      { &lt;/pre&gt;

    &lt;pre class="alt"&gt;           &lt;span class="str"&gt;&amp;quot;`n`n$i requests for url $url served in $duration seconds.&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre&gt;           &lt;span class="kwrd"&gt;break&lt;/span&gt;; &lt;/pre&gt;

    &lt;pre class="alt"&gt;      } &lt;/pre&gt;

    &lt;pre&gt;      &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;/pre&gt;

    &lt;pre class="alt"&gt;      { &lt;/pre&gt;

    &lt;pre&gt;           &lt;span class="kwrd"&gt;if&lt;/span&gt; ($i%100 &lt;span class="preproc"&gt;-eq&lt;/span&gt; 0) &lt;/pre&gt;

    &lt;pre class="alt"&gt;           { &lt;/pre&gt;

    &lt;pre&gt;                $dursec = [int]$timespan.TotalSeconds;    &lt;/pre&gt;

    &lt;pre class="alt"&gt;                write-host -noNewLine &lt;span class="str"&gt;&amp;quot;`r$i requests served ($dursec seconds)&amp;quot;&lt;/span&gt;; &lt;/pre&gt;

    &lt;pre&gt;           } &lt;/pre&gt;

    &lt;pre class="alt"&gt;      } &lt;/pre&gt;

    &lt;pre&gt;}&lt;/pre&gt;

    &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;
  &lt;/div&gt;
  &lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;/div&gt;

&lt;p&gt;&lt;span style="font-size: 9pt; font-family: &amp;#39;Courier New&amp;#39;; mso-no-proof: yes"&gt;&lt;font face="Arial" size="2"&gt;Requesting the IIS default page I am able to get around 48000 requests per minute (800 per second) on my Lenovo T61p on Vista Ultimate SP1. How many can you do?&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="font-size: 9pt; font-family: &amp;#39;Courier New&amp;#39;; mso-no-proof: yes"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.iis.net/aggbug.aspx?PostID=2312685" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/CvDuxZzdImM" height="1" width="1"/&gt;</description><category domain="http://blogs.iis.net/thomad/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/thomad/archive/tags/PowerShell/default.aspx">PowerShell</category><feedburner:origLink>http://blogs.iis.net/thomad/archive/2008/04/22/cheesy-web-server-performance-test-with-powershell.aspx</feedburner:origLink></item><item><title>IIS 7.0 PowerShell Provider Tech Preview 1</title><link>http://feedproxy.google.com/~r/JustAnotherIISBlog/~3/CsIkFG8S9dI/iis-7-0-powershell-provider-tech-preview-1.aspx</link><pubDate>Mon, 14 Apr 2008 20:10:00 GMT</pubDate><guid isPermaLink="false">50bcf3b4-f6fe-4638-adff-0c150e922e99:2297363</guid><dc:creator>thomad</dc:creator><slash:comments>0</slash:comments><description>&lt;P mce_keep="true"&gt;Finally,&amp;nbsp;IIS 7.0 has a PowerShell Provider!&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;The IIS7 PowerShell Provider allows you to &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Create Web-Sites, Web Applications, Virtual Directories and Application Pools 
&lt;LI&gt;Change Simple Configuration Properties on Web-Sites, Application Pools, Web Applications and Virtual Directories 
&lt;LI&gt;Add and Change Complex Configuration Settings 
&lt;LI&gt;Query&amp;nbsp;Run-time Data (Web-Site State, Application Pool State, Currently Executing Requests) 
&lt;LI&gt;Execute Advanced Configuration Tasks, Scripting, Integration with other PowerShell Snap-Ins and features 
&lt;LI&gt;Search and Discover Configuration Settings &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Here is a screen shot of how to create a new IIS app:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG title="PowerShell Provider Screenshot" style="WIDTH: 601px; HEIGHT: 541px" height=685 alt="PowerShell Provider Screenshot" src="http://blogs.iis.net/blogs/thomad/ps.jpg" width=1210 mce_src="http://blogs.iis.net/blogs/thomad/ps.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;DOWNLOAD:&lt;BR&gt;&lt;/STRONG&gt;Tech Preview 1 of the IIS 7.0 PowerShell Provider can be found here: &lt;BR&gt;x86: &lt;A href="http://www.iis.net/downloads/1664/ItemPermaLink.ashx" mce_href="http://www.iis.net/downloads/1664/ItemPermaLink.ashx"&gt;http://www.iis.net/downloads/1664/ItemPermaLink.ashx&lt;/A&gt;&lt;BR&gt;x64: &lt;A href="http://www.iis.net/downloads/1665/ItemPermaLink.ashx" mce_href="http://www.iis.net/downloads/1665/ItemPermaLink.ashx"&gt;http://www.iis.net/downloads/1665/ItemPermaLink.ashx&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;FORUMS: &lt;BR&gt;&lt;/STRONG&gt;Go to our PowerShell forum if you need support or if you are looking for&amp;nbsp;'Tips and Tricks'&lt;BR&gt;&lt;A href="http://forums.iis.net/1151.aspx" mce_href="http://forums.iis.net/1151.aspx"&gt;http://forums.iis.net/1151.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;WALKTHROUGHS:&lt;BR&gt;&lt;/STRONG&gt;We have 9 walkthroughs for you to get familiar with the IIS 7.0 PowerShell Provider:&lt;BR&gt;&lt;A href="http://learn.iis.net/page.aspx/447/managing-iis-with-the-iis-70-powershell-provider/" mce_href="http://learn.iis.net/page.aspx/447/managing-iis-with-the-iis-70-powershell-provider/"&gt;http://learn.iis.net/page.aspx/447/managing-iis-with-the-iis-70-powershell-provider/&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Have fun!&lt;BR&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;img src="http://blogs.iis.net/aggbug.aspx?PostID=2297363" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/JustAnotherIISBlog/~4/CsIkFG8S9dI" height="1" width="1"/&gt;</description><category domain="http://blogs.iis.net/thomad/archive/tags/IIS7/default.aspx">IIS7</category><category domain="http://blogs.iis.net/thomad/archive/tags/IIS+News+Item/default.aspx">IIS News Item</category><category domain="http://blogs.iis.net/thomad/archive/tags/PowerShell/default.aspx">PowerShell</category><feedburner:origLink>http://blogs.iis.net/thomad/archive/2008/04/14/iis-7-0-powershell-provider-tech-preview-1.aspx</feedburner:origLink></item></channel></rss>
