<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>.NET</title><link>http://todotnet.com/category/18.aspx</link><description>General articles on .NET</description><managingEditor>Sander Gerz</managingEditor><dc:language>en-US</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Sander Gerz</dc:creator><title>Visual Studio 2008 released soon?</title><link>http://todotnet.com/archive/2007/11/17/11347.aspx</link><pubDate>Sat, 17 Nov 2007 20:43:00 GMT</pubDate><guid>http://todotnet.com/archive/2007/11/17/11347.aspx</guid><wfw:comment>http://todotnet.com/comments/11347.aspx</wfw:comment><comments>http://todotnet.com/archive/2007/11/17/11347.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://todotnet.com/comments/commentRss/11347.aspx</wfw:commentRss><trackback:ping>http://todotnet.com/services/trackbacks/11347.aspx</trackback:ping><description>&lt;P&gt;According to the &lt;A href="http://blogs.msdn.com/msdnsubscriptions/archive/2007/11/16/look-for-visual-studio-2008-downloads-on-top-subscriber-downloads-early-next-week.aspx"&gt;MSDN Subscriptions WebLog&lt;/A&gt; we can expect to see Visual Studio 2008 to be downloadable early next week. &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;#8220;Visual Studio 2008 is anticipated out early next week, with availability for Subscribers. Check out the "Top Subscriber Downloads" area on &lt;/EM&gt;&lt;A href="http://msdn2.microsoft.com/subscriptions" minmax_bound="true"&gt;&lt;EM&gt;http://msdn2.microsoft.com/subscriptions&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt; for VS 2008 downloads.&lt;/EM&gt;&lt;/P&gt;
&lt;P minmax_bound="true"&gt;&lt;EM&gt;You will also be able to access these downloads by clicking on the Subscriber Downloads and&amp;nbsp;Product Keys links&amp;nbsp;that take you to all of your downloads. &amp;#8221;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;EM&gt;(source: &lt;/EM&gt;&lt;/FONT&gt;&lt;A href="http://weblogs.asp.net/kencox/archive/2007/11/17/visual-studio-2008-early-next-week.aspx"&gt;&lt;FONT size=2&gt;&lt;EM&gt;Ken Cox&lt;/EM&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=2&gt;&lt;EM&gt;)&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;That would be great and just in time for a session I'm doing Friday on 'what's new in Visual Studio 2008'. More details on that here: &lt;A href="http://www.newhorizonslearning.nl/New-Horizon-s-Developers-day.554.0.html"&gt;http://www.newhorizonslearning.nl/New-Horizon-s-Developers-day.554.0.html&lt;/A&gt;&amp;nbsp;(it's Dutch).&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;EM&gt;update: RTM has been reached and VSTS 2008 can be downloaded (&lt;A href="http://weblogs.asp.net/fbouma/archive/2007/11/19/visual-studio-team-system-2008-team-suite-rtm-now-available-on-msdn-subscribers.aspx"&gt;source&lt;/A&gt;).&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://todotnet.com/aggbug/11347.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Sander Gerz</dc:creator><title>Migrate ClearCase to TFS: update</title><link>http://todotnet.com/archive/2007/09/16/11334.aspx</link><pubDate>Sun, 16 Sep 2007 17:49:00 GMT</pubDate><guid>http://todotnet.com/archive/2007/09/16/11334.aspx</guid><wfw:comment>http://todotnet.com/comments/11334.aspx</wfw:comment><comments>http://todotnet.com/archive/2007/09/16/11334.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://todotnet.com/comments/commentRss/11334.aspx</wfw:commentRss><trackback:ping>http://todotnet.com/services/trackbacks/11334.aspx</trackback:ping><description>&lt;P&gt;Recently, I started a on a new project as a development coordinator. One of the tasks we face is a migration from Rational ClearCase to Team Foundation Server.&amp;nbsp;A &lt;A href="http://blogs.msdn.com/tfs_migration/archive/2007/09/13/migrating-clearcase-branches-to-tfs.aspx"&gt;tool&lt;/A&gt; that should help in doing this has just been released. What a coincidence!&lt;/P&gt;
&lt;DIV class=downloadInfo&gt;&lt;A name=Description&gt;&lt;/A&gt;&lt;SPAN&gt;The &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=999220ED-3D11-411A-BB54-71DDDB724E15&amp;amp;displaylang=en"&gt;Team Foundation Server Migration Tool for Rational&amp;#174; ClearCase&amp;#174;&lt;/A&gt; is a tool to help automate the migration process from Rational&amp;#174; ClearCase&amp;#174; to Team Foundation Server. This tool is available as a free download for Team Foundation Server users. &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class=downloadInfo&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=downloadInfo&gt;&lt;SPAN&gt;&lt;A href="http://blogs.msdn.com/briankel/archive/2007/09/15/clearcase-to-team-foundation-server-migrationt-tool.aspx"&gt;Brian Keller also points&lt;/A&gt; to other &lt;A href="http://msdn2.microsoft.com/en-us/teamsystem/bb840033.aspx"&gt;useful resources&lt;/A&gt;&amp;nbsp;as well as a blog post on &lt;A href="http://blogs.msdn.com/tfs_migration/archive/2007/09/13/migrating-clearcase-branches-to-tfs.aspx"&gt;migrating from ClearCase to TFS&lt;/A&gt;. Just what we need. &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class=downloadInfo&gt;&lt;SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class=downloadInfo&gt;&lt;SPAN&gt;&lt;EM&gt;update:&lt;/EM&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV class=downloadInfo&gt;&lt;SPAN&gt;&lt;EM&gt;Actually, we cannot use the tool. It appears it &lt;/EM&gt;&lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243916&amp;amp;SiteID=1"&gt;&lt;EM&gt;only works with ClearCase&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;, and we're using ClearCase LT. The differences can be found &lt;/EM&gt;&lt;A href="http://www.agsrhichome.bnl.gov/Controls/doc/ClearCaseEnv/2003.06/ccase/doc/all/cc_intro/overview4.htm"&gt;&lt;EM&gt;here&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;. Bummer.&lt;/EM&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;img src ="http://todotnet.com/aggbug/11334.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Sander Gerz</dc:creator><title>Creating a simple captcha </title><link>http://todotnet.com/archive/2007/06/08/11313.aspx</link><pubDate>Fri, 08 Jun 2007 09:01:00 GMT</pubDate><guid>http://todotnet.com/archive/2007/06/08/11313.aspx</guid><wfw:comment>http://todotnet.com/comments/11313.aspx</wfw:comment><comments>http://todotnet.com/archive/2007/06/08/11313.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://todotnet.com/comments/commentRss/11313.aspx</wfw:commentRss><trackback:ping>http://todotnet.com/services/trackbacks/11313.aspx</trackback:ping><description>&lt;P&gt;The new &lt;A href="http://todotnet.com/archive/2007/04/10/11299.aspx"&gt;DevTips.NET website&lt;/A&gt; allows for people to comment on most content, unlike the old site. Obviously this opened up possibilities to add comment spam on all the places. There is a common technique to counter this, called &lt;A href="http://en.wikipedia.org/wiki/Captcha"&gt;CAPTCHA&lt;/A&gt; or &amp;#8220;Completely Automated Public Turing test to tell Computers and Humans Apart&amp;#8221;. There is also an &lt;A href="http://blogs.clearscreen.com/migs/archive/2005/02/01/905.aspx"&gt;easy ASP.NET control&lt;/A&gt; that you can implement on a website to implement this captcha from &lt;A href="http://blogs.clearscreen.com/migs"&gt;Miguel Jimenez&lt;/A&gt;. I use it on this blog. For some reason though, the captcha-image didn't display on the new site. Several options are available: figure out what's wrong, look for another control or... build one myself. Thinking that it shouldn't be too hard, and being a developer, I obviously chose the last option. So here goes:&lt;/P&gt;
&lt;P&gt;First, we need an image to display. I chose to use an HttpHandler for this. Seemed like a good choice, since we only need to Response.Write an image, and store the generated code somewhere. &lt;/P&gt;
&lt;DIV style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Consolas"&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;lt;%@ WebHandler Language=&lt;SPAN style="COLOR: #a31515"&gt;"C#"&lt;/SPAN&gt; Class=&lt;SPAN style="COLOR: #a31515"&gt;"HipHandler"&lt;/SPAN&gt; %&amp;gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Web;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Drawing;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Drawing.Imaging;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Drawing.Drawing2D;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Drawing.Text;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;HipHandler&lt;/SPAN&gt; : &lt;SPAN style="COLOR: #2b91af"&gt;IHttpHandler&lt;/SPAN&gt; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; ProcessRequest (&lt;SPAN style="COLOR: #2b91af"&gt;HttpContext&lt;/SPAN&gt; context) {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; context.Response.ContentType = &lt;SPAN style="COLOR: #a31515"&gt;"image/jpeg"&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SendImage(context);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; SendImage(&lt;SPAN style="COLOR: #2b91af"&gt;HttpContext&lt;/SPAN&gt; context)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; fontSize = 24;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; width = 100;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; height = 30;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Setup the rectangle to draw the text on&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; RectangleF rectF = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; RectangleF(0, 0, width, height);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Bitmap pic = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; Bitmap(width, height);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Graphics g = Graphics.FromImage(pic);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; g.SmoothingMode = SmoothingMode.AntiAlias;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SolidBrush fgBrush = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; SolidBrush(Color.RoyalBlue);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; SolidBrush bgBrush = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; SolidBrush(Color.SkyBlue);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; g.FillRectangle(bgBrush, rectF);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Choose the font and style&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; FontStyle style = FontStyle.Regular;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Font font = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; Font(&lt;SPAN style="COLOR: #a31515"&gt;"Arial"&lt;/SPAN&gt;, fontSize, style, GraphicsUnit.Pixel);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Make sure the text is centered&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; StringFormat format = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; StringFormat();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; format.Alignment = StringAlignment.Center;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Draw horizontal and vertical lines to make is less computer-readable&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Pen p = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; Pen(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; SolidBrush(Color.SteelBlue), 1);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; i = 0; i &amp;lt; height; i=i+7)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; g.DrawLine(p, 0, i, width, i);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; i = 0; i &amp;lt; width; i=i+10)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; g.DrawLine(p, i, 0, i, height);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Get 4 random characters, no weird ones&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; randomText = GenerateRandomText(4, &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.Security.Cryptography.&lt;SPAN style="COLOR: #2b91af"&gt;SHA256Managed&lt;/SPAN&gt; hashAlg = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; System.Security.Cryptography.&lt;SPAN style="COLOR: #2b91af"&gt;SHA256Managed&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Hash the text so it can be verified after postback&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; hashText = &lt;SPAN style="COLOR: #2b91af"&gt;HttpUtility&lt;/SPAN&gt;.UrlEncode(hashAlg.ComputeHash(System.Text.&lt;SPAN style="COLOR: #2b91af"&gt;Encoding&lt;/SPAN&gt;.Default.GetBytes(randomText)));&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; context.Response.AppendCookie(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;HttpCookie&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"HipHash"&lt;/SPAN&gt;, hashText));&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Write the text and send it to the browser&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; g.DrawString(randomText, font, fgBrush, rectF, format);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; pic.Save(context.Response.OutputStream, ImageFormat.Jpeg);&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; GenerateRandomText(&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; maxlength, &lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt; ultraStrong)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;char&lt;/SPAN&gt;[] ultraChars = &lt;SPAN style="COLOR: #a31515"&gt;"!@#$%^&amp;amp;*~|=?{}[]qwertyuiopasdfghjklzxcvbnm1234567890!@#$%^&amp;amp;*~|=?{}[]"&lt;/SPAN&gt;.ToCharArray();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;char&lt;/SPAN&gt;[] normalChars = &lt;SPAN style="COLOR: #a31515"&gt;"qwertyuiopasdfghjklzxcvbnm1234567890"&lt;/SPAN&gt;.ToCharArray();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; password = &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;.Empty;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;for&lt;/SPAN&gt; (&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; i = 0; i &amp;lt; maxlength; i++)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;char&lt;/SPAN&gt; n = &lt;SPAN style="COLOR: #a31515"&gt;' '&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (ultraStrong) n = ultraChars[GetRandomNumber(ultraChars.Length - 1)];&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (!ultraStrong) n = normalChars[GetRandomNumber(normalChars.Length - 1)];&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (i % 2 == 0)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; password += n.ToString().ToUpper();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; password += n;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; password;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; GetRandomNumber(&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; maxvalue)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.Security.Cryptography.&lt;SPAN style="COLOR: #2b91af"&gt;RandomNumberGenerator&lt;/SPAN&gt; random =&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.Security.Cryptography.&lt;SPAN style="COLOR: #2b91af"&gt;RandomNumberGenerator&lt;/SPAN&gt;.Create();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[] r = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;[1];&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; random.GetBytes(r);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;double&lt;/SPAN&gt; val = (&lt;SPAN style="COLOR: blue"&gt;double&lt;/SPAN&gt;)r[0] / &lt;SPAN style="COLOR: blue"&gt;byte&lt;/SPAN&gt;.MaxValue;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; i = (&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;)&lt;SPAN style="COLOR: #2b91af"&gt;Math&lt;/SPAN&gt;.Round(val * maxvalue, 0);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; i;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt; IsReusable {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;}&lt;/P&gt;&lt;/DIV&gt;&lt;!--EndFragment--&gt;
&lt;P&gt;I'm reusing a method to generate random texts. It was originally intended to create random passwords, hence the variable names in the implementation of the method &lt;FONT face="Courier New"&gt;GenerateRandomText()&lt;/FONT&gt;. The randomly chosen four characters are displayed in the image and also stored in a cookie. No, not directly of course. The text is hashed making it impossible to read before it's stored in the cookie. Other storages, like session or response headers are unavailable or unusable in an HttpHandler.&amp;nbsp;Using a session to store a code &lt;A href="http://www.puremango.co.uk/cm_breaking_captcha_115.php"&gt;is bad practice anyway&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;The second part is a Web User Control that displays the image and asks the user to enter the displayed code.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; BACKGROUND: yellow; FONT-FAMILY: Consolas; mso-highlight: yellow; mso-no-proof: yes"&gt;&amp;lt;%&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;@&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: #a31515"&gt;Control&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Language&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="C#"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;AutoEventWireup&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="true"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;CodeFile&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="UserControlHip.ascx.cs"&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;Inherits&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="UserControlHip"&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND: yellow; mso-highlight: yellow"&gt;%&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;img&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: red"&gt;src&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="HipHandler.ashx"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;alt&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="HIP"&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;Enter the code: &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;TextBox&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="TextBoxHip"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Width&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="100"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server"&amp;gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;TextBox&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;Label&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="LabelCodeStatus"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Text&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;=""&amp;gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Label&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;Obviously you can modify the html of this user control to fit your needs and style. The code-behind is a bit more elaborate.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;DIV style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Consolas"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Data;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Configuration;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Collections;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Web;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Web.Security;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Web.UI;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Web.UI.WebControls;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Web.UI.WebControls.WebParts;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Web.UI.HtmlControls;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;partial&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;UserControlHip&lt;/SPAN&gt; : System.Web.UI.&lt;SPAN style="COLOR: #2b91af"&gt;UserControl&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; m_controlToVerify;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; ControlToVerify&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;get&lt;/SPAN&gt; { &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; m_controlToVerify; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;set&lt;/SPAN&gt; { m_controlToVerify = &lt;SPAN style="COLOR: blue"&gt;value&lt;/SPAN&gt;; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; Page_Load(&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR: #2b91af"&gt;EventArgs&lt;/SPAN&gt; e)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (IsPostBack)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Verify the submitted code to the generated code&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; System.Security.Cryptography.&lt;SPAN style="COLOR: #2b91af"&gt;SHA256Managed&lt;/SPAN&gt; hashAlg = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; System.Security.Cryptography.&lt;SPAN style="COLOR: #2b91af"&gt;SHA256Managed&lt;/SPAN&gt;();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; hashText = &lt;SPAN style="COLOR: #2b91af"&gt;HttpUtility&lt;/SPAN&gt;.UrlEncode(hashAlg.ComputeHash(System.Text.&lt;SPAN style="COLOR: #2b91af"&gt;Encoding&lt;/SPAN&gt;.Default.GetBytes(TextBoxHip.Text)));&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; hashTextFromHeader =&amp;nbsp; Request.Cookies[&lt;SPAN style="COLOR: #a31515"&gt;"HipHash"&lt;/SPAN&gt;].Value;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LabelCodeStatus.Text = &lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (hashTextFromHeader != hashText)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// If the code is not correct, save the contents of the control to verify (usually &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// a comments-textbox) in a session so visitors don't loose their elaborate entry&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// After that, redirect to the same page&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;TextBox&lt;/SPAN&gt; textBoxControl = (&lt;SPAN style="COLOR: #2b91af"&gt;TextBox&lt;/SPAN&gt;)&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;.Parent.FindControl(m_controlToVerify);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Session[&lt;SPAN style="COLOR: #a31515"&gt;"HipControlToVerifyValue"&lt;/SPAN&gt;] = textBoxControl != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt; ? textBoxControl.Text : &lt;SPAN style="COLOR: #a31515"&gt;""&lt;/SPAN&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Redirect(Request.Url.PathAndQuery);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (!IsPostBack)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;TextBox&lt;/SPAN&gt; textBoxControl = (&lt;SPAN style="COLOR: #2b91af"&gt;TextBox&lt;/SPAN&gt;)&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;.Parent.FindControl(m_controlToVerify);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// If return from a redirect, meaning the code entered was incorrect, &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// fill the textbox with the session-stored entry.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; (Session[&lt;SPAN style="COLOR: #a31515"&gt;"HipControlToVerifyValue"&lt;/SPAN&gt;] != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; textBoxControl.Text = &lt;SPAN style="COLOR: #2b91af"&gt;HttpUtility&lt;/SPAN&gt;.HtmlEncode((&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;)Session[&lt;SPAN style="COLOR: #a31515"&gt;"HipControlToVerifyValue"&lt;/SPAN&gt;]);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; LabelCodeStatus.Text = &lt;SPAN style="COLOR: #a31515"&gt;"Wrong code"&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Session[&lt;SPAN style="COLOR: #a31515"&gt;"HipControlToVerifyValue"&lt;/SPAN&gt;] = &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;}&lt;/P&gt;&lt;/DIV&gt;&lt;!--EndFragment--&gt;
&lt;P&gt;The most important part of the control is to verify the code entered. Since this is stored in a cookie, we retrieve it first and then compare the hashed value of the code with the hashed value stored in the cookie. If the values match we do... nothing. Just let the rest of the page render and do any processing it may need to. However, if values do not match, there's a &lt;FONT face="Courier New"&gt;Response.Redirect&lt;/FONT&gt; to the same page, so rendering and processing of the page stops. &lt;/P&gt;
&lt;P&gt;It's certainly a pain if you've just entered an elaborate comment somewhere only to make a typo when you enter the captcha-code, thereby redirecting and losing everything you wrote. So, to make it more friendly, the control has a property &amp;#8220;ControlToVerify&amp;#8221;. Perhaps the naming is incorrect, but this allows you to store the value of a control, before redirecting and setting the value of the control after the redirect. In this code, it has to be a textbox, but you can change it to anything you like of course.&lt;/P&gt;
&lt;P&gt;After all this, you can put the control on any ASP.NET web page, like this:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; BACKGROUND: yellow; FONT-FAMILY: Consolas; mso-highlight: yellow; mso-no-proof: yes"&gt;&amp;lt;%&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;@&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: #a31515"&gt;Register&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Src&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="UserControlHip.ascx"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;TagName&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="UserControlHip"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;TagPrefix&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="uc1"&lt;/SPAN&gt; &lt;SPAN style="BACKGROUND: yellow; mso-highlight: yellow"&gt;%&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;This Register directive is to be set at the top of the page. The following code is placed at the position you want people to enter the verification code.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;uc1&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;UserControlHip&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: red"&gt;id&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="UserControlHip1"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;ControlToVerify&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="TextBox1"&amp;gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;uc1&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;UserControlHip&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;TextBox&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="TextBox1"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server"&amp;gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;TextBox&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;asp&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;:&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: red"&gt;ID&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="Button1" &lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;runat&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="server"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;Text&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="Button"&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;That's it. Please add error handling code as you see fit. The rendered image is pretty simple, and you've probably seen more elaborate ones. But I think it'll do the job. If you want to see what it looks like, check out an &lt;A href="http://www.devtips.net/Artikelen.aspx"&gt;article&lt;/A&gt;, &lt;A href="http://www.devtips.net/Codesnippets.aspx"&gt;code snippet&lt;/A&gt; or &lt;A href="http://www.devtips.net/Nieuws.aspx"&gt;news item&lt;/A&gt; on &lt;A href="http://www.devtips.net/"&gt;DevTips.NET&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;You can download a &lt;A href="http://todotnet.com/WebSiteHIP.zip"&gt;sample project that implements all this here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;&lt;img src ="http://todotnet.com/aggbug/11313.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Sander Gerz</dc:creator><title>Trouble with threads and cultures</title><link>http://todotnet.com/archive/2007/04/11/11303.aspx</link><pubDate>Wed, 11 Apr 2007 14:19:00 GMT</pubDate><guid>http://todotnet.com/archive/2007/04/11/11303.aspx</guid><wfw:comment>http://todotnet.com/comments/11303.aspx</wfw:comment><comments>http://todotnet.com/archive/2007/04/11/11303.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://todotnet.com/comments/commentRss/11303.aspx</wfw:commentRss><trackback:ping>http://todotnet.com/services/trackbacks/11303.aspx</trackback:ping><description>&lt;P&gt;Here's something that bit me today. A few days ago, a Windows Service I built was redeployed to another machine. Most operations went on just fine, but some didn't. And as always:&amp;nbsp;&lt;EM&gt;'it worked on my machine'&lt;/EM&gt;. As it had also worked in testing and on the previous production server. After some digging, we found that the regional settings for the service account on this machine were not&amp;nbsp;what they&amp;nbsp;were&amp;nbsp;on the other servers. Yes, I know, don't depend on regional settings, but there was some legacy code (hah..it's not my fault) and it had never created issues before. &lt;/P&gt;
&lt;P&gt;So, easy enough, we set the thread for the service to the required culture, like so:&lt;/P&gt;
&lt;DIV style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Consolas"&gt;
&lt;P style="MARGIN: 0px"&gt;System.Threading.&lt;SPAN style="COLOR: teal"&gt;Thread&lt;/SPAN&gt;.CurrentThread.CurrentCulture = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; System.Globalization.&lt;SPAN style="COLOR: teal"&gt;CultureInfo&lt;/SPAN&gt;(&lt;SPAN style="COLOR: maroon"&gt;"nl-NL"&lt;/SPAN&gt;);&lt;/P&gt;&lt;/DIV&gt;&lt;!--EndFragment--&gt;
&lt;P&gt;Unfortunately, it didn't have the desired effect. Nothing changed. As it turns out, you have to set the culture on every thread running. See the sample below:&lt;/P&gt;
&lt;DIV style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Consolas"&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Globalization;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;using&lt;/SPAN&gt; System.Threading;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&lt;SPAN style="COLOR: blue"&gt;namespace&lt;/SPAN&gt; RegionalTime&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;{&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;ClassDemo&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; TimeNow()&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: teal"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: maroon"&gt;"Date setting: {0} ({1})"&lt;/SPAN&gt;,&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: teal"&gt;DateTime&lt;/SPAN&gt;.Now.ToLongDateString(),&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: teal"&gt;Thread&lt;/SPAN&gt;.CurrentThread.CurrentCulture.DisplayName);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;delegate&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;TimeNowDelegate&lt;/SPAN&gt;();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;SPAN style="COLOR: teal"&gt;STAThread&lt;/SPAN&gt;]&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; Main(&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;[] args)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Look at current regional settings&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TimeNow();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Switch to French&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: teal"&gt;Thread&lt;/SPAN&gt;.CurrentThread.CurrentCulture = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;CultureInfo&lt;/SPAN&gt;(&lt;SPAN style="COLOR: maroon"&gt;"fr-FR"&lt;/SPAN&gt;);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TimeNow();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Switch to US&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: teal"&gt;Thread&lt;/SPAN&gt;.CurrentThread.CurrentCulture = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;CultureInfo&lt;/SPAN&gt;(&lt;SPAN style="COLOR: maroon"&gt;"en-US"&lt;/SPAN&gt;);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; TimeNow();&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Now through a delegate on a different thread.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: teal"&gt;TimeNowDelegate&lt;/SPAN&gt; methodDelegate = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: teal"&gt;TimeNowDelegate&lt;/SPAN&gt;(TimeNow);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: teal"&gt;IAsyncResult&lt;/SPAN&gt; result = methodDelegate.BeginInvoke(&lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;, &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;while&lt;/SPAN&gt; (!result.IsCompleted)&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: teal"&gt;Thread&lt;/SPAN&gt;.Sleep(500);&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P style="MARGIN: 0px"&gt;}&lt;/P&gt;&lt;/DIV&gt;&lt;!--EndFragment--&gt;
&lt;P&gt;As you will see, from running this code, the call through the delegate uses the regional settings from the active user.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Date setting: woensdag 11 april 2007 (Dutch (Netherlands))&lt;BR&gt;Date setting: mercredi 11 avril 2007 (French (France))&lt;BR&gt;Date setting: Wednesday, April 11, 2007 (English (United States))&lt;BR&gt;Date setting: woensdag 11 april 2007 (Dutch (Netherlands))&lt;BR&gt;Press any key to continue . . .&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;There seems to be no way to specify one culture for the entire AppDomain (note: I'm not talking about ASP.NET here, this was a multithreaded Windows Service). If any thinks or better yet, knows, that this is possible, let me know. I am always eager to learn.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://todotnet.com/aggbug/11303.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Sander Gerz</dc:creator><title>Visual Studio "Orcas" October CTP Available</title><link>http://todotnet.com/archive/2006/11/01/10579.aspx</link><pubDate>Wed, 01 Nov 2006 08:07:00 GMT</pubDate><guid>http://todotnet.com/archive/2006/11/01/10579.aspx</guid><wfw:comment>http://todotnet.com/comments/10579.aspx</wfw:comment><comments>http://todotnet.com/archive/2006/11/01/10579.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://todotnet.com/comments/commentRss/10579.aspx</wfw:commentRss><trackback:ping>http://todotnet.com/services/trackbacks/10579.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://www.alexthissen.nl/weblog/DetailsView.aspx?guid=a83ea63e-18ed-4d45-a46e-483b04ba8957"&gt;Alex&lt;/A&gt; is discussing the September 2006 CTP of Visual Studio &amp;#8220;Orcas&amp;#8221; and ends with &amp;#8220;The next CTP should bring more.&amp;#8221;. Well, the &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C09B5A2D-EB6A-44B6-8BBD-3764A2FDA9CE&amp;amp;displaylang=en"&gt;next CTP&lt;/A&gt; is available. You'll see a number of improvements made compared to the last CTP. Here are a few that peeked my interest.&lt;A href="http://msdn.microsoft.com/netframework/future/linq/"&gt;&lt;IMG style="MARGIN-RIGHT: 10px" alt="Visual Studio Code Name &amp;#8220;Orcas&amp;#8221; CTP - Language Integrated Query" src="http://msdn.microsoft.com/nodehomes/graphics/80x60/Deploy.jpg" align=right border=0&gt;&lt;/A&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Enhanced the existing .Net Data Provider to work with the new features in ADO.Net 3.0 such as LINQ and object services;&lt;/LI&gt;
&lt;LI&gt;Developers can build can create scripts as actual programs &amp;#8211;instead of VBS scripts- that are still completely self-contained in a single file and can be trivially modified, compiled and executed in any environment that has .NET installed. &lt;/LI&gt;
&lt;LI&gt;Core functionality of the XLinq API such as load, modify, and save XML documents &lt;/LI&gt;
&lt;LI&gt;The current DateTime is insufficient at specifying an exact point in time. DateTimeOffset represents a date time with an offset. It is not meant to be a replacement for DateTime; it should be used in scenarios involving absolute points in time. DateTimeOffset includes most of the functionality of the current DateTime API and allows seamless conversion to DateTime as well.&lt;/LI&gt;
&lt;LI&gt;HashSet is a new generic collection that has been added to the System.Collections.Generic namespace. It is an unordered collection that contains unique elements. In addition to the standard collection operations, HashSet provides standard set operations such as union, intersection, and symmetric difference. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;It's a good thing these CTP's are made available as a &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C09B5A2D-EB6A-44B6-8BBD-3764A2FDA9CE&amp;amp;displaylang=en"&gt;VPC image&lt;/A&gt;. After downloading the &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C09B5A2D-EB6A-44B6-8BBD-3764A2FDA9CE&amp;amp;displaylang=en"&gt;image&lt;/A&gt; (and if you've not done so already, also the &lt;A href="http://download.microsoft.com/download/5/4/9/5499b008-8ae7-46f0-89ae-aeeb18df67ae/VSCTPBase.exe"&gt;base&lt;/A&gt;) you only need to run it in Virtual PC or Virtual Server and you're all set.&lt;/P&gt;&lt;img src ="http://todotnet.com/aggbug/10579.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Sander Gerz</dc:creator><title>Visual Studio support under Vista</title><link>http://todotnet.com/archive/2006/09/27/9779.aspx</link><pubDate>Wed, 27 Sep 2006 15:32:00 GMT</pubDate><guid>http://todotnet.com/archive/2006/09/27/9779.aspx</guid><wfw:comment>http://todotnet.com/comments/9779.aspx</wfw:comment><comments>http://todotnet.com/archive/2006/09/27/9779.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://todotnet.com/comments/commentRss/9779.aspx</wfw:commentRss><trackback:ping>http://todotnet.com/services/trackbacks/9779.aspx</trackback:ping><description>&lt;P&gt;So the &lt;A href="http://blogs.msdn.com/somasegar/archive/2006/09/26/772250.aspx"&gt;word is out&lt;/A&gt;: Visual Studio 2003 wil not be supported with Windows Vista. The community screams uproar! (e.g. &lt;A href="http://weblogs.asp.net/pwilson/archive/2006/09/27/Vista-will-NOT-support-Developers.aspx"&gt;here&lt;/A&gt;, &lt;A href="http://blogs.msdn.com/somasegar/archive/2006/09/26/772250.aspx#772737"&gt;here&lt;/A&gt;&amp;nbsp;and &lt;A href="http://weblogs.asp.net/fbouma/archive/2006/09/27/So_2C00_-VB6-is-more-important-than-VS.NET-2003-I-suppose_3F00_.aspx"&gt;here&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;Soma is specifically talking about Visual Studio 2005 Service Pack 1 as the IDE that will be supported, albeit with some issues. But what about &lt;STRONG&gt;Visual Studio 2003 Service Pack 1&lt;/STRONG&gt;? In fact, if we take a look at the release notes for Visual Studio 2003's SP1 (yes, I do that sometimes), it clearly states:&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;Visual Studio .NET 2003 Service Pack 1 Requirements and Specifications&lt;/STRONG&gt;&lt;BR&gt;Download size: &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;160 MB&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Available languages&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;English, Simplified Chinese, Traditional Chinese, Japanese, Korean, French, Italian, German, Spanish, Russian&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Supported Operating Systems: &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Windows NT 4&lt;BR&gt;Windows 2000&lt;BR&gt;Windows XP&lt;BR&gt;Windows Server 2003&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;Vista&lt;BR&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;BR&gt;Supported Framework&lt;BR&gt;.NET Framework 1.1&lt;BR&gt;.NET Framework 1.1 SP1 (recommended Framework level)&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;See,&amp;nbsp;Vista &lt;EM&gt;is&lt;/EM&gt; supported!&amp;nbsp;So, all we developers need to do is install Service Pack 1&amp;nbsp;for Visual Studio 2003 and we should be fine under Vista... Right?&amp;nbsp;&lt;/P&gt;&lt;img src ="http://todotnet.com/aggbug/9779.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Sander Gerz</dc:creator><title>Visual Studio .NET 2003 SP1 Available</title><link>http://todotnet.com/archive/2006/08/17/8845.aspx</link><pubDate>Thu, 17 Aug 2006 10:14:00 GMT</pubDate><guid>http://todotnet.com/archive/2006/08/17/8845.aspx</guid><wfw:comment>http://todotnet.com/comments/8845.aspx</wfw:comment><comments>http://todotnet.com/archive/2006/08/17/8845.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://todotnet.com/comments/commentRss/8845.aspx</wfw:commentRss><trackback:ping>http://todotnet.com/services/trackbacks/8845.aspx</trackback:ping><description>&lt;P&gt;It took quite a while, but it's there. See: &lt;A href="http://blogs.msdn.com/robcaron/archive/2006/08/16/702177.aspx" target=_blank&gt;http://blogs.msdn.com/robcaron/archive/2006/08/16/702177.aspx&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://todotnet.com/aggbug/8845.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Sander Gerz</dc:creator><title>Get GoogleBot to crash your .NET 2.0 site - update</title><link>http://todotnet.com/archive/2006/07/11/7782.aspx</link><pubDate>Tue, 11 Jul 2006 09:36:00 GMT</pubDate><guid>http://todotnet.com/archive/2006/07/11/7782.aspx</guid><wfw:comment>http://todotnet.com/comments/7782.aspx</wfw:comment><comments>http://todotnet.com/archive/2006/07/11/7782.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://todotnet.com/comments/commentRss/7782.aspx</wfw:commentRss><trackback:ping>http://todotnet.com/services/trackbacks/7782.aspx</trackback:ping><description>&lt;P&gt;Good news... I hope.&lt;/P&gt;
&lt;P&gt;A few days ago, I &lt;A href="http://todotnet.com/archive/2006/07/01/7472.aspx"&gt;posted a story&lt;/A&gt; on a &lt;A href="http://blogs.developpeur.org/nix/archive/2006/07/01/DOTNET_2_GoogleBot_Crash_Bug_Pas_seulement_googlebot.aspx"&gt;bug that Nix found in ASP.NET 2.0&lt;/A&gt;. According to &lt;A href="http://communityserver.org/forums/2/536640/showthread.aspx"&gt;this thread&lt;/A&gt;, the bug was confirmed and they're working on a solution. &lt;/P&gt;&lt;img src ="http://todotnet.com/aggbug/7782.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Sander Gerz</dc:creator><title>Tip/Trick: List Running ASP.NET Worker Processes and Kill/Restart them from the command-line [a better way]</title><link>http://todotnet.com/archive/2006/07/02/7491.aspx</link><pubDate>Sun, 02 Jul 2006 19:37:00 GMT</pubDate><guid>http://todotnet.com/archive/2006/07/02/7491.aspx</guid><wfw:comment>http://todotnet.com/comments/7491.aspx</wfw:comment><comments>http://todotnet.com/archive/2006/07/02/7491.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://todotnet.com/comments/commentRss/7491.aspx</wfw:commentRss><trackback:ping>http://todotnet.com/services/trackbacks/7491.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://weblogs.asp.net/scottgu/archive/2006/07/01/Tip_2F00_Trick_3A00_-Command_2D00_line-Tasklist_2F00_Taskkill-Utilities-.aspx#comments"&gt;Scott Guthrie posts a trick&lt;/A&gt; on a quick way to kill a process on your system, or kill and restart an ASP.NET or IIS worker process.&amp;nbsp; I tried to post a comment on his trick, but the&amp;nbsp;commenting system is not working. So I'll give my opinion here, leaving me with a bit more room to elaborate.&lt;/P&gt;
&lt;P&gt;Scott's suggesting that you use &lt;FONT face="Courier New" color=#000080&gt;taskkill&lt;/FONT&gt; to kill a process running the application pool. That's all nice and neat, but how do you know what process to kill? If you have multiple application pools, you might just kill the wrong one. A much better solution is to use the little known &lt;FONT face="Courier New" color=#000080&gt;iisapp&lt;/FONT&gt; command. In fact, &lt;FONT face="Courier New" color=#000080&gt;iisapp&lt;/FONT&gt; is a vb-script located in &lt;FONT face="Courier New" color=#000080&gt;%winnt%\system32&lt;/FONT&gt;. Run it from the command prompt without parameters, and you get a list of application pools with their associated process ids.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#000080&gt;C:\WINDOWS\system32&amp;gt;iisapp&lt;BR&gt;W3WP.exe PID: 3328&amp;nbsp;&amp;nbsp; AppPoolId: DefaultAppPool&lt;BR&gt;W3WP.exe PID: 232&amp;nbsp;&amp;nbsp; AppPoolId: AppPool ASPNET2.0&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;The command &lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;IIsApp /a DefaultAppPool /r&lt;/FONT&gt; &lt;/FONT&gt;will recycle the specified application pool. Not only is this a lot easier, it's less error prone, thus safer to use. What if you kill the wrong process? I.e. by mistyping or by the fact that after you listed your processes, the application pool has recycled already.&lt;/P&gt;
&lt;P&gt;There are a few other commands that few are aware of. E.g.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#000080&gt;issweb /query&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This will give you a list of configured websites, their status, port number and hostheader. You can also use &lt;FONT face="Courier New" color=#000080&gt;iisweb&lt;/FONT&gt; to create, pause, stop, start and delete websites. &lt;FONT face="Courier New" color=#000080&gt;iisvdir&lt;/FONT&gt; will do something similar for virtual folders.&lt;/P&gt;
&lt;P&gt;With &lt;FONT face="Courier New" color=#000080&gt;iisback&lt;/FONT&gt; you can backup and restore the IIS configuration. In fact, if you do a listing of &lt;FONT face="Courier New"&gt;.vbs-&lt;/FONT&gt;files from within &lt;FONT face="Courier New" color=#000080&gt;%winnt%\system32&lt;/FONT&gt; you may find some other hidden gems.&lt;/P&gt;
&lt;P&gt;Hope this helps... too.&lt;/P&gt;
&lt;P&gt;Sander&lt;/P&gt;&lt;img src ="http://todotnet.com/aggbug/7491.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Sander Gerz</dc:creator><title>Get GoogleBot to crash your .NET 2.0 site</title><link>http://todotnet.com/archive/2006/07/01/7472.aspx</link><pubDate>Sat, 01 Jul 2006 21:31:00 GMT</pubDate><guid>http://todotnet.com/archive/2006/07/01/7472.aspx</guid><wfw:comment>http://todotnet.com/comments/7472.aspx</wfw:comment><comments>http://todotnet.com/archive/2006/07/01/7472.aspx#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://todotnet.com/comments/commentRss/7472.aspx</wfw:commentRss><trackback:ping>http://todotnet.com/services/trackbacks/7472.aspx</trackback:ping><description>&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana&gt;If you&amp;#8217;re developing in ASP.NET 2.0 and you&amp;#8217;re using url rewriting, you should proceed with caution. Especially if you value your ranking in search engines. I&amp;#8217;m posting this as a follow up and with reference to the original find on &lt;/FONT&gt;&lt;A href="http://blogs.developpeur.org/nix/archive/2006/07/01/DOTNET_2_GoogleBot_Crash_Bug_Pas_seulement_googlebot.aspx"&gt;&lt;FONT face=Verdana&gt;this post&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana&gt;. &lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;The issue came about &lt;/FONT&gt;&lt;A href="http://communityserver.org/forums/536640/ShowThread.aspx#536640"&gt;&lt;FONT face=Verdana color=#0000ff&gt;in a thread&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana&gt; on the Community Server 2.0 forums. I was fast to post a solution to the problem, but obviously, it&amp;#8217;s more about working around the issue than actually solving the root cause. 
&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana&gt;Url rewriting is mostly used to make URL&amp;#8217;s more friendly to read. Also, if you have migrated from one site to another and you want accommodate people still linking to old urls, rewriting is a common practice. Nonetheless, if you use this on a public internet website, it won&amp;#8217;t be long until you see the following exceptions listed in your Event Log: 
&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;&amp;nbsp;&amp;nbsp; Exception type: HttpException &lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN&gt;Exception message: Cannot use a leading .. to exit above the top directory. &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN lang=EN-US&gt;...&lt;BR&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stack trace:&amp;nbsp;&amp;nbsp;&amp;nbsp; at System.Web.Util.UrlPath.ReduceVirtualPath(String path)&lt;/SPAN&gt;&lt;/B&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN lang=EN-US&gt;...&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt; 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana&gt;For any site of significance, and &lt;/FONT&gt;&lt;A href="http://www.codes-sources.com/"&gt;&lt;FONT face=Verdana&gt;www.codes-sources.com&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana&gt; is most certainly one of them, this exception was logged more than 2000 times &amp;#8230; every hour. Now, that&amp;#8217;s something to notice, right? And the effect on your ranking in the search engines? Well, within a few days, your site is either kicked out completely from the index or the index contains nothing more than the url of your site without content. Nobody looking for content you may have on your site will be directed to it. Worried? Read on.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN lang=EN-US&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana&gt;My personal instinct would be: it&amp;#8217;s something I did wrong. So one takes a long time trying to figure out what that is. But in fact, it&amp;#8217;s a bug in a .NET component that&amp;#8217;s not easy to trace and reproduce. If you don&amp;#8217;t check the event logs every once in a while, it can surely be missed. Let&amp;#8217;s take a look at what&amp;#8217;s going on: 
&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana&gt;A first note to people trying to reproduce the issue, the bug does not&amp;nbsp;appear using&amp;nbsp;Cassini (the built-in web server in Visual Studio 2005). You need to have a running IIS 6 web server on Windows 2003. Doesn&amp;#8217;t matter if it&amp;#8217;s in a VPC or on an actual server. 
&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana&gt;If you&amp;#8217;re using url rewriting in .NET 2.0, you have the Context.RewritePath method at your disposal. &lt;/FONT&gt;&lt;A href="http://redir.codes-sources.com/fichiers/nix/urlrewrite_dotnet_2_googlebot_crash_bug.zip"&gt;&lt;FONT face=Verdana&gt;Here&amp;#8217;s a sample project for testing&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana&gt;. 
&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT face=Verdana&gt;1.&lt;/FONT&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana&gt;First you create a page, say &lt;B&gt;page.aspx&lt;/B&gt; 
&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT face=Verdana&gt;2.&lt;/FONT&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana&gt;In this page, you can put whatever you want; it doesn&amp;#8217;t really matter. For example: 
&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face="Courier New"&gt;&lt;%=Request("ID")%&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN&gt;&lt;FONT face=Verdana&gt;3.&lt;/FONT&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana&gt;Then you add your rewriting HttpModule, with the following implementation: 
&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&lt;SPAN&gt;Public&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;Class&lt;/SPAN&gt; Rewriter&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN&gt;Implements&lt;/SPAN&gt; System.Web.IHttpModule&lt;O:P&gt;&lt;/O:P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&lt;SPAN&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN&gt;Public&lt;/SPAN&gt; &lt;SPAN&gt;Sub&lt;/SPAN&gt; Dispose() &lt;SPAN&gt;Implements&lt;/SPAN&gt; System.Web.IHttpModule.Dispose&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&lt;SPAN&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN&gt;End&lt;/SPAN&gt; &lt;SPAN&gt;Sub&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&lt;SPAN&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN&gt;Public&lt;/SPAN&gt; &lt;SPAN&gt;Sub&lt;/SPAN&gt; Init(&lt;SPAN&gt;ByVal&lt;/SPAN&gt; context &lt;SPAN&gt;As&lt;/SPAN&gt; System.Web.HttpApplication) &lt;SPAN&gt;Implements&lt;/SPAN&gt; System.Web.IHttpModule.Init&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN&gt;AddHandler&lt;/SPAN&gt; context.BeginRequest, &lt;SPAN&gt;AddressOf&lt;/SPAN&gt; &lt;SPAN&gt;Me&lt;/SPAN&gt;.HandleBeginRequest&lt;O:P&gt;&lt;/O:P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;Sub&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&lt;SPAN&gt;&lt;O:P&gt;&amp;nbsp;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN&gt;Private&lt;/SPAN&gt; &lt;SPAN&gt;Sub&lt;/SPAN&gt; HandleBeginRequest(&lt;SPAN&gt;ByVal&lt;/SPAN&gt; [source] &lt;SPAN&gt;As&lt;/SPAN&gt; [Object], &lt;SPAN&gt;ByVal&lt;/SPAN&gt; e &lt;SPAN&gt;As&lt;/SPAN&gt; EventArgs)&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN&gt;Dim&lt;/SPAN&gt; app &lt;SPAN&gt;As&lt;/SPAN&gt; System.Web.HttpApplication = &lt;SPAN&gt;CType&lt;/SPAN&gt;([source], System.Web.HttpApplication)&lt;O:P&gt;&lt;/O:P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; app.Context.RewritePath(&amp;#8220;~/page.aspx?ID=1&amp;#8221;, &lt;/SPAN&gt;&lt;B&gt;&lt;SPAN&gt;False&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN&gt;) &lt;SPAN&gt;'&amp;nbsp;sidenote,&amp;nbsp;same effect when using&amp;nbsp;&amp;#8220;/page.aspx?ID=1&amp;#8221; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;O:P&gt;&lt;/O:P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN&gt;End&lt;/SPAN&gt; &lt;SPAN&gt;Sub&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#000080&gt;&lt;SPAN&gt;End&lt;/SPAN&gt;&lt;SPAN&gt; &lt;SPAN&gt;Class&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face=Verdana&gt;
&lt;P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;As you can see, it&amp;#8217;s a simple example rewriting all urls to page.aspx?ID=1. It&amp;#8217;s does not serve a specific function, other than show the problem at hand. Now, add the HttpModule in the Web.Config file. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;With Fiddler (available at &lt;A href="http://www.fiddlertool.com/"&gt;&lt;FONT color=#0000ff&gt;www.fiddlertool.com&lt;/FONT&gt;&lt;/A&gt;), you can create web requests and analyze the result in very good detail. It&amp;#8217;s especially useful in this case, as you can create a request specific for certain user-agents. So &lt;A href="www.fiddlertool.com"&gt;download the tool&lt;/A&gt; and setup your ASP.NET 2.0 site on an IIS 6.0 environment. One thing to note as well, is that this site needs to be running under its own hostheader, not as a virtual directory. &lt;BR&gt;Once installed, you take your web browser and go to 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;A href="http://localsitename/default.aspx"&gt;&lt;FONT color=#0000ff&gt;http://localsitename/default.aspx&lt;/FONT&gt;&lt;/A&gt; 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;The page default.aspx will be rewritten as page.aspx?ID=1 and everything works just fine. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;Now, open up Fiddler and create the following request: 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;Accept: */*&lt;/SPAN&gt;&lt;/I&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;Accept-Encoding: gzip, x-gzip&lt;/SPAN&gt;&lt;/I&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;User-Agent: &lt;B&gt;Mozilla/4.0&lt;/B&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;Set the url to &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;A href="http://localsitename/default.aspx"&gt;&lt;FONT color=#0000ff&gt;http://localsitename/default.aspx&lt;/FONT&gt;&lt;/A&gt; 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;and hit Execute. You should get status code 200, meaning OK. Now set the url to 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;A href="http://localsitename/justafolder/default.aspx"&gt;&lt;FONT color=#0000ff&gt;http://localsitename/justafolder/default.aspx&lt;/FONT&gt;&lt;/A&gt; 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;and after you hit OK, again, you will get a 200 code. No problems so far. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;Now, change the request to 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;User-Agent: Mozilla/&lt;B&gt;&lt;SPAN&gt;5.0&lt;/SPAN&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;instead of &lt;/SPAN&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;User-Agent: Mozilla/&lt;B&gt;4.0 
&lt;P&gt;&lt;/P&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;/I&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;Hit Execute and bang&amp;#8230; error 500, indicating an application error. &lt;BR&gt;Here&amp;#8217;s a list of user-agent entries that will result in an error: 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;EM&gt;Mozilla/1.0&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;EM&gt;Mozilla/2.0&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;EM&gt;Mozilla/5.0&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;EM&gt;Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;EM&gt;&lt;SPAN lang=EN-US&gt;Mozilla/5.0 (compatible; Yahoo! Slurp; &lt;/SPAN&gt;&lt;SPAN&gt;&lt;A href="http://help.yahoo.com/help/us/ysearch/slurp"&gt;&lt;SPAN lang=EN-US&gt;http://help.yahoo.com/help/us/ysearch/slurp&lt;/SPAN&gt;&lt;/A&gt;)&lt;/SPAN&gt;&lt;/EM&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;EM&gt;Yahoo-Blogs/v3.9 (compatible; Mozilla 4.0; MSIE 5.5; &lt;/EM&gt;&lt;A href="http://help.yahoo.com/help/us/ysearch/crawling/crawling-02.html"&gt;&lt;SPAN lang=EN-US&gt;&lt;EM&gt;http://help.yahoo.com/help/us/ysearch/crawling/crawling-02.html&lt;/EM&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;EM&gt; )&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;EM&gt;Mozilla/2.0 (compatible; Ask Jeeves/Teoma; +http://sp.ask.com/docs/about/tech_crawling.html)&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;EM&gt;Mozilla/5.0 (compatible; BecomeBot/3.0; MSIE 6.0 compatible; +http://www.become.com/site_owners.html)&lt;/EM&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;EM&gt;Mozilla/5.0 (compatible; Konqueror/.... &lt;U&gt;(Tous les users agent de Konqueror que j'ai test&amp;#233;s plantent)&lt;/U&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;U&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/U&gt;&lt;SPAN lang=EN-US&gt;Etc...&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;Some funny details:&lt;BR&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;EM&gt;&lt;SPAN lang=EN-US&gt;Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1 &lt;/SPAN&gt;&lt;/EM&gt;&lt;STRONG&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;&amp;lt;= no error&lt;/SPAN&gt;&lt;/I&gt;&lt;/STRONG&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;EM&gt;&lt;SPAN&gt;Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.1) &lt;/SPAN&gt;&lt;/EM&gt;&lt;STRONG&gt;&lt;SPAN&gt;&amp;lt;= error 500!&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt; 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/B&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;Ok, so let&amp;#8217;s try to explain what happens. If you call RewritePath with the rebaseClientPath parameter set to &amp;#8220;True&amp;#8221;, the virtual path is reset. So why set it to False? Well, the setting of rebaseClientPath affects the action-tag of a form. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;If I have an url &lt;A href="http://mysite/myfolder/mypage.aspx"&gt;&lt;FONT color=#0000ff&gt;http://mysite/myfolder/mypage.aspx&lt;/FONT&gt;&lt;/A&gt; which is rewritten to &lt;A href="http://mysite/page.aspx?id=mypage"&gt;&lt;FONT color=#0000ff&gt;http://mysite/page.aspx?id=mypage&lt;/FONT&gt;&lt;/A&gt;, the form tag will we set as follows. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;With rebaseClientPath set to true: &lt;/SPAN&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: NL; mso-bidi-font-size: 11.0pt; mso-bidi-language: AR-SA"&gt;
&lt;FORM id=form1 name=form1 action="&lt;B&gt;page.aspx?ID=mypage&lt;/B&gt;" method=post&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: NL; mso-bidi-language: AR-SA"&gt;&lt;FORM id=form1 method="post" action="&lt;STRONG&gt;page.aspx?ID=mapage&lt;/STRONG&gt;" name="form1"&gt;&lt;EM&gt;&amp;lt;form name="form1" method="post" action="&lt;STRONG&gt;page.aspx?ID=mapage&lt;/STRONG&gt;" id="form1"&amp;gt;&lt;/EM&gt;&lt;BR&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;FORM id=form1 method="post" action="&lt;B&gt;page.aspx?ID=mypage&lt;/B&gt;" name="form1"&gt;&lt;SPAN lang=EN-US&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;But with rebaseClientPath set to false: &lt;/SPAN&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;EM&gt;&lt;FONT size=2&gt;&amp;lt;form name="form1" method="post" action="&lt;STRONG&gt;../page.aspx?ID=mapage&lt;/STRONG&gt;" id="form1"&amp;gt;&lt;/FONT&gt;&lt;/EM&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;EM&gt;&lt;FONT size=2&gt;&lt;FORM id=form1 method="post" action="&lt;STRONG&gt;../page.aspx?ID=mapage&lt;/STRONG&gt;" name="form1"&gt;&lt;/FONT&gt;&lt;/EM&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;I&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;&lt;FORM id=&amp;#8221;form1&amp;#8221; method="post" action="&lt;B&gt;../page.aspx?ID=mypage&lt;/B&gt;" name="form1"&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN lang=EN-US&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;In case of a postback, the action in the latter situation (with rebaseClientPath set to false) is correct. Not in the first instance, because there is no page.aspx in the subfolder /myfolder. &lt;BR&gt;&lt;BR&gt;
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;Now, a workaround would be to manually set the UrlPostback to the correct location, but the ramafications are significant, and may affect the execution of the javascript manipulation the UrlPostback on a number of browsers. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;What&amp;#8217;s really troublesome is that it affects only the production version of a website. It&amp;#8217;s not visible during development (usually you don&amp;#8217;t let searchengines index your development and test environment, right?). Also, it happens only under IIS 6.0, using ASP.NET 2.0. And the only variable in this case is the user agent with which the site is accessed. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;Now we know what the issue is, how do we resolve it? Well, doing it yourself is not easy and without risk, but here goes. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;It has to do with the capabilities of the user-agent. When the site is hit by a user-agent having Mozilla/5.0 in the string, ASP.NET will be using &lt;FONT face="Courier New"&gt;System.Web.UI.Html&lt;/FONT&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face="Courier New"&gt;32&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face="Courier New"&gt;TextWriter&lt;/FONT&gt;. I&amp;#8217;ve traced the bug with &lt;A href="http://www.avicode.com/"&gt;&lt;FONT color=#0000ff&gt;Intercept Studio&lt;/FONT&gt;&lt;/A&gt; and can confirm this. If you use another user-agent, for example Mozilla/4.0, &lt;FONT face="Courier New"&gt;System.Web.UI.HtmlTextWriter&lt;/FONT&gt; will be used. This is called &lt;A href="http://aspnet.4guysfromrolla.com/demos/printPage.aspx?path=/articles/050504-1.aspx"&gt;adaptive rendering&lt;/A&gt;, which can lead to &lt;A href="http://scottonwriting.net/sowblog/posts/1125.aspx"&gt;weird behavior&lt;/A&gt;. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;So the problem lies in &lt;FONT face="Courier New"&gt;Html&lt;/FONT&gt;&lt;/SPAN&gt;&lt;B&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face="Courier New"&gt;32&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT face="Courier New"&gt;TextWriter&lt;/FONT&gt;, but it&amp;#8217;s unclear where this goes wrong exactly. The exception is thrown in &lt;FONT face="Courier New"&gt;System.Web.Util.UrlPath.ReduceVirtualPath&lt;/FONT&gt;(), but by the time the stack reaches this method, we&amp;#8217;re already six method calls away from the last usage of Html32TextWriter (being used in System.Web.UI.HtmlControls.HtmlForm.RenderAttributes). If you have time to walk the stack with &lt;A href="http://www.aisto.com/roeder/dotnet/"&gt;Reflector&lt;/A&gt;, go ahead. There are about 23 method calls in all. 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;You may want to wait for a fix to come from Microsoft, but if you can&amp;#8217;t wait that long, there&amp;#8217;s a hack solution to try for yourself. Say for instance you want to fix the issue with the Yahoo searchbot, Yahoo! Slurp (you would need to apply this to all user-agents in a similar fashion.) 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;Since Visual Studio 2005 we have the capability to create .browser files. These .browser files contain a definition of the capabilities of browsers. In your web project, add a folder called &amp;#8220;App_Browser&amp;#8221; and create a new file (i.e.: yahooslurp.browser). In this file, you put 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;&lt;SPAN lang=EN-US&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;!--&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;!--&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: NL; mso-bidi-language: AR-SA"&gt;
&lt;P&gt;&amp;lt;!--&lt;/P&gt;&lt;FONT color=#008000 size=2&gt;
&lt;P&gt;Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;--&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;browsers&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;browser&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;STRONG&gt;Slurp&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;parentID&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;STRONG&gt;Mozilla&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;identification&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;userAgent&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;match&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;STRONG&gt;Slurp&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;identification&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capabilities&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;browser&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;STRONG&gt;Yahoo!Slurp&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;Version&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;4.0&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;MajorVersion&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;4&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;MinorVersionString&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;""&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;MinorVersion&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;.0&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;activexcontrols&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;backgroundsounds&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;cookies&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;css1&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;css2&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;ecmascriptversion&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;1.2&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;frames&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;javaapplets&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;javascript&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;jscriptversion&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;5.0&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;supportsCallback&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;supportsFileUpload&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;supportsMultilineTextBoxDisplay&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;supportsMaintainScrollPositionOnPostback&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;supportsVCard&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;supportsXmlHttp&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;tables&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;vbscript&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;w3cdomversion&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;1.0&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;xml&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capability&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;tagwriter&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;value&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;STRONG&gt;System.Web.UI.HtmlTextWriter&lt;/STRONG&gt;&lt;/FONT&gt;&lt;FONT color=#000000 size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; /&amp;gt;&lt;BR&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;capabilities&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;browser&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&amp;lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;browsers&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 10pt; LINE-HEIGHT: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: NL; mso-bidi-language: AR-SA"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-language: NL; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Verdana','sans-serif'; mso-ansi-language: EN-US; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;SPAN style="COLOR: blue"&gt;&lt;SPAN style="COLOR: blue"&gt;
&lt;P&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT color=#000000&gt;Now, restart your website and redo the tests with Fiddler, setting the user-agent to &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;Mozilla/5.0 (compatible; Yahoo! Slurp; &lt;/SPAN&gt;&lt;/I&gt;&lt;I&gt;&lt;SPAN&gt;&lt;A href="http://help.yahoo.com/help/us/ysearch/slurp"&gt;&lt;SPAN lang=EN-US&gt;http://help.yahoo.com/help/us/ysearch/slurp&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;/I&gt;&lt;/FONT&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT color=#000000&gt;) &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/I&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT color=#000000&gt;Voil&amp;#224;, no more 500 error message. Repeat the steps for the different user-agents out there. &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;BR&gt;&lt;BR&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT color=#000000&gt;There may be other possibilities to fix this problem, but this one seems to be the most straightforward to implement and doesn&amp;#8217;t require you to recompile the code. With solutions like CommunityServer, you simply don&amp;#8217;t have this option anyway. It will suffice to add the App_Browser folder and the various .browser files to the root folder of the website and it will work. &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT color=#000000&gt;At the end of the &lt;/FONT&gt;&lt;A href="http://blogs.developpeur.org/nix/archive/2006/07/01/DOTNET_2_GoogleBot_Crash_Bug_Pas_seulement_googlebot.aspx"&gt;&lt;FONT color=#000000&gt;original post by Nix&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#000000&gt;, there are some closing remarks. For example, if you create the site as a virtual directory under a website root, the problem does not appear. Changing the user-agent in a header, as suggested by &lt;/FONT&gt;&lt;A href="http://blogs.developpeur.org/nix/archive/2006/06/29/Google_ne_vous_aime_pas_Vous_utilisez_CommunityServer_2_0_Alors_c_est_normal_.aspx"&gt;&lt;FONT color=#000000&gt;Poppyto&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#000000&gt;, might work, but the consequences are uncertain. Also, you would need to recompile. &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT color=#000000&gt;Now, you might think, oh well, just add the appropriate .browser files and we're done. But that&amp;#8217;s a bit short sighted. You never know when Google or any other search-engine decides to change the user-agent string. Your first notification would come from the exception messages in your event log. I manage about 7 big Windows 2003 servers in our datacenter. Perhaps not much, but I know what issues can come along every once in a while). Both as a developer and a system administrator, I would rather prevent issues, than handle them afterwards. &lt;/FONT&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT color=#000000&gt;If you want to debate the issue, please go to the &lt;/FONT&gt;&lt;A href="http://communityserver.org/forums/536640/ShowThread.aspx#536640"&gt;&lt;FONT color=#000000&gt;thread&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#000000&gt; at the &lt;/FONT&gt;&lt;A href="http://communityserver.org/forums/536640/ShowThread.aspx#536640"&gt;&lt;FONT color=#000000&gt;Community Server forums&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#000000&gt;.&lt;/FONT&gt; 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=EN-US&gt;&lt;FONT color=#000000&gt;PS: Why did I write this post? Well, the &lt;A href="http://blogs.developpeur.org/nix/archive/2006/07/01/DOTNET_2_GoogleBot_Crash_Bug_Pas_seulement_googlebot.aspx"&gt;entire explanation &lt;/A&gt;is written in French, and not everyone can read this. Also, Nix and I know each other and he&amp;#8217;s been helpful on a number of occasions, so if there&amp;#8217;s anything I can do in return, like explaining the issue in English, I&amp;#8217;m more than happy to help. Finally, this problem needs a proper solution, and the sites and servers I host can be just as much affected. I was fortunate not to have too much url rewriting in my sites, but that doesn&amp;#8217;t affect the scope of the issue.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;I&gt;&lt;SPAN lang=EN-US&gt; 
&lt;P&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/I&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;PS: sorry if this post is popping up in your rss-reader again, but the text-editor in .Text keeps mangling my writing.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FORM&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;img src ="http://todotnet.com/aggbug/7472.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>