<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>A Taste of Logic</title><link>http://blogs.msdn.com/b/jamesche/</link><description /><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Image or ImageButton without ImageUrl Causes HTTP GET for Default Document</title><link>http://blogs.msdn.com/b/jamesche/archive/2009/01/28/image-or-imagebutton-without-imageurl-causes-http-get-for-default-document.aspx</link><pubDate>Wed, 28 Jan 2009 17:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9381108</guid><dc:creator>Jim Cheshire</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jamesche/rsscomments.aspx?WeblogPostID=9381108</wfw:commentRss><comments>http://blogs.msdn.com/b/jamesche/archive/2009/01/28/image-or-imagebutton-without-imageurl-causes-http-get-for-default-document.aspx#comments</comments><description>&lt;p&gt;I recently worked an issue with a customer who was seeing an error in his application due to a null reference. The error was perplexing because the object that was null was populated on the logon page of the application, but the error was occurring &lt;em&gt;after&lt;/em&gt; the user logged in. The object should certainly not have been null. Even more perplexing was the fact that the error could be reproduced readily on a Windows 2003 Server, but the exact same code would never reproduce the problem on the development machine running Windows XP.&lt;/p&gt;  &lt;p&gt;In order to troubleshoot this problem, I had the customer get a Time Travel Trace, something we often call an iDNA dump. An iDNA dump is analyzed like any other memory dump, but unlike a traditional user-mode dump that contains the contents of memory at a particular moment in time, an iDNA dump contains a “recording” of user-mode memory over a period of time. It’s kind of like Tivo for the debugger, and in situations where a problem is easily reproduced in short time, it’s a great way to dig into problems.&lt;/p&gt;  &lt;p&gt;Using the iDNA dump, I was able to determine that the customer’s code was successfully creating the object that was causing the NullReferenceException. I was also able to determine that the customer never explicitly set the object to null and the only place where we entered the constructor for the object was in the logon page just as the customer said. However, I also found that Page_Load for the logon page was hit in a seemingly random place long after the user logged in. &lt;/p&gt;  &lt;p&gt;Next, I got a network trace of the application. In that trace, I saw a GET for “/” which causes the web server to serve up the default document. In my customer’s case, login.aspx was in the default document list, so this GET caused the code in login.aspx to run. In that code, the customer re-initialized an object and stored it in Session. One of the members of that object was the object causing the NullReferenceException, and because the code in login.aspx reset the variable in Session state, it overwrote the valid member object with a null. (Whew! If you had a hard time following all of that, just think how difficult it was to follow it all by setting breakpoints in Windbg!)&lt;/p&gt;  &lt;p&gt;The GET for the default document that we were seeing was a big mystery. I could find nothing in the customer’s code that was doing that. I started trying to narrow down where that was coming from. Eventually, we found that it originated with an &amp;lt;input&amp;gt; element in the rendered page that looked like this:&lt;/p&gt;  &lt;p class="debugCmd"&gt;&amp;lt;input type=&amp;quot;image&amp;quot; src=&amp;quot;&amp;quot; … /&amp;gt;&lt;/p&gt;  &lt;p&gt;When the browser encountered this element, it performed a GET for the default document. That explained why Page_Load was running for logon.aspx and it explained why we never saw this happen in the browser window. It also explained why the problem didn’t happen on Windows XP. On Windows XP, the customer was using the ASP.NET Development Server. The dev server doesn’t have any concept of a default document list, so when the GET occurred for the default document, it tried to serve default.aspx. Since there wasn’t a default.aspx in the application, the dev server simply served up a directory listing, and because that didn’t actually run any code, it had no impact on the application.&lt;/p&gt;  &lt;p&gt;The XHTML that caused this problem was caused by an ASP.NET ImageButton control without an ImageUrl property. If you don’t specify an ImageUrl property for an ImageButton control (or any control that derives from Image), it will cause ASP.NET to render the XHTML you see above, and that will result in the errant GET. As you can tell from reading about my experience, it’s possible for this issue to cause bizarre bugs that are &lt;em&gt;extremely &lt;/em&gt;difficult to track down. What’s worse is that these bugs can occur long after the GET that caused them.&lt;/p&gt;  &lt;p&gt;We thought about correcting this now in version 2, but we were concerned that any change in the ASP.NET code would break existing applications. Therefore, we have this on the slate to look at for the next version of ASP.NET. In the meantime, always make sure that you specify an ImageUrl property when using a control that derives from Image!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9381108" width="1" height="1"&gt;</description></item><item><title>Sessions and Classes</title><link>http://blogs.msdn.com/b/jamesche/archive/2009/01/09/sessions-and-classes.aspx</link><pubDate>Fri, 09 Jan 2009 22:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9302441</guid><dc:creator>Jim Cheshire</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jamesche/rsscomments.aspx?WeblogPostID=9302441</wfw:commentRss><comments>http://blogs.msdn.com/b/jamesche/archive/2009/01/09/sessions-and-classes.aspx#comments</comments><description>&lt;p&gt;Any programmer knows that logic errors are among the most difficult to troubleshoot. I was recently working with a developer who was encountering an obscure logic bug concerning session variables, and the case raised an interesting (and important) point regarding ASP.NET session state. &lt;/p&gt;  &lt;p&gt;Consider the following code in &lt;strong&gt;page1.aspx&lt;/strong&gt;.&lt;/p&gt;  &lt;div class="debugCmd"&gt;   &lt;p&gt;public partial class Page1 : System.Web.UI.Page      &lt;br /&gt;{ &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; protected ArrayList al; &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; protected void Page_Load(object sender, EventArgs e)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; al = new ArrayList();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; al.Add(&amp;quot;Apples&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; al.Add(&amp;quot;Oranges&amp;quot;);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; al.Add(&amp;quot;Bananas&amp;quot;); &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Session[&amp;quot;list&amp;quot;] = al; &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Redirect(&amp;quot;page2.aspx&amp;quot;);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;    &lt;p&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;In this code, I create an ArrayList and then populate it with a few types of fruit. I then save that ArrayList to session and redirect to &lt;strong&gt;page2.aspx&lt;/strong&gt;. Let’s look at several different code examples for &lt;strong&gt;page2.aspx&lt;/strong&gt; and discuss how the session variable created in &lt;strong&gt;page1.aspx&lt;/strong&gt; might be inadvertently changed.&lt;/p&gt;  &lt;p&gt;First, consider this code snippet for &lt;strong&gt;page2.aspx&lt;/strong&gt;.&lt;/p&gt;  &lt;div class="debugCmd"&gt;   &lt;p&gt;public partial class Page2 : System.Web.UI.Page      &lt;br /&gt;{ &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; protected ArrayList al;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; protected ArrayList al1;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; protected void Page_Load(object sender, EventArgs e)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; al = (ArrayList)Session[&amp;quot;list&amp;quot;];       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; al[2] = &amp;quot;Kiwi&amp;quot;; &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; al1 = (ArrayList)Session[&amp;quot;list&amp;quot;];      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Write(al1[2]);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;When page2.aspx loads, what is written to the browser window? You may think that you’d see “Oranges”, but in fact, you’d see “Kiwi” written to the screen. Why? When you store an instance of a reference type (an ArrayList, in this case) in session and then assign a variable to the session variable, what you are doing is saying “Point my variable to the address of the session variable.” Therefore, if you manipulate the member variable that was assigned the session variable, you are also directly manipulating the session variable. In other words, it is not necessary for me to save the modified ArrayList back to session in page2.aspx. &lt;/p&gt;  &lt;p&gt;Here’s another snippet of code for &lt;strong&gt;page2.aspx&lt;/strong&gt;.&lt;/p&gt;  &lt;div class="debugCmd"&gt;   &lt;p&gt;public partial class Page2 : System.Web.UI.Page      &lt;br /&gt;{ &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; protected ArrayList al;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; protected void Page_Load(object sender, EventArgs e)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; al = (ArrayList)Session[&amp;quot;list&amp;quot;];       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; al = new ArrayList(); &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Write(((ArrayList)Session[&amp;quot;list&amp;quot;])[0]);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;When this code runs, what happens? If you said that you’d see “Apples”, you’re right. Obviously, assigning the &lt;strong&gt;al&lt;/strong&gt; variable to a new instance of ArrayList doesn’t impact the session at all. It simply says “Create a new ArrayList and point &lt;strong&gt;al&lt;/strong&gt; at the new ArrayList instead of to the session variable.”&lt;/p&gt;  &lt;p&gt;Now consider the following code for &lt;strong&gt;page2.aspx&lt;/strong&gt;.&lt;/p&gt;  &lt;div class="debugCmd"&gt;   &lt;p&gt;public partial class Page2 : System.Web.UI.Page      &lt;br /&gt;{ &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; protected ArrayList al;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; protected ArrayList al2;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; protected void Page_Load(object sender, EventArgs e)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; al = (ArrayList)Session[&amp;quot;list&amp;quot;];       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; al2 = al; &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; al2.Clear(); &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Response.Write(((ArrayList)Session[&amp;quot;list&amp;quot;])[0]);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;}&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;When this code runs, what do you see? If you said that you’d see an exception, you’re right. This code will produce an ArgumentOutOfRangeException because the session variable, &lt;strong&gt;al&lt;/strong&gt;, and &lt;strong&gt;al2&lt;/strong&gt; all point to the same object. When you call &lt;strong&gt;Clear()&lt;/strong&gt; on &lt;strong&gt;al2&lt;/strong&gt;, it clears the session variable.&lt;/p&gt;  &lt;p&gt;Obviously, this situation doesn’t apply to primitive types such as &lt;strong&gt;int &lt;/strong&gt;or to value types. It also doesn’t apply to &lt;strong&gt;string&lt;/strong&gt; even though &lt;strong&gt;string&lt;/strong&gt; is a reference type. Why? Because the equality operators for &lt;strong&gt;string&lt;/strong&gt; are designed to compare the &lt;em&gt;value&lt;/em&gt; of the string and not the &lt;strong&gt;string&lt;/strong&gt; itself. This situation also doesn’t apply to &lt;strong&gt;struct&lt;/strong&gt;s because a struct is a value type. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9302441" width="1" height="1"&gt;</description></item><item><title>Windows Home Server Data Corruption Fix</title><link>http://blogs.msdn.com/b/jamesche/archive/2008/06/10/windows-home-server-data-corruption-fix.aspx</link><pubDate>Tue, 10 Jun 2008 16:51:20 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8589931</guid><dc:creator>Jim Cheshire</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jamesche/rsscomments.aspx?WeblogPostID=8589931</wfw:commentRss><comments>http://blogs.msdn.com/b/jamesche/archive/2008/06/10/windows-home-server-data-corruption-fix.aspx#comments</comments><description>&lt;p&gt;Windows Home Server is a great product, but it's been plagued by an infamous bug known as the Data Corruption Bug. Yesterday, the Windows Home Server team released a public beta of Power Pack 1. In addition to some new features and enhancements, Power Pack 1 also fixes the data corruption bug.&lt;/p&gt; &lt;p&gt;I've been involved in small team of internal testers for Power Pack 1. We've been testing this fix for a few months and are confident that the data corruption bug is fixed. In fact, I have been editing files against my Windows Home Server for a while now, and I've not encountered a single occurrence of corruption. (We use an internal tool to test for corruption against our WHS box, so corruption doesn't go unnoticed if it happens.)&lt;/p&gt; &lt;p&gt;You can access the public beta of Power Pack 1 by going to the &lt;a href="http://connect.microsoft.com/windowshomeserver"&gt;Windows Home Server Connect site&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Spread the word!&lt;/p&gt; &lt;p&gt;Jim&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8589931" width="1" height="1"&gt;</description></item><item><title>Third Party ASP.NET Controls and Visual Studio 2008</title><link>http://blogs.msdn.com/b/jamesche/archive/2008/02/28/third-party-asp-net-controls-and-visual-studio-2008.aspx</link><pubDate>Fri, 29 Feb 2008 00:36:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7937518</guid><dc:creator>Jim Cheshire</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jamesche/rsscomments.aspx?WeblogPostID=7937518</wfw:commentRss><comments>http://blogs.msdn.com/b/jamesche/archive/2008/02/28/third-party-asp-net-controls-and-visual-studio-2008.aspx#comments</comments><description>&lt;p&gt;We've had a few cases recently where customers are using third-party ASP.NET server controls (either written by a third-party company or by the customer) and finding that the controls are not rendering correctly in the Visual Studio 2008 design surface. Most recently, we had an issue where a popular third-party control company's custom property editor was not working correctly in Visual Studio 2008.&lt;/p&gt; &lt;p&gt;In all of these cases, we've investigated the issue and found the problem to be that as the third-party was developing their controls in Visual Studio 2005, they relied on our implementation in the Visual Studio design surface. What they did not anticipate was that our implementation would change with Visual Studio 2008.&lt;/p&gt; &lt;p&gt;The HTML design surface in Visual Studio 2008 is completely new. In order to get a much better representation of page rendering and to add new features, we incorporated the Expression Web design surface into Visual Studio 2008. (That decision also gives you the great new CSS features in Visual Studio 2008.) In almost all cases, controls that were developed against Visual Studio 2005 will work without any problems, but there are cases where the change in the designer causes undesirable behavior for server controls built against Visual Studio 2005. For example, one company found that the hierarchy of the control tree in the Visual Studio 2008 designer differed slightly from Visual Studio 2005. This change caused their control's code to incorrectly parse the page.&lt;/p&gt; &lt;p&gt;It is highly unlikely that you will encounter a problem with any controls in the Visual Studio 2008 designer. If you do, it's very likely that a change will be required in the control itself in order to take into account any implementation changes in the new designer.&lt;/p&gt; &lt;p&gt;Jim&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7937518" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jamesche/archive/tags/ASP-NET/">ASP.NET</category><category domain="http://blogs.msdn.com/b/jamesche/archive/tags/Orcas/">Orcas</category></item><item><title>New IIS.NET Website for the Windows Server 2008 Launch</title><link>http://blogs.msdn.com/b/jamesche/archive/2008/02/27/new-iis-net-website-for-the-windows-server-2008-launch.aspx</link><pubDate>Wed, 27 Feb 2008 21:15:39 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7920838</guid><dc:creator>Jim Cheshire</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jamesche/rsscomments.aspx?WeblogPostID=7920838</wfw:commentRss><comments>http://blogs.msdn.com/b/jamesche/archive/2008/02/27/new-iis-net-website-for-the-windows-server-2008-launch.aspx#comments</comments><description>&lt;p&gt;We've just launched a completely revamped and overhauled IIS 7 website with new content. Visit the premiere IIS 7 resource at &lt;a href="http://www.iis.net"&gt;www.iis.net&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Jim&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7920838" width="1" height="1"&gt;</description></item><item><title>Error When Opening ASP.NET Site on IIS 7 Using Visual Studio 2005</title><link>http://blogs.msdn.com/b/jamesche/archive/2008/02/25/error-when-opening-asp-net-site-on-iis-7-using-visual-studio-2005.aspx</link><pubDate>Mon, 25 Feb 2008 21:46:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7895658</guid><dc:creator>Jim Cheshire</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jamesche/rsscomments.aspx?WeblogPostID=7895658</wfw:commentRss><comments>http://blogs.msdn.com/b/jamesche/archive/2008/02/25/error-when-opening-asp-net-site-on-iis-7-using-visual-studio-2005.aspx#comments</comments><description>&lt;p&gt;Now that Windows Server 2008 is out the door, we're starting to see more customers using IIS 7. I recently worked on a case where one of our engineers was dealing with a customer using Visual Studio 2005 and IIS 7. He was encountering an error message when attempting to open his ASP.NET 2.0 application running on his local instance of IIS that displayed the following message:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.jimcobooks.com/blog/Error.NETSiteonIIS7UsingVisualStudio2005_7832/error.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="242" alt="The site is currently configured for use with ASP.NET 1.1 error." src="http://www.jimcobooks.com/blog/Error.NETSiteonIIS7UsingVisualStudio2005_7832/error_thumb.jpg" width="528" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;When we checked the application pool in IIS, it was configured correctly for the 2.0 Framework, so what exactly is the problem here?&lt;/p&gt; &lt;p&gt;The problem is that Visual Studio 2005 came out prior to IIS 7. Therefore, it doesn't deal well with the way that the handler mappings work in IIS 7. As it turns out, the .aspx file extension is mapped to both the ASPNET-ISAPI-1.1-PageHandlerFactory (for 1.1) and to the PageHandlerFactory-ISAPI-2.0. When Visual Studio 2005 hits the site to check for ASP.NET, it is fooled into thinking that the site is configured for ASP.NET 1.1 by the mapping for the ASPNET-ISAPI-1.1-PageHandlerFactory. &lt;/p&gt; &lt;p&gt;To correct this problem, you can either click Yes to the dialog shown above (and you'll have to do that each time you open the project) or you can change the order of the handlers mapped to your application.&lt;/p&gt; &lt;p&gt;To change the order of the handlers, follow these steps:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Select your application in the IIS Manager.  &lt;li&gt;Double-click on the Handler Mappings feature as shown below.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href="http://www.jimcobooks.com/blog/Error.NETSiteonIIS7UsingVisualStudio2005_7832/handlermappings.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="443" alt="handlermappings" src="http://www.jimcobooks.com/blog/Error.NETSiteonIIS7UsingVisualStudio2005_7832/handlermappings_thumb.jpg" width="509" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;ol&gt; &lt;li value="3"&gt;&amp;nbsp; Click the View Ordered List link on the right side of the IIS Manager as shown below.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href="http://www.jimcobooks.com/blog/Error.NETSiteonIIS7UsingVisualStudio2005_7832/ordered.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="340" alt="ordered" src="http://www.jimcobooks.com/blog/Error.NETSiteonIIS7UsingVisualStudio2005_7832/ordered_thumb.jpg" width="278" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;ol&gt; &lt;li value="4"&gt;Select the &lt;strong&gt;PageHandlerFactory-ISAPI-2.0&lt;/strong&gt; (or &lt;strong&gt;PageHandlerFactory-ISAPI-2.0-64&lt;/strong&gt; on 64-bit Windows). &lt;li&gt;Click the Move Up link as shown below until the handler appears above the ASPNET-ISAPI-1.1-PageHandlerFactory handler.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;a href="http://www.jimcobooks.com/blog/Error.NETSiteonIIS7UsingVisualStudio2005_7832/movehandler.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="427" alt="movehandler" src="http://www.jimcobooks.com/blog/Error.NETSiteonIIS7UsingVisualStudio2005_7832/movehandler_thumb.jpg" width="657" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;You should now be able to open the project without any issues.&lt;/p&gt; &lt;p&gt;By the way, this issue does not occur in Visual Studio 2008.&lt;/p&gt; &lt;p&gt;Jim&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7895658" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jamesche/archive/tags/ASP-NET/">ASP.NET</category><category domain="http://blogs.msdn.com/b/jamesche/archive/tags/IIS7/">IIS7</category></item><item><title>Hotfix Rollup for Visual Studio / Visual Web Developer Express Edition 2008</title><link>http://blogs.msdn.com/b/jamesche/archive/2008/02/14/hotfix-rollup-improves-performance-in-visual-studio-visual-web-developer-express-edition-2008.aspx</link><pubDate>Thu, 14 Feb 2008 19:29:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7695940</guid><dc:creator>Jim Cheshire</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jamesche/rsscomments.aspx?WeblogPostID=7695940</wfw:commentRss><comments>http://blogs.msdn.com/b/jamesche/archive/2008/02/14/hotfix-rollup-improves-performance-in-visual-studio-visual-web-developer-express-edition-2008.aspx#comments</comments><description>&lt;p&gt;We recently released a hotfix rollup that fixes numerous issues in Visual Web Developer 2008, both the Visual Studio release and the Express edition. News of this rollup has circulated through many blogs and websites, but we're still seeing a fair number of people who are unaware of it.&lt;/p&gt; &lt;p&gt;The rollup can be downloaded from the link in &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/02/08/vs-2008-web-development-hot-fix-roll-up-available.aspx" target="_blank"&gt;Scott's blog&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Jim&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7695940" width="1" height="1"&gt;</description></item><item><title>The Power of !dumpmodule</title><link>http://blogs.msdn.com/b/jamesche/archive/2008/01/24/the-power-of-dumpmodule.aspx</link><pubDate>Thu, 24 Jan 2008 22:19:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7225814</guid><dc:creator>Jim Cheshire</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jamesche/rsscomments.aspx?WeblogPostID=7225814</wfw:commentRss><comments>http://blogs.msdn.com/b/jamesche/archive/2008/01/24/the-power-of-dumpmodule.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Scenario: My customer is experiencing a hang and I see many threads with an identical stack. I also see that the customer has one thread that is running a component that is an OCX. What I want to find out is whether that component is referenced in the page that is executing on these numerous threads, but Reflector chokes on the module when I try to open it there.&lt;/p&gt;  &lt;p&gt;Fortunately, you can use !dumpmodule in SOS to get that information. Not only will this tell you what types are defined in that module, but it will also tell you what references there are in the module. This can be especially useful if you see an unknown module in a dump. (An unknown module is often a dynamic assembly that is not serialized to disk.) &lt;/p&gt;  &lt;p&gt;In this scenario, suppose I look at thread 68 and I see this:&lt;/p&gt;  &lt;p class="debugCmd"&gt;0:068&amp;gt; !clrstack    &lt;br /&gt;Thread 68     &lt;br /&gt;ESP EIP     &lt;br /&gt;0x21d3e9a8 0x77f82870 [FRAME: GCFrame]     &lt;br /&gt;0x21d3ea68 0x77f82870 [FRAME: HelperMethodFrame]     &lt;br /&gt;0x21d3ea9c 0x0cb9eb92 [DEFAULT] [hasThis] Void JC.Business.Spec.ProcessPDF(Object)      &lt;br /&gt;0x21d3ead4 0x0d12b933 [DEFAULT] [hasThis] Void JCC.Export.GoSpec()     &lt;br /&gt;0x21d3eb10 0x0d12b41f [DEFAULT] [hasThis] Void JCC.Export.Page_Load(Object,Class System.EventArgs)     &lt;br /&gt;0x21d3eb28 0x0ca2752c [DEFAULT] [hasThis] Void System.Web.UI.Control.OnLoad(Class System.EventArgs)&lt;/font&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;I believe that there is a problem in the JCC.Export page and I want to see what that references. The first thing I need to do is find out what assembly it lives in. I do that by dumping out the stack objects and getting the address of that type: &lt;/p&gt;  &lt;p class="debugCmd"&gt;0:068&amp;gt; !dumpstackobjects    &lt;br /&gt;Thread 68     &lt;br /&gt;ESP/REG Object Name     &lt;br /&gt;0x21d3e4f8 0x27c8f84 System.String Project_Titl     &lt;br /&gt;0x21d3eaac 0x15144c4 System.Object[]     &lt;br /&gt;0x21d3eae0 0x536b4c8 System.String pdf     &lt;br /&gt;0x21d3eae4 0x1513e44 System.String \\netshare\webshare$\Temp\spec\     &lt;br /&gt;0x21d3eaf0 0x5a1b4b0 _ASP.Export_aspx     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Now that I know the name of the type (_ASP.Export_aspx), I can find out what module it&amp;#8217;s in by first using the !name2ee command to search all loaded modules for this type: &lt;/p&gt;  &lt;p class="debugCmd"&gt;0:068&amp;gt; !name2ee * _ASP.Export_aspx    &lt;br /&gt;Searching all modules, this may take a while.     &lt;br /&gt;Loading all modules     &lt;br /&gt;Searching modules...     &lt;br /&gt;Module: 0c490220 (lbtrt0sh.dl )     &lt;br /&gt;MethodTable: 0x0d27002c     &lt;br /&gt;EEClass: 0x0d04f334     &lt;br /&gt;Name: _ASP.Export_aspx     &lt;br /&gt;----------------------------------- -------     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;The asterisk after the command tells it to search all modules. Note that the type name is case-sensitive &lt;/p&gt;  &lt;p&gt;Now I&amp;#8217;ve got the address of the module as reported by name2ee. To get the address to pass to !dumpdomain, you need to subtract 0x1d8 from that &lt;/p&gt;  &lt;p class="debugCmd"&gt;0:068&amp;gt; ? 0c490220 -0x1d8    &lt;br /&gt;Evaluate expression: 206110792 = 0c490048     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;There&amp;#8217;s the address we use to get the module information via !dumpmodule:&lt;/p&gt;  &lt;p class="debugCmd"&gt;0:068&amp;gt; !dumpmodule -mt 0c490048    &lt;br /&gt;Name c:\winnt\microsoft.net\framework\v1.1.4322\temporary asp.net files\root\b6f74a28\3807bf05\lbtrt0sh.dll     &lt;br /&gt;dwFlags 0x00200080     &lt;br /&gt;Attribute PEFile     &lt;br /&gt;Assembly 0x0bad89d0     &lt;br /&gt;LoaderHeap* 0x0017299c     &lt;br /&gt;TypeDefToMethodTableMap* 0x0c6b6618     &lt;br /&gt;TypeRefToMethodTableMap* 0x0c6b6664     &lt;br /&gt;MethodDefToDescMap* 0x0c6b67d4     &lt;br /&gt;FieldDefToDescMap* 0x0c6b6e18     &lt;br /&gt;MemberRefToDescMap* 0x0c6b6f78     &lt;br /&gt;FileReferencesMap* 0x0c6b786c     &lt;br /&gt;AssemblyReferencesMap* 0x0c6b7870     &lt;br /&gt;Types defined in this module     &lt;br /&gt;MT TypeDef Name     &lt;br /&gt;-----------------------------------------------------------------     &lt;br /&gt;0x17be8fbc 0x02000002 _ASP.MailMerge_aspx     &lt;br /&gt;0x1ee2ab4c 0x02000004 _ASP.AddPhone_aspx     &lt;br /&gt;0x0b9435d4 0x02000005 _ASP.AddEmail_aspx     &lt;br /&gt;0x21381254 0x02000007 _ASP.Calendar_aspx     &lt;br /&gt;0x17bef57c 0x02000009 _ASP.AddURL_aspx     &lt;br /&gt;0x0b9405f4 0x0200000b _ASP.AddAddress_aspx     &lt;br /&gt;0x25ef6cfc 0x0200000d _ASP.AssignProject_aspx     &lt;br /&gt;0x25ef2794 0x02000011 _ASP.MailMergeDownload_aspx     &lt;br /&gt;0x0b941244 0x02000012 _ASP.AssignCompany_aspx     &lt;br /&gt;Types referenced in this module     &lt;br /&gt;MT TypeRef Name     &lt;br /&gt;0x17be8c2c 0x02000001 JCC.MailMerge     &lt;br /&gt;0x0c7431ec 0x02000002 System.Web.SessionState.IRequiresSessionState     &lt;br /&gt;0x0ca193dc 0x02000003 System.Web.UI.WebControls.Literal     &lt;br /&gt;0x0ca19b5c 0x02000004 System.Web.UI.HtmlControls.HtmlForm     &lt;br /&gt;0x79ba0d74 0x02000005 System.Collections.ArrayList     &lt;br /&gt;0x0b97faac 0x02000007 System.Web.UI.Control     &lt;br /&gt;0x0ca1c944 0x02000008 System.Web.UI.HtmlTextWriter     &lt;br /&gt;0x1ee2a6e4 0x0200000e JCC.AddPhone     &lt;br /&gt;0x0b94322c 0x0200000f JCC.AddEmail     &lt;br /&gt;0x21380e64 0x02000011 JCC.Calendar     &lt;br /&gt;0x0d05fc0c 0x02000012 JCC.Export     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;I don't really see what&amp;#8217;m interested in here. Because the JC.Business.Spec class is at the top of the stack I'm working with, I want to find out what is in that class. First I need to find out what module that lives in, so I'll use !name2ee again.&lt;/p&gt;  &lt;p class="debugCmd"&gt;0:068&amp;gt; !name2ee * JC.Business.Spec    &lt;br /&gt;Searching all modules, this may take a while.     &lt;br /&gt;Loading all modules.     &lt;br /&gt;Searching modules...     &lt;br /&gt;Module: 0ba77100 (planspec.dll)     &lt;br /&gt;MethodTable: 0x0d2706bc     &lt;br /&gt;EEClass: 0x0d04fa7c     &lt;br /&gt;Name: JC.Business.Spec     &lt;br /&gt;----------------------------------- -------     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Instead of evaluating the module address and subtracting 0x1d8 before dumping it, I'll now just pass the expression straight to !dumpmodule: &lt;/p&gt;  &lt;p class="debugCmd"&gt;0:068&amp;gt; !dumpmodule -mt 0ba77100 -0x1d8    &lt;br /&gt;Name c:\winnt\microsoft.net\framework\v1.1.4322\temporary asp.net files\root\b6f74a28\3807bf05\assembly\dl2\2fb2768b\c0e90b4e_3b3cc501\planspec.dll     &lt;br /&gt;dwFlags 0x00200080     &lt;br /&gt;Attribute PEFile     &lt;br /&gt;Assembly 0x0ba76de8     &lt;br /&gt;LoaderHeap* 0x0017299c     &lt;br /&gt;TypeDefToMethodTableMap* 0x0c2622e4     &lt;br /&gt;TypeRefToMethodTableMap* 0x0c2622f8     &lt;br /&gt;MethodDefToDescMap* 0x0c262410     &lt;br /&gt;FieldDefToDescMap* 0x0c262490     &lt;br /&gt;MemberRefToDescMap* 0x0c2624e8     &lt;br /&gt;FileReferencesMap* 0x0c262644     &lt;br /&gt;AssemblyReferencesMap* 0x0c262648     &lt;br /&gt;MetaData starts at 0x0c273d30 (0x221c bytes)     &lt;br /&gt;Types defined in this module     &lt;br /&gt;MT TypeDef Name     &lt;br /&gt;-----------------------------------------------------------------     &lt;br /&gt;0x145f2630 0x02000002 PlanSpecFileType     &lt;br /&gt;0x145f283c 0x02000003 JC.PlanSpecBiz.GroupList     &lt;br /&gt;0x0d2706bc 0x02000004 JC.Business.Spec     &lt;br /&gt;Types referenced in this module     &lt;br /&gt;MT TypeRef Name     &lt;br /&gt;-----------------------------------------------------------------     &lt;br /&gt;0x0cb25a70 0x02000021 OCXLib.OCXClass     &lt;br /&gt;0x0cb22718 0x02000024 OCXLib._DOCX     &lt;br /&gt;0x0d2772c8 0x02000029 RasterIO.LRIOClass     &lt;br /&gt;0x0d27bc24 0x0200002a RasterLib.LRasterClass     &lt;br /&gt;0x0d272ca8 0x0200002b LRIOLib.ILRasterIO     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Look at those OCX classes. If I look to see where they are, I find an interop component: &lt;/p&gt;  &lt;p class="debugCmd"&gt;0:068&amp;gt; !name2ee * OCXLib.OCXClass    &lt;br /&gt;Searching all modules, this may take a while.     &lt;br /&gt;Loading all modules.     &lt;br /&gt;Searching modules...     &lt;br /&gt;Module: 0bad99a8 (interop.ocxlib.dll)     &lt;br /&gt;MethodTable: 0x0cb25a70     &lt;br /&gt;EEClass: 0x0d28c8b0     &lt;br /&gt;Name: OCXLib.OCXClass     &lt;br /&gt;----------------------------------- -------     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;I now know that the stacks that are hanging are sitting on a function call in a class that references the interop component that's using the OCX that I found on another thread. This doesn't get me to root cause, but it does give me a clear indicator of where I need to start looking.&lt;/p&gt;  &lt;p&gt;Jim&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7225814" width="1" height="1"&gt;</description></item><item><title>Cool Things You Can Do with AppCMD in IIS 7</title><link>http://blogs.msdn.com/b/jamesche/archive/2008/01/16/cool-things-you-can-do-with-appcmd-in-iis-7.aspx</link><pubDate>Wed, 16 Jan 2008 21:43:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7134013</guid><dc:creator>Jim Cheshire</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jamesche/rsscomments.aspx?WeblogPostID=7134013</wfw:commentRss><comments>http://blogs.msdn.com/b/jamesche/archive/2008/01/16/cool-things-you-can-do-with-appcmd-in-iis-7.aspx#comments</comments><description>&lt;p&gt;If you haven't had a chance yet to mess around with IIS 7, you should take the time. One of the changes that will impact everyone is configuration. Not only have we changed where configuration settings are stored, but we've also released a very cool command-line tool for examining and changing configuration called appcmd.exe. However, appcmd.exe is not just about configuration. There are some really cool things that you can do with it.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;Wildcard Mapping&lt;/h1&gt;  &lt;p&gt;You can use wildcard characters with appcmd using the following syntax:&lt;/p&gt;  &lt;p class="debugCmd"&gt;appcmd list apppool /name:&amp;quot;$=*2007&amp;quot;&lt;/p&gt;  &lt;p&gt;This command will list all application pools with a name ending in &amp;quot;2007&amp;quot;. Using a variation on the same method, you can find all application pools running under the identify of users in a particular domain.&lt;/p&gt;  &lt;p class="debugCmd"&gt;appcmd list apppool /processModel.userName:&amp;quot;$=MyDomain\*&amp;quot;&lt;/p&gt;  &lt;p&gt;This will list all application pools with running with an identity of users in the &amp;quot;MyDomain&amp;quot; domain.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Tip: &lt;/strong&gt;You can find out all of the attributes that can be used with appcmd by querying for help after using an attribute. For example:&lt;/p&gt;  &lt;p class="debugCmd"&gt;appcmd list apppools /name:DefaultAppPool -?    &lt;br /&gt;    &lt;br /&gt;ERROR ( message:-name     &lt;br /&gt;-queueLength     &lt;br /&gt;-autoStart     &lt;br /&gt;-enable32BitAppOnWin64     &lt;br /&gt;-managedRuntimeVersion     &lt;br /&gt;-enableConfigurationOverride     &lt;br /&gt;-managedPipelineMode     &lt;br /&gt;-passAnonymousToken     &lt;br /&gt;-processModel.identityType     &lt;br /&gt;-processModel.userName     &lt;br /&gt;-processModel.password     &lt;br /&gt;-processModel.loadUserProfile     &lt;br /&gt;-processModel.manualGroupMembership     &lt;br /&gt;-processModel.idleTimeout     &lt;br /&gt;-processModel.maxProcesses     &lt;br /&gt;-processModel.shutdownTimeLimit     &lt;br /&gt;-processModel.startupTimeLimit     &lt;br /&gt;-processModel.pingingEnabled     &lt;br /&gt;-processModel.pingInterval     &lt;br /&gt;-processModel.pingResponseTime     &lt;br /&gt;-recycling.disallowOverlappingRotation     &lt;br /&gt;-recycling.disallowRotationOnConfigChange     &lt;br /&gt;-recycling.logEventOnRecycle     &lt;br /&gt;-recycling.periodicRestart.memory     &lt;br /&gt;-recycling.periodicRestart.privateMemory     &lt;br /&gt;-recycling.periodicRestart.requests     &lt;br /&gt;-recycling.periodicRestart.time     &lt;br /&gt;-recycling.periodicRestart.schedule.[value='timespan'].value     &lt;br /&gt;-failure.loadBalancerCapabilities     &lt;br /&gt;-failure.orphanWorkerProcess     &lt;br /&gt;-failure.orphanActionExe     &lt;br /&gt;-failure.orphanActionParams     &lt;br /&gt;-failure.rapidFailProtection     &lt;br /&gt;-failure.rapidFailProtectionInterval     &lt;br /&gt;-failure.rapidFailProtectionMaxCrashes     &lt;br /&gt;-failure.autoShutdownExe     &lt;br /&gt;-failure.autoShutdownParams     &lt;br /&gt;-cpu.limit     &lt;br /&gt;-cpu.action     &lt;br /&gt;-cpu.resetInterval     &lt;br /&gt;-cpu.smpAffinitized     &lt;br /&gt;-cpu.smpProcessorAffinityMask     &lt;br /&gt;-cpu.smpProcessorAffinityMask2     &lt;br /&gt;)&lt;/p&gt;  &lt;p&gt;By appending &amp;quot;-?&amp;quot; to the command above, appcmd generates an error that lists all of the attributes that can be used with application pools.&lt;/p&gt;  &lt;h1&gt;&lt;/h1&gt;  &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;  &lt;h1&gt;Piping Output&lt;/h1&gt;  &lt;p&gt;You can pipe appcmd output to another appcmd command. Having this capability is extremely powerful, especially in the area of scripting functionality around appcmd.&lt;/p&gt;  &lt;p&gt;The following command will find all application pools with names ending in &amp;quot;2007&amp;quot; and will then recycle each of them.&lt;/p&gt;  &lt;p class="debugCmd"&gt;appcmd apppool list /name:&amp;quot;$=*2007&amp;quot; /xml | appcmd apppool recycle /in&lt;/p&gt;  &lt;p&gt;(The &amp;quot;/in&amp;quot; switch causes the output from the first command to be sent to stdin.)&lt;/p&gt;  &lt;p&gt;A more useful example might be to restart all application pools serving requests that have been executing for longer than a particular amount of time. The following command will recycle all application pools serving requests that have been executing for more than 30 seconds.&lt;/p&gt;  &lt;p class="debugCmd"&gt;Appcmd list request /xml /time:&amp;quot;$&amp;gt;30000&amp;quot; | appcmd recycle apppool /in&lt;/p&gt;  &lt;p&gt;In such situations, you might want to also obtain a list of the application pools. You can use multiple pipes to achieve that result.&lt;/p&gt;  &lt;p class="debugCmd"&gt;Appcmd list request /xml /time:&amp;quot;$&amp;gt;30000&amp;quot; | appcmd list apppool /in /xml | appcmd recycle apppool /in&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;AppcmdUI&lt;/h1&gt;  &lt;p&gt;These examples only touch on the capabilities of appcmd.exe. One of the best ways to discover the capabilities of this tool is to use AppcmdUI. AppcmdUI is an interface into appcmd.exe. It gives you auto-completion for appcmd.exe commands and nicely formatted documentation so that you can more easily learn this powerful tool.&lt;/p&gt;  &lt;p&gt;AppcmdUI is available from the &lt;a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1446"&gt;IIS.net website&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;By the way, those of you familiar with PowerShell might think that appcmd.exe uses PowerShell for some of its functionality. It doesn't. Therefore, appcmd.exe can be used with Windows 2008 Server Core as well.&lt;/p&gt;  &lt;p&gt;Jim&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7134013" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/b/jamesche/archive/tags/IIS7/">IIS7</category><category domain="http://blogs.msdn.com/b/jamesche/archive/tags/AppCmd/">AppCmd</category></item><item><title>Update on Slow Startup Fix</title><link>http://blogs.msdn.com/b/jamesche/archive/2008/01/08/update-on-slow-startup-fix.aspx</link><pubDate>Tue, 08 Jan 2008 18:13:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7029080</guid><dc:creator>Jim Cheshire</dc:creator><slash:comments>14</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/jamesche/rsscomments.aspx?WeblogPostID=7029080</wfw:commentRss><comments>http://blogs.msdn.com/b/jamesche/archive/2008/01/08/update-on-slow-startup-fix.aspx#comments</comments><description>&lt;p&gt;A while back, I wrote a &lt;a href="http://blogs.msdn.com/jamesche/archive/2007/10/25/long-delay-on-first-request-to-asp-net-2-0-application.aspx"&gt;post regarding slow startup of ASP.NET 2.0 applications&lt;/a&gt; due to a lookup on a bad account. The hotfix for that issue is now available. The KB number is 944157. You can get the fix by calling PSS or by using our &lt;a href="http://blogs.msdn.com/jamesche/archive/2007/07/27/get-hotfixes-without-calling-pss.aspx"&gt;online automated system&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Jim&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7029080" width="1" height="1"&gt;</description></item></channel></rss>