<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" 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/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Vlad Hrybok's Tech Notes - ASP.NET</title>
    <link>http://vladsnotes.hrybok.com/</link>
    <description>The future of Internet is &lt;a href='http://httpvpn.com'&gt;HttpVPN&lt;/a&gt;...</description>
    <language>en-us</language>
    <copyright>Vlad Hrybok</copyright>
    <lastBuildDate>Fri, 16 Jul 2010 15:33:00 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>vgribok@dodgeit.com</managingEditor>
    <webMaster>vgribok@dodgeit.com</webMaster>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=fdfab71a-a92a-4a4f-823d-23bc1025aeeb</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,fdfab71a-a92a-4a4f-823d-23bc1025aeeb.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,fdfab71a-a92a-4a4f-823d-23bc1025aeeb.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=fdfab71a-a92a-4a4f-823d-23bc1025aeeb</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I thought I knew ASP.NET. I started ASP.NET programming in 2001, and I started it
with customer/server control development and was cranking them out with no problem.
So theoretically I should not have struggled for six hours with a CompositeControl
not being able to save nested controls' state between postbacks. 
</p>
        <p>
All it came down to is calling EnsureChildControls() from the OnInit().
</p>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
            <p>
[
</p>
          </font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">ToolboxData</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">(</font>
        </font>
        <font color="#a31515" size="2" face="Consolas">
          <font color="#a31515" size="2" face="Consolas">
            <font color="#a31515" size="2" face="Consolas">"&lt;{0}:BogusCustomControl
runat=server&gt;&lt;/{0}:BogusCustomControl&gt;"</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">)]<br /></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">public</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">class</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">BogusCustomControl</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> : </font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">CompositeControl<br /></font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">{<br />
    </font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">Button</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> btn
= </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">new</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">Button</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">();
<p></p></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">    </font>protected</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">override</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">void</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> OnInit(</font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">EventArgs</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> e)<br />
    {<br />
        </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">base</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.OnInit(e);
<p></p></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">        </font>
              <span style="BACKGROUND-COLOR: yellow">
                <strong>this</strong>
              </span>
            </font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
            <strong>.EnsureChildControls();</strong>
            <font color="#008000" size="2" face="Consolas">
              <font color="#008000" size="2" face="Consolas">
                <font color="#008000" size="2" face="Consolas">//
&lt;&lt; This is it! This makes ViewState work for a CompositeControl</font>
              </font>
            </font>
            <br />
    }
<p></p></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">    </font>protected</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">override</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">void</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> OnLoad(</font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">EventArgs</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> e)<br />
    {<br /></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">        </font>if</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> (!</font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">this</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.Page.IsPostBack)<br />
        {<br /><font color="#008000" size="2" face="Consolas"><font color="#008000" size="2" face="Consolas"><font color="#008000" size="2" face="Consolas">           
// Set value once to test whether it's preserved between postbacks</font></font></font><br />
            </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">this</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.btn.Text
= </font>
        </font>
        <font color="#2b91af" size="2" face="Consolas">
          <font color="#2b91af" size="2" face="Consolas">
            <font color="#2b91af" size="2" face="Consolas">DateTime</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.Now.ToLongTimeString();<br />
        }
<p></p></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">        </font>base</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.OnLoad(e);<br />
    }
<p></p></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">    </font>protected</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">override</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">
          </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">void</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas"> CreateChildControls()<br />
    {<br />
        </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">this</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.btn.ID
= </font>
        </font>
        <font color="#a31515" size="2" face="Consolas">
          <font color="#a31515" size="2" face="Consolas">
            <font color="#a31515" size="2" face="Consolas">"whatever"</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">;<br />
        </font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">this</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.Controls.Add(</font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">this</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.btn);
<p></p></font>
        </font>
        <font color="#0000ff" size="2" face="Consolas">
          <font color="#0000ff" size="2" face="Consolas">
            <font color="#0000ff" size="2" face="Consolas">
              <font color="#003300">        </font>base</font>
          </font>
        </font>
        <font size="2" face="Consolas">
          <font size="2" face="Consolas">.CreateChildControls();<br />
    }<br />
}
</font>
        </font>
        <p>
 
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=fdfab71a-a92a-4a4f-823d-23bc1025aeeb" />
      </body>
      <title>Preserving ViewState in ASP.NET CompositeControl</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,fdfab71a-a92a-4a4f-823d-23bc1025aeeb.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,fdfab71a-a92a-4a4f-823d-23bc1025aeeb.aspx</link>
      <pubDate>Fri, 16 Jul 2010 15:33:00 GMT</pubDate>
      <description>&lt;p&gt;
I thought I knew ASP.NET. I started ASP.NET programming in 2001, and I started it
with customer/server control development and was cranking them out with no problem.
So&amp;nbsp;theoretically I should not have struggled for six hours with a CompositeControl
not being able to save nested controls' state&amp;nbsp;between postbacks. 
&lt;/p&gt;
&lt;p&gt;
All it came down to is calling EnsureChildControls() from the OnInit().
&lt;/p&gt;
&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; 
&lt;p&gt;
[
&lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;ToolboxData&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;(&lt;/font&gt;&lt;/font&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;"&amp;lt;{0}:BogusCustomControl
runat=server&amp;gt;&amp;lt;/{0}:BogusCustomControl&amp;gt;"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;)]&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;class&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;BogusCustomControl&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; : &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;CompositeControl&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;Button&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; btn
= &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;new&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;Button&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;();&gt;
&lt;p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;protected&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;override&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; OnInit(&lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;EventArgs&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; e)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;base&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.OnInit(e);&gt;
&lt;p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;span style="BACKGROUND-COLOR: yellow"&gt;&lt;strong&gt;this&lt;/strong&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;&lt;strong&gt;.EnsureChildControls()&gt;;&lt;/strong&gt; &lt;font color=#008000 size=2 face=Consolas&gt;&lt;font color=#008000 size=2 face=Consolas&gt;&lt;font color=#008000 size=2 face=Consolas&gt;//
&amp;lt;&amp;lt; This is it! This makes ViewState work for a CompositeControl&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&gt;
&lt;p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;protected&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;override&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; OnLoad(&lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;EventArgs&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; e)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;if&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; (!&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.Page.IsPostBack)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&lt;font color=#008000 size=2 face=Consolas&gt;&lt;font color=#008000 size=2 face=Consolas&gt;&lt;font color=#008000 size=2 face=Consolas&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
// Set value once to test whether it's preserved between postbacks&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.btn.Text
= &lt;/font&gt;&lt;/font&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;&lt;font color=#2b91af size=2 face=Consolas&gt;DateTime&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.Now.ToLongTimeString();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&gt;
&lt;p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;base&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.OnLoad(e);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&gt;
&lt;p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;protected&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;override&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt; CreateChildControls()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.btn.ID
= &lt;/font&gt;&lt;/font&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;&lt;font color=#a31515 size=2 face=Consolas&gt;"whatever"&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.Controls.Add(&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;this&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.btn);&gt;
&lt;p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#0000ff size=2 face=Consolas&gt;&lt;font color=#003300&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;base&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size=2 face=Consolas&gt;&lt;font size=2 face=Consolas&gt;.CreateChildControls();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;
}&gt;
&lt;/font&gt;&lt;/font&gt; 
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=fdfab71a-a92a-4a4f-823d-23bc1025aeeb" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,fdfab71a-a92a-4a4f-823d-23bc1025aeeb.aspx</comments>
      <category>.NET Programming;ASP.NET;Sofware Development</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=16dae195-a52d-4977-9e57-5d8242c1569d</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,16dae195-a52d-4977-9e57-5d8242c1569d.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,16dae195-a52d-4977-9e57-5d8242c1569d.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=16dae195-a52d-4977-9e57-5d8242c1569d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
HttpVPN™, a redistributable component for hosting web applications targeting home
users and small businesses, is <a href="http://ultidev.com/products/httpvpn/">released</a> as
Beta. It makes web applications accessible on the web at <a href="https://MyOwnSecureWeb.com">MyOwnSecureWeb.com</a> right
after the installation and does not require users to fiddle with routers, set up DMZ,
etc. Just a consumer-friendly, secure self-hosting of web apps.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=16dae195-a52d-4977-9e57-5d8242c1569d" />
      </body>
      <title>HttpVPN is Released - First Public Beta is Launched</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,16dae195-a52d-4977-9e57-5d8242c1569d.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,16dae195-a52d-4977-9e57-5d8242c1569d.aspx</link>
      <pubDate>Fri, 31 Jul 2009 04:35:58 GMT</pubDate>
      <description>&lt;p&gt;
HttpVPN™, a redistributable component for hosting web applications targeting home
users and small businesses, is &lt;a href="http://ultidev.com/products/httpvpn/"&gt;released&lt;/a&gt;&amp;nbsp;as
Beta. It makes web applications accessible on the web at &lt;a href="https://MyOwnSecureWeb.com"&gt;MyOwnSecureWeb.com&lt;/a&gt; right
after the installation and does not require users to fiddle with routers, set up DMZ,
etc. Just a consumer-friendly, secure self-hosting of web apps.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=16dae195-a52d-4977-9e57-5d8242c1569d" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,16dae195-a52d-4977-9e57-5d8242c1569d.aspx</comments>
      <category>ASP.NET;Digital Home;HttpVPN;Sofware Development</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=868a8d58-6ea6-4285-9fe7-2f30c9e8bca6</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,868a8d58-6ea6-4285-9fe7-2f30c9e8bca6.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,868a8d58-6ea6-4285-9fe7-2f30c9e8bca6.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=868a8d58-6ea6-4285-9fe7-2f30c9e8bca6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In general, I love Microsoft development tools. The reason I never felt compelled
to venture far into either Java or LAMP world is because combination of the Visual
Studio, .NET Framework runtime, SQL Server and other MS tools has always been
an extremely strong development platform, both for the value delivery for
end users, and for something as prosaic as having fun programming 8 hours day in and day
out. Therefore, it's borderline pathological that Microsoft HTML editing tools
have not evolved beyond "D-" grade since their first tool I tried over a decade ago,
Front Page 98. Consider this, I am taking a short break (to vent my dissatisfaction) from
writing content for a web site because when I edit an HTML file using Visual Studio
2008 SP1, it mangles the HTML by cutting up closing tags, turning "&lt;/a&gt;", "&lt;/h3&gt;", "&lt;/span&gt;" and
others into "&gt;". I thought, alright, Expression Web 2 is going to save
the day. I open the page in the Expression Web, and what I found is that it doesn't
handle keyboard key strokes well, ranging from failing to respond to arrow keys,
to Ctrl+V shortcut for Paste simply not working, rendering Expression Web
unusable. I use Microsoft keyboard and their drivers. I am a developer, not a designer,
but if getting such basic functions as arrow keys in their editor is impossible for
MS, what chances do they have with professional designers? And don't get me even started
with Expression suite not supporting MS own source controls for two versions. Microsoft's
inability to get HTML design tools right for such a long time creates a fear that
MS is losing it.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=868a8d58-6ea6-4285-9fe7-2f30c9e8bca6" />
      </body>
      <title>Microsoft Visual Studio 2008 and Expression Web 2 are Still Horrible at HTML Editing</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,868a8d58-6ea6-4285-9fe7-2f30c9e8bca6.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,868a8d58-6ea6-4285-9fe7-2f30c9e8bca6.aspx</link>
      <pubDate>Sun, 28 Jun 2009 21:04:41 GMT</pubDate>
      <description>&lt;p&gt;
In general, I love Microsoft development tools. The&amp;nbsp;reason I never felt compelled
to&amp;nbsp;venture far into either Java or LAMP world is because combination of the Visual
Studio, .NET Framework&amp;nbsp;runtime, SQL Server&amp;nbsp;and other MS tools&amp;nbsp;has always&amp;nbsp;been
an extremely&amp;nbsp;strong development platform, both for the&amp;nbsp;value delivery for
end users, and for something as prosaic as having fun programming 8 hours day in and&amp;nbsp;day
out. Therefore,&amp;nbsp;it's borderline pathological that Microsoft HTML editing tools
have not evolved beyond "D-" grade since their first tool I tried over a decade ago,
Front Page 98. Consider this, I am taking a short break (to vent my dissatisfaction)&amp;nbsp;from
writing content for a web site because when I edit an HTML file using Visual Studio
2008 SP1, it mangles the HTML by cutting up closing tags, turning "&amp;lt;/a&amp;gt;", "&amp;lt;/h3&amp;gt;",&amp;nbsp;"&amp;lt;/span&amp;gt;"&amp;nbsp;and
others&amp;nbsp;into "&amp;gt;". I thought, alright, Expression&amp;nbsp;Web 2 is going to save
the day. I open the page in the Expression Web, and what I found is that it doesn't
handle keyboard key strokes well, ranging&amp;nbsp;from failing to respond to arrow keys,
to&amp;nbsp;Ctrl+V shortcut for Paste simply&amp;nbsp;not working, rendering Expression Web
unusable. I use Microsoft keyboard and their drivers. I am a developer, not a designer,
but if getting such basic functions as arrow keys in their editor is impossible for
MS, what chances do they have with professional designers? And don't get me even started
with Expression suite not supporting MS own source controls for two versions.&amp;nbsp;Microsoft's
inability to get HTML design tools right for such a long time creates a fear that
MS is losing it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=868a8d58-6ea6-4285-9fe7-2f30c9e8bca6" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,868a8d58-6ea6-4285-9fe7-2f30c9e8bca6.aspx</comments>
      <category>ASP.NET;Rants;Sofware Development;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=e8b32d50-e9a9-4925-991c-288a0a95cd23</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,e8b32d50-e9a9-4925-991c-288a0a95cd23.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,e8b32d50-e9a9-4925-991c-288a0a95cd23.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=e8b32d50-e9a9-4925-991c-288a0a95cd23</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It all started with a need to use TimeZoneInfo class of .NET Framework 3.5. My
ASP.NET application, however, was of ASP.NET 2.0, even though I develop it in Visual
Studio 2008. Since moving from ASP.NET 2.0 to 3.5 should be pretty easy, I promptly
switched target .NET Framework to 3.5 in the project settings, recompiled and
ran it without a problem - at first. Suddenly, one page failed with "control with
id 'whatever' requires a ScriptManager on the page", while ScriptManager was already
there - set at the master page level. Googling provided solutions that didn't
work.
</p>
        <p>
What it turned out to be is that my old AjaxControlToolkit version was apparently
incompatible with .NET Framework 3.5. Once I got <a href="http://www.codeplex.com/AjaxControlToolkit">Ajax
Control Toolkit</a> made specifically for ASP.NET 3.5, my pages started working properly.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=e8b32d50-e9a9-4925-991c-288a0a95cd23" />
      </body>
      <title>Migrating ASP.NET App with AjaxControlToolkit from .NET Framework 2.0 to 3.5</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,e8b32d50-e9a9-4925-991c-288a0a95cd23.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,e8b32d50-e9a9-4925-991c-288a0a95cd23.aspx</link>
      <pubDate>Wed, 11 Mar 2009 22:09:40 GMT</pubDate>
      <description>&lt;p&gt;
It all&amp;nbsp;started with a need to use TimeZoneInfo class of .NET Framework 3.5. My
ASP.NET application, however, was of ASP.NET 2.0, even though I develop it in Visual
Studio 2008. Since moving from ASP.NET 2.0 to 3.5 should be pretty easy, I promptly
switched&amp;nbsp;target .NET Framework to 3.5 in the project settings, recompiled and
ran it without a problem - at first. Suddenly, one page failed with "control with
id 'whatever' requires a ScriptManager on the page", while ScriptManager was already
there&amp;nbsp;- set at the master page level. Googling provided solutions that didn't
work.
&lt;/p&gt;
&lt;p&gt;
What it turned out to be is that my old AjaxControlToolkit version was apparently
incompatible with .NET Framework 3.5. Once I got &lt;a href="http://www.codeplex.com/AjaxControlToolkit"&gt;Ajax
Control Toolkit&lt;/a&gt; made specifically for ASP.NET 3.5, my pages started working properly.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=e8b32d50-e9a9-4925-991c-288a0a95cd23" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,e8b32d50-e9a9-4925-991c-288a0a95cd23.aspx</comments>
      <category>.NET Programming;ASP.NET;Sofware Development</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=16e5572c-dce4-4b09-9af2-35b6c207a4f9</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,16e5572c-dce4-4b09-9af2-35b6c207a4f9.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,16e5572c-dce4-4b09-9af2-35b6c207a4f9.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=16e5572c-dce4-4b09-9af2-35b6c207a4f9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I had this seemingly simple task yesterday: populate TreeView control (ASP.NET) with
data from SQL Server 2005. The query returning data from SQL Server was spanning
three joined tables with one-to-many relations, returning the denormalized set of
records that has some redundancy due to information from parent tables replicated
in each record (like having Company and Department information in each Employee record).
Populating hierarchical TreeView from flat recordset is pretty
inconvenient, so I decided to give a shot to the XML output feature of SQL
Server 2005.
</p>
        <p>
Converting flat denormalized result set output into hierarchical XML was as easy as
adding "FOR XML AUTO" to the end of my query. I ran the query and the output was exactly
what I wanted - no redundancy at all, with child records neatly nested inside the
parent table XML nodes (for proper record nesting be sure to use correct order of
the selected columns: parent table columns should precede child table columns in the
T-SQL SELECT statement). Now I needed to bring this result back from SQL to the business
tier of my C# application. I extensively use DataSets with the the convenience of
built-in data-access methods created using DataSet Editor's query wizards. I right-clicked
an appropriate table adapter and went through the "Add Query..." wizard, mapping my
new stored procedure returning XML to the new data access method. At the end of the
wizard "Tabular Data" option for the query result type was understandably grayed,
because XML is hierarchical, not tabular. But generated method turned out to return
Object type, and you would never know it unless you looked at the generated source
code - properties of the generated methods do now show the return type of the method.
I test-ran the method and it turned out to return what you would expect - XML
text with all the data. 
</p>
        <p>
One could stop digging right here and simply use XmlDocument and XPath to parse out
and the walk the XML, populating tree nodes in the process, but I wanted to turn
XML data into a strongly-typed hierarchical structure instead of walking XML nodes. In
.NET all you need to turn XML into a strongly-typed structure is XML schema. A nice
little utility called xsd.exe converts XSD schemas into C# or VB.NET classes, which
are XML-serializable. SQL Server 2005 is sweet enough to generate schema, along with
bringing the XML data. I temporarily modified my query to have "FOR XML AUTO, XMLSCHEMA"
appendix, ran it in SQL Server and got the XML preceded by the schema. I copied schema
over to an XSD file and undid the change to the query, reverting the appendix back
to "FOR XML AUTO".
</p>
        <p>
Now, having created XSD schema defining XML structure returned by my query, all I
needed to do is to feed the XSD file to XSD.exe utility to produce C# file with classes
corresponding to m XML nodes, right? Almost. This was the part where things stopped
going smoothly. First, xsd.exe complained, as it always does, that it could not find
sqltypes.xsd schema, which is imported by the schema produced by SQL server. If you
ever used either xsd.exe or wsdl.exe against schemas that import other files, you
probably know that all the imported files need to be <a href="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd">downloaded</a> and
saved locally, and in the case of xsd.exe, all imported schemas should be explicitly
listed in the command line. Here's the example of xsd.exe command line (run Visual
Studio Command Prompt to load command prompt window with all environment variables
set):<br />
   <font face="Courier New">xsd.exe yourschema.xsd sqltypes.xsd /classes
/namespace:WhateverIsYourNamespace</font><br />
This command will produce <font face="Courier New">yourschema</font>_<font face="Courier New">sqltypes</font>.cs
file with strongl-typed C# classes wrapped into the <font face="Courier New">WhateverIsYourNamspace</font> namespace.
If you expect to simply include this file into your project and rejoice at this point,
not so fast. Although the code will compile, at run time using XmlSerializer.Deserialize()
produced odd results - it complained that my root element with xmlns='' attribute was
not expected. That was because schema got the default name when it was generated by
SQL Server, while actual XML data did not reference the schema at all. To fix that
I had to remove <font color="#008000" size="2"><font color="#008000" size="2">XmlTypeAttribute</font></font> and <font color="#008000" size="2"><font color="#008000" size="2">XmlRootAttribute</font></font> attributes
from declarations of the generated classes. I had to keep XmlRoot attribute for the
class representing root node, by its declaration was simplified to look like <font size="2">[System.Xml.Serialization.</font><font color="#2b91af" size="2"><font color="#2b91af" size="2">XmlRootAttribute</font></font><font size="2">(IsNullable
= </font><font color="#0000ff" size="2"><font color="#0000ff" size="2">false</font></font><font size="2">)]</font>.
</p>
        <p>
Once that part was done, deserialization of XML into strongly-typed hierarchical
data structure started working just fine. 
</p>
        <p>
One more quick note: when .NET classes are generated from XSD schema, nullable
data fields get done in a slightly different way compared to the DataSet. In the dataset,
you'll get "type&lt;Nullable&gt;" or "type?" declaration for nullable data columns
of value types (int, DateTime, etc). .NET classes generated by xsd.exe won't
have nullable fields. Instead they will have extra boolean fields telling whether
the field is nullable. For example, if your SQL data table has nullable BirthDate,
the C# class produced by xsd.exe will have boolean BirthDateSpecified property, which
does what BirthDate.HasValue would do in the dataset.
</p>
        <p>
The whole process was not terribly smooth, but also not prohibitively burdensome. Of
course, much better design would be if Microsoft allowed to specify XML schema for
the TreeView control, and then to let data-bind the TreeView control to a SQL query
or an object method that returns XML. This way it would be still strongly-typed, but
the whole business of building XML-serializable C# classes out of the schema would
not be necessary. This approach would also allow design-time definition of TreeView
node formatting, just like GridView does it with strongly-typed datasets. Another
useful feature would be automatic generation of C# classes - just like generation
of strongly-typed datasets - for data-access methods returning XML.<br /></p>
        <p>
          <br />
 
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=16e5572c-dce4-4b09-9af2-35b6c207a4f9" />
      </body>
      <title>Manually Binding ASP.NET TreeView to XML Data From SQL Server</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,16e5572c-dce4-4b09-9af2-35b6c207a4f9.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,16e5572c-dce4-4b09-9af2-35b6c207a4f9.aspx</link>
      <pubDate>Sun, 18 Jan 2009 15:57:38 GMT</pubDate>
      <description>&lt;p&gt;
I had this seemingly simple task yesterday: populate TreeView control (ASP.NET) with
data&amp;nbsp;from SQL Server 2005. The query returning data from SQL Server was spanning
three joined tables with one-to-many relations, returning the denormalized set of
records that has some redundancy due to information from parent tables replicated
in each record (like having Company and Department information in each Employee record).
Populating hierarchical&amp;nbsp;TreeView&amp;nbsp;from&amp;nbsp;flat recordset&amp;nbsp;is pretty
inconvenient, so I decided to&amp;nbsp;give a shot to the&amp;nbsp;XML output feature of SQL
Server 2005.
&lt;/p&gt;
&lt;p&gt;
Converting flat denormalized result set output into hierarchical XML was as easy as
adding "FOR XML AUTO" to the end of my query. I ran the query and the output was exactly
what I wanted - no redundancy at all, with child records neatly nested inside the
parent table XML nodes (for proper record nesting be sure to use correct order of
the selected columns: parent table columns should precede child table columns in the
T-SQL SELECT statement). Now I needed to bring this result back from SQL to the business
tier of my C# application. I extensively use DataSets with the the convenience of
built-in data-access methods&amp;nbsp;created using DataSet Editor's query wizards. I&amp;nbsp;right-clicked
an appropriate table adapter and went through the "Add Query..." wizard, mapping my
new stored procedure returning XML to the new data access method. At the end of the
wizard "Tabular Data" option for the query result type was understandably grayed,
because XML is hierarchical, not tabular. But generated method turned out to return
Object type, and you would never know it unless you looked at the generated source
code - properties of the generated methods do now show the return type of the method.
I test-ran the method and it turned out to return what you would expect -&amp;nbsp;XML
text with all the data. 
&lt;/p&gt;
&lt;p&gt;
One could stop digging right here and simply use XmlDocument and XPath to parse out
and the walk the XML, populating tree nodes in the process, but I wanted to&amp;nbsp;turn
XML data into a strongly-typed hierarchical structure instead of walking XML nodes.&amp;nbsp;In
.NET all you need to turn XML into a strongly-typed structure is XML schema. A nice
little utility called xsd.exe converts XSD schemas into C# or VB.NET classes, which
are XML-serializable. SQL Server 2005 is sweet enough to generate schema, along with
bringing the XML data. I temporarily modified my query to have "FOR XML AUTO, XMLSCHEMA"
appendix, ran it in SQL Server and got the XML preceded by the schema. I copied schema
over to an XSD file and undid the change to the query, reverting the appendix back
to "FOR XML AUTO".
&lt;/p&gt;
&lt;p&gt;
Now, having created XSD schema defining XML structure returned by my query, all I
needed to do is to feed the XSD file to XSD.exe utility to produce C# file with classes
corresponding to m XML nodes, right? Almost. This was the part where things stopped
going smoothly. First, xsd.exe complained, as it always does, that it could not find
sqltypes.xsd schema, which is imported by the schema produced by SQL server. If you
ever used either xsd.exe or wsdl.exe against schemas that import other files, you
probably know that all the imported files need to be &lt;a href="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd"&gt;downloaded&lt;/a&gt; and
saved locally, and in the case of xsd.exe, all imported schemas should be explicitly
listed in the command line. Here's the example of xsd.exe command line (run Visual
Studio Command Prompt to load command prompt window with all environment variables
set):&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font face="Courier New"&gt;xsd.exe yourschema.xsd sqltypes.xsd /classes
/namespace:WhateverIsYourNamespace&lt;/font&gt;
&lt;br&gt;
This command will produce &lt;font face="Courier New"&gt;yourschema&lt;/font&gt;_&lt;font face="Courier New"&gt;sqltypes&lt;/font&gt;.cs
file with strongl-typed C# classes wrapped into the &lt;font face="Courier New"&gt;WhateverIsYourNamspace&lt;/font&gt;&amp;nbsp;namespace.
If you expect to simply include this file into your project and rejoice at this point,
not so fast. Although the code will compile, at run time using XmlSerializer.Deserialize()
produced odd results - it complained that my root element with xmlns='' attribute&amp;nbsp;was
not expected. That was because schema got the default name when it was generated by
SQL Server, while actual XML data did not reference the schema at all. To fix that
I had to remove &lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;XmlTypeAttribute&lt;/font&gt;&lt;/font&gt;&amp;nbsp;and &lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;XmlRootAttribute&lt;/font&gt;&lt;/font&gt;&amp;nbsp;attributes
from declarations of the generated classes. I had to keep XmlRoot attribute for the
class representing root node, by its declaration was simplified to look like &lt;font size=2&gt;[System.Xml.Serialization.&lt;/font&gt;&lt;font color=#2b91af size=2&gt;&lt;font color=#2b91af size=2&gt;XmlRootAttribute&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;(IsNullable
= &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;false&lt;/font&gt;&lt;/font&gt;&lt;font size=2&gt;)]&lt;/font&gt;.
&lt;/p&gt;
&lt;p&gt;
Once that part was done,&amp;nbsp;deserialization of XML into strongly-typed hierarchical
data structure&amp;nbsp;started working just fine. 
&lt;/p&gt;
&lt;p&gt;
One more quick note: when&amp;nbsp;.NET classes are generated from XSD schema, nullable
data fields get done in a slightly different way compared to the DataSet. In the dataset,
you'll get "type&amp;lt;Nullable&amp;gt;" or "type?" declaration for nullable data columns
of value types (int, DateTime, etc).&amp;nbsp;.NET classes generated by xsd.exe&amp;nbsp;won't
have nullable fields. Instead they will have extra boolean fields telling whether
the field is nullable. For example, if your SQL data table&amp;nbsp;has nullable&amp;nbsp;BirthDate,
the C# class produced by xsd.exe will have boolean BirthDateSpecified property, which
does what BirthDate.HasValue would do in the dataset.
&lt;/p&gt;
&lt;p&gt;
The whole process was not terribly smooth, but also not prohibitively burdensome.&amp;nbsp;Of
course, much better design would be if Microsoft allowed to specify XML schema&amp;nbsp;for
the TreeView control, and then to let data-bind the TreeView control to a SQL query
or an object method that returns XML. This way it would be still strongly-typed, but
the whole business of building XML-serializable C# classes out of the schema would
not be necessary. This approach would also allow design-time definition of TreeView
node formatting, just like GridView does it with strongly-typed datasets. Another
useful feature would be automatic generation of&amp;nbsp;C# classes - just like generation
of strongly-typed datasets - for data-access methods returning XML.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=16e5572c-dce4-4b09-9af2-35b6c207a4f9" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,16e5572c-dce4-4b09-9af2-35b6c207a4f9.aspx</comments>
      <category>.NET Programming;ASP.NET;Sofware Development</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=7885abfa-f502-429f-8016-309e233e4554</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,7885abfa-f502-429f-8016-309e233e4554.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,7885abfa-f502-429f-8016-309e233e4554.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=7885abfa-f502-429f-8016-309e233e4554</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Since I use ASP.NET HTTP handlers quite often, I decided to figure out what advantages
IHttpAsyncHandler has compared with IHttpHandler. As I looked at many people's claim
that IHttpAsyncHandler somehow magically improves performance by shifting request processing
on to another thread, I realized that MSDN documentation of IHttpAsyncHandler is laking
in a fundamental way: it fails to mention that simply moving request rendering
onto another thread does not yield any benefit. 
</p>
        <p>
When you simply move your request handling logic from the original
ASP.NET thread to your own thread (IHttpAsyncHandler), you gain exactly nothing because
both threads come from the same pool. The benefit of IHttpAsyncHandler comes in only
when your request processing thread is blocking, waiting for <strong>another
thread</strong>. For example, if your request processing calls a web service, your
request processing thread will wait for the IO completion happening on another thread
- where request is sent to the web service. In this case there
will be <strong>two</strong> threads involved: your request processing thread, and
the IO thread where outgoing web service request is being executed. This is the situation
where IHttpAsyncHandler can help: instead of holding on to the request processing
thread while waiting for the outgoing request to complete, one can release the original
request processing thread back to the pool, and finish response rendering on the IO
thread after the web service request has completed. This way, instead of holding two
threads for the duration of the relatively long-running process of invoking
a web service, your request processing is using only one thread.
</p>
        <p>
So, the bottom line is this:<br />
- You should only concert yourself with IHttpAsyncHandler if you are running out of
request processing threads.<br />
- If you do, check your logic for whether it's waiting for an IO completion (or
is using other threads for other reasons), and only if that's the case, switch to
IHttpAsyncHandler.<br />
- Otherwise simply increase the size of the ASP.NET thread pool in the web.config
and stick with good ole' IHttpHandler.<br /></p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=7885abfa-f502-429f-8016-309e233e4554" />
      </body>
      <title>ASP.NET IHttpAsyncHandler vs IHttpHandler</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,7885abfa-f502-429f-8016-309e233e4554.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,7885abfa-f502-429f-8016-309e233e4554.aspx</link>
      <pubDate>Mon, 10 Nov 2008 20:52:23 GMT</pubDate>
      <description>&lt;p&gt;
Since I use ASP.NET HTTP handlers quite often, I decided to figure out what advantages
IHttpAsyncHandler has compared with IHttpHandler. As I looked at many people's claim
that IHttpAsyncHandler somehow magically improves performance by shifting&amp;nbsp;request&amp;nbsp;processing
on to another thread, I realized that MSDN documentation of IHttpAsyncHandler is laking
in&amp;nbsp;a fundamental way: it fails to mention that simply&amp;nbsp;moving request rendering
onto another thread&amp;nbsp;does not&amp;nbsp;yield any benefit. 
&lt;/p&gt;
&lt;p&gt;
When you simply&amp;nbsp;move your&amp;nbsp;request handling logic from&amp;nbsp;the original
ASP.NET thread to your own thread (IHttpAsyncHandler), you gain exactly nothing&amp;nbsp;because
both threads come from the same pool. The benefit of IHttpAsyncHandler comes in only
when your request processing thread&amp;nbsp;is blocking, waiting for &lt;strong&gt;another
thread&lt;/strong&gt;. For example, if your request processing calls a web service, your
request processing thread will wait for the IO completion happening on another thread
- where&amp;nbsp;request&amp;nbsp;is sent to&amp;nbsp;the web&amp;nbsp;service. In this case there
will be &lt;strong&gt;two&lt;/strong&gt; threads involved: your request processing thread, and
the IO thread where outgoing web service request is being executed. This is the situation
where IHttpAsyncHandler can help: instead of holding on to the request processing
thread while waiting for the outgoing request to complete, one can release the original
request processing thread back to the pool, and finish response rendering on the IO
thread after the web service request has completed. This way, instead of holding two
threads&amp;nbsp;for the duration of the&amp;nbsp;relatively long-running process of invoking
a web service, your request processing is using only one thread.
&lt;/p&gt;
&lt;p&gt;
So, the bottom line is this:&lt;br&gt;
- You should only concert yourself with IHttpAsyncHandler if you are running out of
request processing threads.&lt;br&gt;
- If you do, check your logic for whether it's waiting for&amp;nbsp;an IO completion (or
is using other threads for other reasons), and only if that's the case, switch to
IHttpAsyncHandler.&lt;br&gt;
- Otherwise simply increase the size of the ASP.NET thread pool in the web.config
and stick with good ole' IHttpHandler.&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=7885abfa-f502-429f-8016-309e233e4554" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,7885abfa-f502-429f-8016-309e233e4554.aspx</comments>
      <category>.NET Programming;AJAX;ASP.NET;Sofware Development</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=c46a9fb6-041e-4cdc-adca-6fd6bf0a3c36</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,c46a9fb6-041e-4cdc-adca-6fd6bf0a3c36.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,c46a9fb6-041e-4cdc-adca-6fd6bf0a3c36.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c46a9fb6-041e-4cdc-adca-6fd6bf0a3c36</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Microsoft marketing folks are incorrigible. When explaining new technology they invariably
fail to make anything any more clear. Case in point: Microsoft Azure. Parsing through
the Azure site left an impression that MS don't really want anyone to find out what
in the world they are really doing.
</p>
        <p>
For those who don't have time to filter through MS marketing noise, consider
reading this very concise, pretty funny even if somewhat crude-worded Windows Azure
review:<br /><a href="http://www.theregister.co.uk/2008/11/03/dziuba_azure/print.html">http://www.theregister.co.uk/2008/11/03/dziuba_azure/print.html</a></p>
        <p>
          <strong>Update</strong>: <a href="http://download.microsoft.com/download/e/4/3/e43bb484-3b52-4fa8-a9f9-ec60a32954bc/Azure_Services_Platform.pdf">This
white paper</a> penned by David Chappell is most to-the-point Azure doc so far.
</p>
        <p>
          <strong>Update 2</strong>: <a href="http://www.microsoft.com/azure/Pricing.mspx">Azure
pricing information</a>.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=c46a9fb6-041e-4cdc-adca-6fd6bf0a3c36" />
      </body>
      <title>Microsoft Azure Critique/Review</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,c46a9fb6-041e-4cdc-adca-6fd6bf0a3c36.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,c46a9fb6-041e-4cdc-adca-6fd6bf0a3c36.aspx</link>
      <pubDate>Fri, 07 Nov 2008 14:53:48 GMT</pubDate>
      <description>&lt;p&gt;
Microsoft marketing folks are incorrigible. When explaining new technology they invariably
fail to make anything any more clear. Case in point: Microsoft Azure. Parsing through
the Azure site left an impression that MS don't really want anyone to find out what
in the world they are really doing.
&lt;/p&gt;
&lt;p&gt;
For those who&amp;nbsp;don't have time to filter&amp;nbsp;through MS marketing noise, consider
reading this very concise, pretty funny even if somewhat crude-worded Windows Azure
review:&lt;br&gt;
&lt;a href="http://www.theregister.co.uk/2008/11/03/dziuba_azure/print.html"&gt;http://www.theregister.co.uk/2008/11/03/dziuba_azure/print.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update&lt;/strong&gt;: &lt;a href="http://download.microsoft.com/download/e/4/3/e43bb484-3b52-4fa8-a9f9-ec60a32954bc/Azure_Services_Platform.pdf"&gt;This
white paper&lt;/a&gt; penned by David Chappell is most to-the-point Azure doc so far.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update 2&lt;/strong&gt;: &lt;a href="http://www.microsoft.com/azure/Pricing.mspx"&gt;Azure
pricing information&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=c46a9fb6-041e-4cdc-adca-6fd6bf0a3c36" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,c46a9fb6-041e-4cdc-adca-6fd6bf0a3c36.aspx</comments>
      <category>.NET Programming;ASP.NET;Sofware Development;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=cfe694cd-5bb9-4b3d-8cbd-cc95e9681f99</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,cfe694cd-5bb9-4b3d-8cbd-cc95e9681f99.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,cfe694cd-5bb9-4b3d-8cbd-cc95e9681f99.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=cfe694cd-5bb9-4b3d-8cbd-cc95e9681f99</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It's much easier to read large numbers when thousands are separated by commas. But
I can never remember how the numeric format with thousands comma-separated is
defined for .NET String.Format() method and for the databinding. So more as a note
to self, here it is:
</p>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">
            <p>
string
</p>
          </font>
        </font>
        <font color="#000000" size="2"> output = </font>
        <font color="#0000ff" size="2">
          <font color="#0000ff" size="2">string</font>
        </font>
        <font color="#000000" size="2">.Format(</font>
        <font color="#a31515" size="2">
          <font color="#a31515" size="2">"{0:#,#}"</font>
        </font>
        <font color="#000000" size="2">,
123456789); </font>
        <font color="#008000" size="2">
          <font color="#008000" size="2">//
Will produce 123,456,789
</font>
        </font>
        <p>
The same goes for data binding data sources to data controls like DataGridView. Specify
format as <font color="#a31515" size="2"><font color="#a31515" size="2">"{0:#,#}"</font></font>.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=cfe694cd-5bb9-4b3d-8cbd-cc95e9681f99" />
      </body>
      <title>Thousands Separator When Formatting Numeric String in .NET (C#, VB.NET) Programming</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,cfe694cd-5bb9-4b3d-8cbd-cc95e9681f99.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,cfe694cd-5bb9-4b3d-8cbd-cc95e9681f99.aspx</link>
      <pubDate>Sat, 26 Jul 2008 15:18:35 GMT</pubDate>
      <description>&lt;p&gt;
It's much easier to read large numbers when thousands are separated by commas. But
I can never remember how the numeric format&amp;nbsp;with thousands comma-separated is
defined for .NET String.Format() method and for the databinding. So more as a note
to self, here it is:
&lt;/p&gt;
&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt; 
&lt;p&gt;
string
&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt; output = &lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;string&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;.Format(&lt;/font&gt;&lt;font color=#a31515 size=2&gt;&lt;font color=#a31515 size=2&gt;"{0:#,#}"&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;,
123456789); &lt;/font&gt;&lt;font color=#008000 size=2&gt;&lt;font color=#008000 size=2&gt;// Will produce
123,456,789&gt;
&lt;/font&gt;&lt;/font&gt; 
&lt;p&gt;
The same goes for data binding data sources to data controls like DataGridView. Specify
format as &lt;font color=#a31515 size=2&gt;&lt;font color=#a31515 size=2&gt;"{0:#,#}"&lt;/font&gt;&lt;/font&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=cfe694cd-5bb9-4b3d-8cbd-cc95e9681f99" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,cfe694cd-5bb9-4b3d-8cbd-cc95e9681f99.aspx</comments>
      <category>.NET Programming;ASP.NET;Sofware Development;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=70ed5fdc-0489-410b-9f59-9d69c3e6bcfc</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,70ed5fdc-0489-410b-9f59-9d69c3e6bcfc.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,70ed5fdc-0489-410b-9f59-9d69c3e6bcfc.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=70ed5fdc-0489-410b-9f59-9d69c3e6bcfc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If your ASP.NET 1.1 or 2.0 application throws "<em>This implementation is not part
of the Windows Platform FIPS validated cryptographic algorithms</em>" exception, the
easiest way to fix is to add <br /><font color="#0000ff" size="2"><font color="#0000ff" size="2">      &lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">machineKey</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2"></font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2">validationKey</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=</font></font><font color="#000000" size="2">"</font><font color="#0000ff" size="2"><font color="#0000ff" size="2">AutoGenerate,IsolateApps</font></font><font color="#000000" size="2">"</font><font color="#0000ff" size="2"><font color="#0000ff" size="2"></font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2">decryptionKey</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=</font></font><font color="#000000" size="2">"</font><font color="#0000ff" size="2"><font color="#0000ff" size="2">AutoGenerate,IsolateApps</font></font><font color="#000000" size="2">"</font><font color="#0000ff" size="2"><font color="#0000ff" size="2"></font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2">validation</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=</font></font><font color="#000000" size="2">"</font><font color="#0000ff" size="2"><font color="#0000ff" size="2">3DES</font></font><font color="#000000" size="2">"</font><font color="#0000ff" size="2"><font color="#0000ff" size="2"></font></font><font color="#ff0000" size="2"><font color="#ff0000" size="2">decryption</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">=</font></font><font color="#000000" size="2">"</font><font color="#0000ff" size="2"><font color="#0000ff" size="2">3DES</font></font><font color="#000000" size="2">"</font><font color="#0000ff" size="2"><font color="#0000ff" size="2">/&gt;<br /></font></font>line to the <font color="#0000ff" size="2"><font color="#0000ff" size="2">&lt;</font></font><font color="#a31515" size="2"><font color="#a31515" size="2">system.web</font></font><font color="#0000ff" size="2"><font color="#0000ff" size="2">&gt;</font></font> section
of the <strong>web.config</strong> file of your application. 
</p>
        <p>
FIPS compliance is required for software installed on US government computers.
The compliance requirement can be <a href="http://blogs.msdn.com/shawnfa/archive/2005/05/16/417975.aspx">turned
on and off</a>.
</p>
        <p>
Source: <a href="http://support.microsoft.com/kb/911722">http://support.microsoft.com/kb/911722</a><br /><br /></p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=70ed5fdc-0489-410b-9f59-9d69c3e6bcfc" />
      </body>
      <title>Make Your ASP.NET Application FIPS Compliant for US Government Use</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,70ed5fdc-0489-410b-9f59-9d69c3e6bcfc.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,70ed5fdc-0489-410b-9f59-9d69c3e6bcfc.aspx</link>
      <pubDate>Wed, 23 Jul 2008 18:23:18 GMT</pubDate>
      <description>&lt;p&gt;
If your ASP.NET 1.1 or 2.0 application throws "&lt;em&gt;This implementation is not part
of the Windows Platform FIPS validated cryptographic algorithms&lt;/em&gt;" exception, the
easiest way to fix is to add&amp;nbsp;&lt;br&gt;
&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;font color=#a31515 size=2&gt;&lt;font color=#a31515 size=2&gt;machineKey&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&lt;font color=#ff0000 size=2&gt;validationKey&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;"&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;AutoGenerate,IsolateApps&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;"&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&lt;font color=#ff0000 size=2&gt;decryptionKey&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;"&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;AutoGenerate,IsolateApps&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;"&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&lt;font color=#ff0000 size=2&gt;validation&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;"&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;3DES&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;"&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color=#ff0000 size=2&gt;&lt;font color=#ff0000 size=2&gt;decryption&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;=&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;"&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;3DES&lt;/font&gt;&lt;/font&gt;&lt;font color=#000000 size=2&gt;"&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;/&amp;gt;&lt;br&gt;
&lt;/font&gt;&lt;/font&gt;line to the &lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;font color=#a31515 size=2&gt;&lt;font color=#a31515 size=2&gt;system.web&lt;/font&gt;&lt;/font&gt;&lt;font color=#0000ff size=2&gt;&lt;font color=#0000ff size=2&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&amp;nbsp;section
of the &lt;strong&gt;web.config&lt;/strong&gt; file of your application. 
&lt;/p&gt;
&lt;p&gt;
FIPS compliance&amp;nbsp;is required for software installed on US government computers.
The compliance requirement can be &lt;a href="http://blogs.msdn.com/shawnfa/archive/2005/05/16/417975.aspx"&gt;turned
on and off&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Source: &lt;a href="http://support.microsoft.com/kb/911722"&gt;http://support.microsoft.com/kb/911722&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=70ed5fdc-0489-410b-9f59-9d69c3e6bcfc" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,70ed5fdc-0489-410b-9f59-9d69c3e6bcfc.aspx</comments>
      <category>ASP.NET;Security;Sofware Development</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=ef46c6df-09ef-4801-8d2e-63ecc5e34fe3</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,ef46c6df-09ef-4801-8d2e-63ecc5e34fe3.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,ef46c6df-09ef-4801-8d2e-63ecc5e34fe3.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=ef46c6df-09ef-4801-8d2e-63ecc5e34fe3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Upgrading or replacing a motherboard on a machine running Windows Server 2003 (in
my case it was Windows 2003 R2 Standard Edition with Service Pack 2 x64)
is relatively straightforward, and more or less works as described in the <a href="http://support.microsoft.com/kb/824125">MS
Knowledge Base article</a>: you start upgrade process by running Windows setup while
old motherboard is in-place, and once upgrade process reboots the machine, you intercept
it by turning the computer off and replacing the MoBo, and then allow upgrade process
to continue. It worked alright, and wasn't too long a process. 
</p>
        <p>
What the KB article didn't mention is that <strong>after the upgrade a few things
may be broken or missing</strong>. In my case there were two big things broken:
</p>
        <ul>
          <li>
IE was corrupted in a way that prevented downloading files by clicking a link. Page
browsing still worked and "Save target as..." worked, but clicking a link that redirects
to a file download resulted in the strange error message: "The requested look-up key
was not found in any <b>active activation</b>". My way to fix it was to upgrade IE6
to IE7, but since IE7 download links were those redirect links that didn't work, I
had to install FireFox, which had a link accessible via "Save target as", and then
I used FireFox to download and install IE7.<br /><br /></li>
          <li>
.NET Framework 2.0 has disappeared, wracking havoc making pretty much all applications
(SQL Server Management console, ASP.NET apps in IIS) not working. Fixing it was not
too bad though - I downloaded and installed .NET Framework 2.0 x64, then made a couple
of runs of Windows Update to ensure the server won't try to reboot soon after being
brought online, rebooted the machine just in case, and that was it.</li>
        </ul>
        <p>
Overall entire process, although not completely seamless or worry-free, took only
about an hour, not counting time required to physically replace the board.
</p>
        <p>
          <br />
        </p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=ef46c6df-09ef-4801-8d2e-63ecc5e34fe3" />
      </body>
      <title>Upgrading or Replacing a Motherboard on Windows Server 2003 Machine</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,ef46c6df-09ef-4801-8d2e-63ecc5e34fe3.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,ef46c6df-09ef-4801-8d2e-63ecc5e34fe3.aspx</link>
      <pubDate>Mon, 23 Jun 2008 17:43:26 GMT</pubDate>
      <description>&lt;p&gt;
Upgrading or replacing a motherboard on a machine running Windows Server 2003 (in
my case it was Windows 2003 R2&amp;nbsp;Standard Edition with Service Pack&amp;nbsp;2 x64)
is relatively straightforward, and more or less works as described in the &lt;a href="http://support.microsoft.com/kb/824125"&gt;MS
Knowledge Base article&lt;/a&gt;: you start upgrade process by running Windows setup while
old motherboard is in-place, and once upgrade process reboots the machine, you intercept
it by turning the computer off and replacing the MoBo, and then allow upgrade process
to continue. It worked alright, and wasn't too long a process. 
&lt;/p&gt;
&lt;p&gt;
What the KB article didn't&amp;nbsp;mention is that &lt;strong&gt;after the upgrade a few things
may be broken or missing&lt;/strong&gt;. In my case there were two big things broken:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
IE was corrupted in a way that prevented downloading files by clicking a link. Page
browsing still worked and "Save target as..." worked, but clicking a link that redirects
to a file download resulted in the strange error message: "The requested look-up key
was not found in any &lt;b&gt;active activation&lt;/b&gt;". My way to fix it was to upgrade IE6
to IE7, but since IE7 download links were those redirect links that didn't work, I
had to install FireFox, which had a link accessible via "Save target as", and then
I used FireFox to download and install IE7.&lt;br&gt;
&lt;br&gt;
&lt;li&gt;
.NET Framework 2.0 has disappeared, wracking havoc making pretty much all applications
(SQL Server Management console, ASP.NET apps in IIS) not working. Fixing it was not
too bad though - I downloaded and installed .NET Framework 2.0 x64, then made a couple
of runs of Windows Update to ensure the server won't try to reboot soon after being
brought online, rebooted the machine just in case, and that was it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Overall entire process, although not completely seamless or worry-free, took only
about an hour, not counting time required to physically replace the board.
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=ef46c6df-09ef-4801-8d2e-63ecc5e34fe3" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,ef46c6df-09ef-4801-8d2e-63ecc5e34fe3.aspx</comments>
      <category>ASP.NET;Backup/Restore;Digital Home;Hardware;x64</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=0de04deb-9ef1-4bd1-afc9-c642af7f7593</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,0de04deb-9ef1-4bd1-afc9-c642af7f7593.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,0de04deb-9ef1-4bd1-afc9-c642af7f7593.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=0de04deb-9ef1-4bd1-afc9-c642af7f7593</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
After installing Visual Studio 2008 on a new machine and starting playing with a simple
Windows Communication Foundation project, I attempted to change service's WCF settings
using WCF Service Configuration Editor utility (SvcConfigEditor.exe). However, I got
the "Windows SDK is not installed correctly" error. "<a href="http://en.wikipedia.org/wiki/Internets_(colloquialism)">Internets</a>"
were surprisingly mum on the subject, so I had to figure out the solution myself.
</p>
        <p>
To fix the problem, I had to <strong>install <a href="http://go.microsoft.com/fwlink/?LinkId=64674">Windows
SDK 6.0</a></strong> manually. After I did that, the problem went away. Just quit
Visual Studio 2008 before installing Windows SDK.
</p>
        <p>
          <strong>Update:</strong> Even after reinstalling Windows SDK, first time right-clicking
on the web.config in the Visual Studio '08 Solution Explorer does not bring "Edit
WCF Configuration" item to the menu. However, after I did <strong>Tools</strong> |
"<strong>WCF Service Configuration Editor</strong>", "Edit WCF Configuration" item
started showing up upon right-clicking the .config file.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=0de04deb-9ef1-4bd1-afc9-c642af7f7593" />
      </body>
      <title>VS 2008: Windows SDK 6.0 Needed for WCF "Service Configuration Editor" Utility</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,0de04deb-9ef1-4bd1-afc9-c642af7f7593.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,0de04deb-9ef1-4bd1-afc9-c642af7f7593.aspx</link>
      <pubDate>Thu, 15 May 2008 20:53:38 GMT</pubDate>
      <description>&lt;p&gt;
After installing Visual Studio 2008 on a new machine and starting playing with a simple
Windows Communication Foundation project, I attempted to change service's WCF settings
using WCF Service Configuration Editor utility (SvcConfigEditor.exe). However, I got
the "Windows SDK is not installed correctly" error. "&lt;a href="http://en.wikipedia.org/wiki/Internets_(colloquialism)"&gt;Internets&lt;/a&gt;"
were surprisingly mum on the subject, so I had to figure out the solution myself.
&lt;/p&gt;
&lt;p&gt;
To fix the problem, I had to &lt;strong&gt;install &lt;a href="http://go.microsoft.com/fwlink/?LinkId=64674"&gt;Windows
SDK 6.0&lt;/a&gt;&lt;/strong&gt; manually. After I did that, the problem went away. Just quit
Visual Studio 2008 before installing Windows SDK.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update:&lt;/strong&gt; Even after reinstalling Windows SDK, first time right-clicking
on the web.config in the Visual Studio '08 Solution Explorer does not bring "Edit
WCF Configuration" item to the menu. However, after I did &lt;strong&gt;Tools&lt;/strong&gt; |
"&lt;strong&gt;WCF Service Configuration Editor&lt;/strong&gt;", "Edit WCF Configuration" item
started showing up upon right-clicking the .config file.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=0de04deb-9ef1-4bd1-afc9-c642af7f7593" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,0de04deb-9ef1-4bd1-afc9-c642af7f7593.aspx</comments>
      <category>.NET Programming;ASP.NET;Sofware Development;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=a3362548-9d08-4914-97e0-7f520fea7e76</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,a3362548-9d08-4914-97e0-7f520fea7e76.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,a3362548-9d08-4914-97e0-7f520fea7e76.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=a3362548-9d08-4914-97e0-7f520fea7e76</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
When ASP.NET 2.0 and Visual Studio 2005 came out I hoped that ASP.NET themes will
be developed en masse by third parties and sold like those on <a href="http://TemplateMonster.com">TemplateMonster.com</a>.
Today, tired of ugly GridViews in my apps, I decided to find an ASP.NET theme
for at least a GridView, but to my surprise, the only thing I found was <a href="http://weblogs.asp.net/kevinbrammer/archive/2008/02/24/glassy-black-gridview-theme.aspx">this</a>,
which is not even a skin. There are millions of sites, books and blogs telling
how to make themes in ASP.NET 2.0, but it looks like market for third-party templates
has never materialized. Given how fierce the competition in the graphics &amp;
UI design world is, I wonder why everyone is missing a chance to take this niche.
Microsoft has a few <a href="http://msdn2.microsoft.com/en-us/asp.net/aa336613.aspx">starter
themes</a>, but just a few and without live test-drive sites - one has to download
and install Visual Studio plug-ins and build the site to see it in action. All this
is very strange: it's hard to believe there is no business model in making skinnable
themes for ASP.NET applications.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=a3362548-9d08-4914-97e0-7f520fea7e76" />
      </body>
      <title>Where Are the Third-Party ASP.NET Theme/Skin Galleries?</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,a3362548-9d08-4914-97e0-7f520fea7e76.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,a3362548-9d08-4914-97e0-7f520fea7e76.aspx</link>
      <pubDate>Tue, 26 Feb 2008 19:33:32 GMT</pubDate>
      <description>&lt;p&gt;
When ASP.NET 2.0 and Visual Studio 2005 came out I hoped that ASP.NET themes will
be developed en masse by third parties and sold like those on &lt;a href="http://TemplateMonster.com"&gt;TemplateMonster.com&lt;/a&gt;.
Today, tired of&amp;nbsp;ugly GridViews in my apps, I decided to find an ASP.NET&amp;nbsp;theme
for at least a&amp;nbsp;GridView, but to my surprise, the only thing I found was &lt;a href="http://weblogs.asp.net/kevinbrammer/archive/2008/02/24/glassy-black-gridview-theme.aspx"&gt;this&lt;/a&gt;,
which is not even a skin. There are millions of sites, books&amp;nbsp;and blogs telling
how to make themes in ASP.NET 2.0, but it looks like market for third-party templates
has never materialized. Given how fierce the competition in the graphics&amp;nbsp;&amp;amp;
UI design world is, I wonder why everyone is missing a chance to take this niche.
Microsoft has a few &lt;a href="http://msdn2.microsoft.com/en-us/asp.net/aa336613.aspx"&gt;starter
themes&lt;/a&gt;, but just a few and without live test-drive sites&amp;nbsp;- one has to download
and install Visual Studio plug-ins and build the site to see it in action. All this
is very strange: it's hard to believe there is no business model in making skinnable
themes for ASP.NET applications.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=a3362548-9d08-4914-97e0-7f520fea7e76" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,a3362548-9d08-4914-97e0-7f520fea7e76.aspx</comments>
      <category>.NET Programming;ASP.NET;Rants;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=81917f0e-fbe8-4586-88f3-def975bd41b3</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,81917f0e-fbe8-4586-88f3-def975bd41b3.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,81917f0e-fbe8-4586-88f3-def975bd41b3.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=81917f0e-fbe8-4586-88f3-def975bd41b3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
After releasing build 1.7 of my open-source <a href="http://www.codeplex.com/UltiDevWebBasedMP3Pl/Release/ProjectReleases.aspx">redistributable
ASP.NET-based MP3 player application</a>, I used it for a while and I am pretty <strong>happy
with its stability and functionality</strong>. The design goal for the project was
to demo a concept of an easily-redistributable web application for SOHO market. With
unquestionable popularity of web-based applications in the business world, removing
complexity of the web hosting infrastructure to make home web applications possible
as a category is poised to be <a href="http://www.ultidev.com/products/HttpVPN/"><strong>the
next big thing</strong></a>.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=81917f0e-fbe8-4586-88f3-def975bd41b3" />
      </body>
      <title>Version 1.7 of "MP3 Player Sample for ASP.NET with AJAX" Looks Good</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,81917f0e-fbe8-4586-88f3-def975bd41b3.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,81917f0e-fbe8-4586-88f3-def975bd41b3.aspx</link>
      <pubDate>Wed, 01 Aug 2007 15:02:17 GMT</pubDate>
      <description>&lt;p&gt;
After releasing build 1.7 of my open-source &lt;a href="http://www.codeplex.com/UltiDevWebBasedMP3Pl/Release/ProjectReleases.aspx"&gt;redistributable
ASP.NET-based MP3 player application&lt;/a&gt;, I used it for a while and I am pretty &lt;strong&gt;happy
with its stability and functionality&lt;/strong&gt;. The design goal for the project was
to demo a concept of an easily-redistributable web application for SOHO market. With
unquestionable popularity of web-based applications in the business world, removing
complexity of the web hosting infrastructure to make home web applications possible
as a category is poised to be&amp;nbsp;&lt;a href="http://www.ultidev.com/products/HttpVPN/"&gt;&lt;strong&gt;the
next big thing&lt;/strong&gt;&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=81917f0e-fbe8-4586-88f3-def975bd41b3" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,81917f0e-fbe8-4586-88f3-def975bd41b3.aspx</comments>
      <category>AJAX;ASP.NET;Digital Home;HttpVPN</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=8fbf8195-6c58-433a-bbe9-d961486bda8c</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,8fbf8195-6c58-433a-bbe9-d961486bda8c.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,8fbf8195-6c58-433a-bbe9-d961486bda8c.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=8fbf8195-6c58-433a-bbe9-d961486bda8c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
MS AJAX is great, but if you wanted to make an installable application with it, there
was no way of including AJAX into your MSI-based setup project. I made a <a href="http://www.codeplex.com/MSAjax10SetupPrereq/Release/ProjectReleases.aspx">Visual
Studio manifest</a> that makes MS AJAX Extensions a Visual Studio Setup Project <strong>prerequisite:</strong></p>
        <p>
          <img src="http://www.codeplex.com/MSAjax10SetupPrereq/Project/FileDownload.aspx?DownloadId=14404" />
        </p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=8fbf8195-6c58-433a-bbe9-d961486bda8c" />
      </body>
      <title>Making Microsoft AJAX 1.0 Redistributable with Visual Studio 2005 Setup Projects</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,8fbf8195-6c58-433a-bbe9-d961486bda8c.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,8fbf8195-6c58-433a-bbe9-d961486bda8c.aspx</link>
      <pubDate>Sat, 30 Jun 2007 22:53:12 GMT</pubDate>
      <description>&lt;p&gt;
MS AJAX is great, but if you wanted to make an installable application with it, there
was no way of including AJAX into your MSI-based setup project. I made a &lt;a href="http://www.codeplex.com/MSAjax10SetupPrereq/Release/ProjectReleases.aspx"&gt;Visual
Studio manifest&lt;/a&gt; that makes MS AJAX Extensions a Visual Studio Setup Project &lt;strong&gt;prerequisite:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.codeplex.com/MSAjax10SetupPrereq/Project/FileDownload.aspx?DownloadId=14404"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=8fbf8195-6c58-433a-bbe9-d961486bda8c" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,8fbf8195-6c58-433a-bbe9-d961486bda8c.aspx</comments>
      <category>AJAX;ASP.NET</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=dd75a329-1969-473a-996a-01ff9a90a84a</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,dd75a329-1969-473a-996a-01ff9a90a84a.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,dd75a329-1969-473a-996a-01ff9a90a84a.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=dd75a329-1969-473a-996a-01ff9a90a84a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
To AJAX-enable your existing ASP.NET 2.0 application follow <a href="http://www.asp.net/learn/videos/view.aspx?tabid=63&amp;id=81">this
video</a>. It takes only a few minutes and essentially makes you create a dummy new
Ajax-enabled ASP.NET application and then copy &amp; paste relevant pieces of its
web.config file into your application's web.config. 
</p>
        <p>
If you are planning to use <a href="http://www.codeplex.com/AtlasControlToolkit">Ajax
Control Toolkit</a>, then instead of creating dummy project from the "ASP.NET AJAX-Enabled
Web Site" Visual Studio project template, create the dummy project using "AJAX Control
Toolkit Web Site" template. Its web.config has additional entry in the &lt;controls&gt;
section of the web.config that will be necessary for your application.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=dd75a329-1969-473a-996a-01ff9a90a84a" />
      </body>
      <title>Microsoft Ajax 1.0 Extensions: Converting Existing ASP.NET Application Into AJAX-Enabled One</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,dd75a329-1969-473a-996a-01ff9a90a84a.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,dd75a329-1969-473a-996a-01ff9a90a84a.aspx</link>
      <pubDate>Fri, 22 Jun 2007 17:01:40 GMT</pubDate>
      <description>&lt;p&gt;
To AJAX-enable your existing ASP.NET 2.0 application follow &lt;a href="http://www.asp.net/learn/videos/view.aspx?tabid=63&amp;amp;id=81"&gt;this
video&lt;/a&gt;. It takes only a few minutes and essentially makes you create a dummy new
Ajax-enabled ASP.NET application and then copy &amp;amp; paste relevant pieces of its
web.config file into your application's web.config. 
&lt;/p&gt;
&lt;p&gt;
If you are planning to use &lt;a href="http://www.codeplex.com/AtlasControlToolkit"&gt;Ajax
Control Toolkit&lt;/a&gt;, then instead of creating dummy project from the "ASP.NET AJAX-Enabled
Web Site" Visual Studio project template, create the dummy project using "AJAX Control
Toolkit Web Site" template. Its web.config has additional entry in the &amp;lt;controls&amp;gt;
section of the web.config that will be necessary for your application.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=dd75a329-1969-473a-996a-01ff9a90a84a" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,dd75a329-1969-473a-996a-01ff9a90a84a.aspx</comments>
      <category>AJAX;ASP.NET;Sofware Development</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=68d9cc66-8f77-49b0-9e35-16f729116120</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,68d9cc66-8f77-49b0-9e35-16f729116120.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,68d9cc66-8f77-49b0-9e35-16f729116120.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=68d9cc66-8f77-49b0-9e35-16f729116120</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>Notes on Upgrading Windows XP MCE 2005/IIS5 to Vista/IIS7</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,68d9cc66-8f77-49b0-9e35-16f729116120.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,68d9cc66-8f77-49b0-9e35-16f729116120.aspx</link>
      <pubDate>Wed, 23 May 2007 20:20:28 GMT</pubDate>
      <description>&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Although usually
I prefer to make a clean installation of a new OS to lose all the junk accumulated
since last OS upgrade, this time I decided to upgrade our family Media Center box
instead, because unlike my desktop the MCE box has just a few basic server apps, like
IIS, email server, ORB, &lt;a href="http://www.asciiexpress.com/webguide/download.aspx"&gt;WebGuide&lt;/a&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;,
and of course MCE 2005.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"&gt;Overall, upgrade
was a success, but most of the drivers and applications had to be either upgraded
or reinstalled. There were quite a few things to take care of:&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;ul type=disc&gt;
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Running &lt;a href="http://www.microsoft.com/windows/products/windowsvista/buyorupgrade/upgradeadvisor.mspx"&gt;&lt;font color=#800080&gt;Vista
Upgrade Advisor&lt;/font&gt;&lt;/a&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt; was
a good idea. It tells upfront which drivers, services and application will not, or
may not work. The most important thing it told me was that I don't have enough space
on drive C:, so since it was still an XP I used Norton Partition Magic to increased
the C: partition size by 25 GB. I also downloaded some 
&lt;st1:place w:st="on"&gt;Vista&lt;/st1:place&gt;
drivers before starting the upgrade just in case my network card would not work after
the upgrade.&lt;br&gt;
&lt;br&gt;
&lt;/span&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Although ATI Catalyst software
was not among those Vista Upgrade Advisor suggested to remove, the screen resolution
settings were not preserved&amp;nbsp;by the upgrade process. Moreover, standard MS ATI
driver didn't support resolutions required by some HDTV sets. I had to visit ATI web
site and download the latest driver and the Catalyst software. Once I've done that&amp;nbsp;I
was able to&amp;nbsp;adjust the resolution back to what it used to be.&lt;br&gt;
&lt;br&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;MCE settings partially survived.
Scheduled series settings carried over fine, but Signal settings and Guide had to
be specified again&amp;nbsp;by going through the setup wizard. I had my recorded TV shows
location in XP MCE changed from the default. While new MCE in Vista has found them,
I still had to specified the location for new recordings. Thankfully, it was easy
- the UI allowing to change the location of newly recorded shows is built into Vista's
MCE app. Pictures and Music location settings have carried over with no problem.&lt;br&gt;
&lt;br&gt;
&lt;/span&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;The hardest part was to revive
ASP.NET applications and sites after IIS was upgraded from IIS5 on XP to IIS 7.0 on
Vista. The hardest problem was that caused by the remnants of some old version of
.NET&amp;nbsp;Framework 2.0. That caused application pools hosting .NET 2.0 to crash hard
on the very first request while spitting out strange errors, like "&lt;em&gt;The worker
process failed to pre-load .Net Runtime version v2.0.&lt;/em&gt;"&amp;nbsp;to the application
log. It took me two days of Internet searching to find &lt;a href="http://forums.iis.net/p/1053655/1580578.aspx#1580578"&gt;the
solution&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
ASP.NET 1.1 applications were also all not working. I had to run aspnet_regiis.exe
from the 1.1 Framework to bring them back to life.&lt;br&gt;
&lt;br&gt;
In many cases I had to manually ACL folders containing ASP.NET applications with access
rights for "NETWORK SERVICE" user account. I also had to change anonymous authentication
account from IUSR_whatever to appPool identity.&lt;br&gt;
&lt;br&gt;
The bottom line is migration of ASP.NET web apps was not trivial.&lt;br&gt;
&lt;br&gt;
&lt;/span&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
Both Orb and WebGuide stopped working after the upgrade. I upgraded ORB with no problem
and uninstalled the WebGuide so I could install Vista-specific version of the WG.
It all went fine - that's after I was done fixing all the IIS7 glitches.&lt;br&gt;
&lt;br&gt;
&lt;/span&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;dasBlog 1.9 - the software running
this blog - ended up being incompatible with Vista. I had to move this blog to another
server running good ole' Windows 2003/IIS 6.0. After moving the app to another server,
which was free of surprises, the final challenge was to redirect links going to old
blog location pointing to IIS7/Vista to the new one. Unlike IIS6, IIS7 does not have
a UI where you could choose "A redirection to a URL" as a destination for your virtual
directory. Redirection in IIS7 can be done but it requires &lt;a href="http://forums.iis.net/p/1100154/1675077.aspx#1675077"&gt;running
a command-line utility&lt;/a&gt;. Fortunately that worked.&lt;br&gt;
&lt;br&gt;
&lt;/span&gt; 
&lt;li class=MsoNormal style="MARGIN: 0in 0in 0pt; COLOR: #003300; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in"&gt;
&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"&gt;Unlike IIS, &lt;a href="http://ultidev.com/Products/Cassini/"&gt;UltiDev
Cassini Web Server&lt;/a&gt; underpinning WebGuide4 went through upgrade precess as smooth
as it can be.&lt;/span&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;o:p&gt;
&lt;font face="Times New Roman" color=#000000 size=3&gt;&amp;nbsp;&lt;/font&gt;
&lt;/o:p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=68d9cc66-8f77-49b0-9e35-16f729116120" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,68d9cc66-8f77-49b0-9e35-16f729116120.aspx</comments>
      <category>ASP.NET;Digital Home;IIS7;Vista</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=92fb8609-995a-4c0b-bd7b-48eb8182c366</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,92fb8609-995a-4c0b-bd7b-48eb8182c366.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,92fb8609-995a-4c0b-bd7b-48eb8182c366.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=92fb8609-995a-4c0b-bd7b-48eb8182c366</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <h5>Summary
</h5>
        <p>
UPDATE: This sample is an <strong><a href="http://www.codeplex.com/UltiDevWebBasedMP3Pl">open-source
project now</a></strong>.
</p>
        <p>
This article describes how to build a redistributable ASP.NET application that allows
users browse remote server's file system and pick folders with MP3 files
to be played by embedded Macromedia Flash-based MP3 player.
</p>
        <h5>
          <br />
Article Sources
</h5>
        <p>
          <a href="http://www.codeplex.com/UltiDevWebBasedMP3Pl/Release/ProjectReleases.aspx">Download
article's C# source</a> in a form of Visual Studio 2005 Solution comprising ASP.NET
application and a Setup Project. Unzip the archive to "C:\".
</p>
        <h5>
          <br />
End Result
</h5>
        <p>
          <a href="./content/binary/UltiDevMP3Player-2.PNG">
            <img height="155" alt="UltiDevMP3Player-2-Thumbnail.PNG" src="content/binary/UltiDevMP3Player-2-Thumbnail.PNG" width="177" border="0" />
          </a>   <a href="http://vladsnotes.hrybok.com/content/binary/UltiDevMP3Player.JPG"><img src="content/binary/UltiDevMP3Player-thumbnail.PNG" border="0" /></a><br /><br />
After building the project you will have an MSI-based setup package that
can be installed on virtually any Windows-based PC. Installed application will
be accessible from inside the LAN as an intranet application without having to install
IIS.
</p>
        <h5>
          <br />
Prerequisites
</h5>
        <p>
- Visual Studio 2005.<br />
- <a href="http://ultidev.com/download/">UltiDev Cassini Web Server for ASP.NET 2.0</a>.
UltiDev Cassini is packaged together with the application into the Setup.exe
so that the final application would not depend on IIS being present on target system.
</p>
        <h5>
          <br />
Let's Begin (Getting Ducks in a Row)
</h5>
        <p>
A few weeks ago I stumbled upon a great piece of free software:<a href="http://musicplayer.sourceforge.net/">Flash-based
XSPF-compatible MP3 player</a>. When embedded on a page, it can take playlist over
HTTP and play it. Second nice thing was that XSPF play list format has <a href="http://www.xspf.org/validation/xspf-1_0.2.xsd">XSD
schema available</a>. .NET Framework <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconxmlschemadefinitiontoolxsdexe.asp">xsd.exe
utility</a> allows easy conversion of XSD schemas into C# or VB.NET classes
incapsulating the structure of the data defined by the XSD, as well as implementing
XML serialization to and from XML files conforming to the schema. So I had an XSPF-compatible
MP3 player and a free code generating XSPF-compatible XML. That meant I could easily
create XSPF-compatible playlists on a fly. Only if I had free ID3 tag (MP3
file metadata) access API...
</p>
        <p>
Finding ID3v2 library for .NET <a href="PermaLink,guid,7017a381-30b2-4a94-bcd4-ac17c799cf40.aspx">was
harder than I expected</a>. However search was ultimately successful. The <a href="http://home.fuse.net/honnert/hundred/UltraID3Lib/"><font color="#547699">UltraID3Lib</font></a> ended
up being just what I needed. It's a nice library; may be just be a bit over the top
object-oriented.
</p>
        <p>
Final piece is <a href="http://ultidev.com/products/Cassini/">UltiDev Cassini Web
Server for ASP.NET 2.0</a>. It's necessary because first, it can be packaged and shipped
along with any ASP.NET application eliminating requirement for IIS. Second, unlike
IIS UltiDev Cassini service works under "Local System" account, which enables access
to any local file and folder on the server. One thing to note, while this is
quite convenient to have a web server running under powerful account, it may pose
a risk if the application is exposed on the web. It's best to work with the application inside
protected local area network.
</p>
        <p>
After you have <a href="http://download.ultidev.com/Products/Samples/UltiDevMusicPlayerSampleSource.zip">downloaded the
solution</a>, unzip it on C:\. It will create "C:\UltiDevMusicPlayerSample" folder.
If you want to put it in some other folder - you can do that too - simply adjust
your project debugging settings later to point to the correct application folder
(see below).
</p>
        <h5>
          <br />
Application Flow
</h5>
        <p>
- Application has a single page (Default.aspx) containing the player control
and file a system browser (Controls/PlayerControl.ascx and Controls/PlayerControl.ascx.cs). 
<br />
- After user selected a folder with MP3 files, file system browser tree gets hidden
and player control is re-rendered to point to the dynamically-generated
playlist representing selected folder.<br />
- Player control requests dynamic playlist and custom IHttpHandler (AppCode/PlaylistClass.cs
and AppCode/xspf.cs) serves XSPF-encoded playlist containing songs in the selected
folder. Playlist contains song information retrieved from songs' ID3v2 and ID3v1 MP3
tags.<br />
- Player plays songs one by one: requesting each one from the custom IHttpHandler
(Handlers/Song.ashx) serving songs from local file system. After song started
playing player also requests song album artwork (cover art) from custom IHttpHandler
(Handlers/CoverArt.ashx) which serves image extracted from song's ID3v2 tag.<br /></p>
        <h5>Debugging
</h5>
        <p>
I had troubles getting Visual Studio 2005 internal web server to serve Flash
component. I switched to UltiDev Cassini for debugging and that has solved the problem.
Debugging with UltiDev Cassini is probably a good idea anyway since the application
is eventually going to run under UltiDev Cassini. 
</p>
        <p>
To switch to UltiDev Cassini, bring up ASP.NET application's properties, select Start
Options of the left, and check "Start External Program" radio-button. Enter "C:\Program
Files\UltiDev\Cassini Web Server for ASP.NET 2.0\UltiDevCassinWebServer2.exe" as the
program to be used for debugging, and specify "/run c:\UltiDevMusicPlayerSample\WebApp
Default.aspx 4125" (no quotes) as command line arguments. If you have unzipped solution
to a folder other than "C:\", then you will need to modify c:\UltiDevMusicPlayerSample\WebApp
part of the command line arguments to point to the actual application location.<br /><img height="450" alt="VS2005DebugSettingsForMP3App.PNG" src="content/binary/VS2005DebugSettingsForMP3App.PNG" width="787" border="0" /></p>
        <h5>
          <br />
Setup Project
</h5>
        <p>
Unlike regular ASP.NET application, this application is using regular (non-web) setup
project for installer implementation. The reason for that is the Visual Studio web
setup project is actually IIS setup project. Since we are using UltiDev Cassini instead
of IIS, regular setup project is required instead.
</p>
        <p>
Setup project packs UltiDev Cassini into Setup.exe bootstrapper and ensures application
is registered with UltiDev Cassini during installation process and gets unregistered
during uninstallation.
</p>
        <p>
Creating a setup project for ASP.NET application bundled with UltiDev Cassini is not
complex, but if you need step-by-step guide, please refer to this <a href="http://ultidev.com/products/Cassini/CassiniRedistirbWithVS2005.htm">walk-through</a>.<br /><br /><strong>IMPORTANT:</strong> When installing the application, don't just click the
.MSI file. You will need to <strong>run Setup.exe</strong> to ensure UltiDev Cassini
web server gets installed on target system. This is especially true on Vista, where <a href="PermaLink,guid,5bbdbe9b-ffe9-491f-bc55-c8f13b371850.aspx">clicking
.MSI and running Setup.exe are not nearly as functionally close</a> as it used to
be on Windows XP.
</p>
        <p>
Build &amp; Enjoy!
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=92fb8609-995a-4c0b-bd7b-48eb8182c366" />
      </body>
      <title>Creating Web-Based MP3 Player using ASP.NET 2.0, UltiDev Cassini Web Server and Macromedia Flash Player</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,92fb8609-995a-4c0b-bd7b-48eb8182c366.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,92fb8609-995a-4c0b-bd7b-48eb8182c366.aspx</link>
      <pubDate>Mon, 05 Mar 2007 23:30:06 GMT</pubDate>
      <description>&lt;h5&gt;Summary
&lt;/h5&gt;
&lt;p&gt;
UPDATE: This sample is an &lt;strong&gt;&lt;a href="http://www.codeplex.com/UltiDevWebBasedMP3Pl"&gt;open-source
project now&lt;/a&gt;&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
This article describes how to build a redistributable ASP.NET application that allows
users browse remote server's&amp;nbsp;file system&amp;nbsp;and pick folders with MP3 files
to be played by embedded Macromedia Flash-based MP3 player.
&lt;/p&gt;
&lt;h5&gt;
&lt;br&gt;
Article Sources
&lt;/h5&gt;
&lt;p&gt;
&lt;a href="http://www.codeplex.com/UltiDevWebBasedMP3Pl/Release/ProjectReleases.aspx"&gt;Download
article's C# source&lt;/a&gt; in a form of Visual Studio 2005 Solution comprising ASP.NET
application and a Setup Project. Unzip the archive to "C:\".
&lt;/p&gt;
&lt;h5&gt;
&lt;br&gt;
End Result
&lt;/h5&gt;
&lt;p&gt;
&lt;a href="./content/binary/UltiDevMP3Player-2.PNG"&gt;&lt;img height=155 alt=UltiDevMP3Player-2-Thumbnail.PNG src="content/binary/UltiDevMP3Player-2-Thumbnail.PNG" width=177 border=0&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp; &lt;a href="http://vladsnotes.hrybok.com/content/binary/UltiDevMP3Player.JPG"&gt;&lt;img src="content/binary/UltiDevMP3Player-thumbnail.PNG" border=0&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
After&amp;nbsp;building the project&amp;nbsp;you will have&amp;nbsp;an MSI-based&amp;nbsp;setup package&amp;nbsp;that
can be installed on virtually any Windows-based PC.&amp;nbsp;Installed application will
be accessible from&amp;nbsp;inside the LAN as an intranet application without having to&amp;nbsp;install
IIS.
&lt;/p&gt;
&lt;h5&gt;
&lt;br&gt;
Prerequisites
&lt;/h5&gt;
&lt;p&gt;
- Visual Studio 2005.&lt;br&gt;
- &lt;a href="http://ultidev.com/download/"&gt;UltiDev Cassini Web Server for ASP.NET 2.0&lt;/a&gt;.
UltiDev Cassini is&amp;nbsp;packaged together with the application into the Setup.exe
so that the final application would not depend on IIS being present on target system.
&lt;/p&gt;
&lt;h5&gt;
&lt;br&gt;
Let's Begin (Getting Ducks in&amp;nbsp;a Row)
&lt;/h5&gt;
&lt;p&gt;
A few weeks ago I stumbled upon a great piece of free software:&lt;a href="http://musicplayer.sourceforge.net/"&gt;Flash-based
XSPF-compatible MP3 player&lt;/a&gt;. When embedded on a page, it can take playlist over
HTTP and play it. Second nice thing was that XSPF play list format has &lt;a href="http://www.xspf.org/validation/xspf-1_0.2.xsd"&gt;XSD
schema available&lt;/a&gt;. .NET Framework&amp;nbsp;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpconxmlschemadefinitiontoolxsdexe.asp"&gt;xsd.exe
utility&lt;/a&gt; allows easy conversion of XSD&amp;nbsp;schemas&amp;nbsp;into C# or VB.NET classes
incapsulating the structure of the data defined by&amp;nbsp;the XSD, as well as implementing
XML serialization to and from XML files conforming to the schema. So I had an XSPF-compatible
MP3 player and a free code generating XSPF-compatible XML. That meant I could easily
create XSPF-compatible playlists on a fly. Only if I had free&amp;nbsp;ID3 tag&amp;nbsp;(MP3
file metadata)&amp;nbsp;access&amp;nbsp;API...
&lt;/p&gt;
&lt;p&gt;
Finding ID3v2 library for .NET &lt;a href="PermaLink,guid,7017a381-30b2-4a94-bcd4-ac17c799cf40.aspx"&gt;was
harder than I expected&lt;/a&gt;. However search was ultimately successful. The &lt;a href="http://home.fuse.net/honnert/hundred/UltraID3Lib/"&gt;&lt;font color=#547699&gt;UltraID3Lib&lt;/font&gt;&lt;/a&gt;&amp;nbsp;ended
up being just what I needed. It's a nice library; may be just be a bit over the top
object-oriented.
&lt;/p&gt;
&lt;p&gt;
Final piece is &lt;a href="http://ultidev.com/products/Cassini/"&gt;UltiDev Cassini Web
Server for ASP.NET 2.0&lt;/a&gt;. It's necessary because first, it can be packaged and shipped
along with any ASP.NET application eliminating requirement for IIS. Second, unlike
IIS UltiDev Cassini service works under "Local System" account, which enables access
to any local file and folder on the server.&amp;nbsp;One thing to note, while this is
quite convenient to have a web server running under powerful account, it may pose
a risk if the application is exposed on the web. It's best to work with the application&amp;nbsp;inside
protected local area network.
&lt;/p&gt;
&lt;p&gt;
After you have &lt;a href="http://download.ultidev.com/Products/Samples/UltiDevMusicPlayerSampleSource.zip"&gt;downloaded&amp;nbsp;the
solution&lt;/a&gt;, unzip it on C:\. It will create "C:\UltiDevMusicPlayerSample" folder.
If you want to put it in some other folder - you can do that too -&amp;nbsp;simply adjust
your&amp;nbsp;project debugging settings later to point to the correct application folder
(see below).
&lt;/p&gt;
&lt;h5&gt;
&lt;br&gt;
Application Flow
&lt;/h5&gt;
&lt;p&gt;
- Application&amp;nbsp;has a single page (Default.aspx)&amp;nbsp;containing the player control
and&amp;nbsp;file a system browser (Controls/PlayerControl.ascx and Controls/PlayerControl.ascx.cs). 
&lt;br&gt;
- After user selected a folder with MP3 files, file system browser tree gets hidden
and&amp;nbsp;player control&amp;nbsp;is re-rendered to point to the dynamically-generated
playlist representing selected folder.&lt;br&gt;
- Player control requests dynamic playlist and custom IHttpHandler (AppCode/PlaylistClass.cs
and AppCode/xspf.cs)&amp;nbsp;serves XSPF-encoded playlist containing songs in the selected
folder. Playlist contains song information retrieved from songs' ID3v2 and ID3v1 MP3
tags.&lt;br&gt;
- Player plays songs one by one: requesting each one from the custom IHttpHandler
(Handlers/Song.ashx)&amp;nbsp;serving songs from local file system. After song started
playing player also requests song album artwork (cover art) from custom IHttpHandler
(Handlers/CoverArt.ashx)&amp;nbsp;which serves image extracted from song's ID3v2 tag.&lt;br&gt;
&lt;/p&gt;
&lt;h5&gt;Debugging
&lt;/h5&gt;
&lt;p&gt;
I had troubles&amp;nbsp;getting Visual Studio 2005 internal web server to serve Flash
component. I switched to UltiDev Cassini for debugging and that has solved the problem.
Debugging with UltiDev Cassini is probably a good idea anyway since the application
is eventually going to run&amp;nbsp;under UltiDev Cassini. 
&lt;/p&gt;
&lt;p&gt;
To switch to UltiDev Cassini, bring up ASP.NET application's properties, select Start
Options of the left, and check "Start External Program" radio-button. Enter "C:\Program
Files\UltiDev\Cassini Web Server for ASP.NET 2.0\UltiDevCassinWebServer2.exe" as the
program to be&amp;nbsp;used for debugging, and specify "/run c:\UltiDevMusicPlayerSample\WebApp
Default.aspx 4125" (no quotes) as command line arguments. If you have unzipped solution
to a folder other than "C:\", then you will need to modify c:\UltiDevMusicPlayerSample\WebApp
part of the command line arguments to point to the actual application location.&lt;br&gt;
&lt;img height=450 alt=VS2005DebugSettingsForMP3App.PNG src="content/binary/VS2005DebugSettingsForMP3App.PNG" width=787 border=0&gt;
&lt;/p&gt;
&lt;h5&gt;
&lt;br&gt;
Setup Project
&lt;/h5&gt;
&lt;p&gt;
Unlike regular ASP.NET application, this application is using regular (non-web) setup
project for installer implementation. The reason for that is the Visual Studio web
setup project is actually IIS setup project. Since we are using UltiDev Cassini instead
of IIS, regular setup project is required instead.
&lt;/p&gt;
&lt;p&gt;
Setup project packs UltiDev Cassini into Setup.exe bootstrapper and ensures application
is registered with UltiDev Cassini during installation process and gets unregistered
during uninstallation.
&lt;/p&gt;
&lt;p&gt;
Creating a setup project for ASP.NET application bundled with UltiDev Cassini is not
complex, but if you need step-by-step guide, please refer to this &lt;a href="http://ultidev.com/products/Cassini/CassiniRedistirbWithVS2005.htm"&gt;walk-through&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
&lt;strong&gt;IMPORTANT:&lt;/strong&gt; When installing the application, don't just click the
.MSI file. You will need to &lt;strong&gt;run Setup.exe&lt;/strong&gt; to ensure UltiDev Cassini
web server gets installed on target system. This is especially true on Vista, where &lt;a href="PermaLink,guid,5bbdbe9b-ffe9-491f-bc55-c8f13b371850.aspx"&gt;clicking
.MSI and running Setup.exe are not nearly as functionally close&lt;/a&gt; as it used to
be on Windows XP.
&lt;/p&gt;
&lt;p&gt;
Build &amp;amp; Enjoy!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=92fb8609-995a-4c0b-bd7b-48eb8182c366" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,92fb8609-995a-4c0b-bd7b-48eb8182c366.aspx</comments>
      <category>ASP.NET;Cassini Web Server;Digital Home;Sofware Development</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=2884fdba-57bb-4c69-b5ff-06b1e4e9c2d8</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,2884fdba-57bb-4c69-b5ff-06b1e4e9c2d8.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,2884fdba-57bb-4c69-b5ff-06b1e4e9c2d8.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=2884fdba-57bb-4c69-b5ff-06b1e4e9c2d8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Recently I've been working on the small ASP.NET 2.0 app that has a page containing
Macromedia (now Adobe) Flash object. When I tried debugging it with Visual Studio
2005 and its internal web server, the Flash piece has never been loaded by Internet
Explorer - I am not even sure whether it was the Flash player that failed to load
or the .SWF file. I wonder if anyone else had this issue. I could not check which
component was not loaded because WebDev.WebServer2.exe serves only local applications,
and I could not use an http tracer to see which request gets stuck.
</p>
        <p>
I worked around the issue by switching to our own <a href="http://ultidev.com/products/Cassini/index.htm">UltiDev
Cassini for ASP.NET 2.0</a> for <a href="http://ultidev.com/products/Cassini/CassiniDevGuide.htm#Debugging">application
debugging</a>. It served all the bits and pieces required by Flash without
a hitch.
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=2884fdba-57bb-4c69-b5ff-06b1e4e9c2d8" />
      </body>
      <title>Problem with Macromedia (Adobe) Flash Object on the ASP.NET Page Served by Visual Studio 2005 WebDev.WebServer2.exe</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,2884fdba-57bb-4c69-b5ff-06b1e4e9c2d8.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,2884fdba-57bb-4c69-b5ff-06b1e4e9c2d8.aspx</link>
      <pubDate>Mon, 05 Mar 2007 21:22:37 GMT</pubDate>
      <description>&lt;p&gt;
Recently I've been working on the small ASP.NET 2.0 app that has a page containing
Macromedia (now Adobe) Flash object. When I tried debugging it with Visual Studio
2005 and its internal web server, the Flash piece&amp;nbsp;has never been loaded by Internet
Explorer - I am not even sure whether it was the Flash player that failed to load
or the .SWF file. I wonder if anyone else had this issue. I could&amp;nbsp;not check which
component was not loaded because WebDev.WebServer2.exe serves only local applications,
and I could not use&amp;nbsp;an http tracer&amp;nbsp;to see which request gets stuck.
&lt;/p&gt;
&lt;p&gt;
I worked around&amp;nbsp;the issue by&amp;nbsp;switching to&amp;nbsp;our own &lt;a href="http://ultidev.com/products/Cassini/index.htm"&gt;UltiDev
Cassini for ASP.NET 2.0&lt;/a&gt; for &lt;a href="http://ultidev.com/products/Cassini/CassiniDevGuide.htm#Debugging"&gt;application
debugging&lt;/a&gt;. It served all the bits and pieces&amp;nbsp;required by&amp;nbsp;Flash without
a hitch.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=2884fdba-57bb-4c69-b5ff-06b1e4e9c2d8" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,2884fdba-57bb-4c69-b5ff-06b1e4e9c2d8.aspx</comments>
      <category>ASP.NET;Cassini Web Server;IIS7;Sofware Development;Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://vladsnotes.hrybok.com/Trackback.aspx?guid=80e3b19d-aa13-4dfa-8690-30ef7641cb2e</trackback:ping>
      <pingback:server>http://vladsnotes.hrybok.com/pingback.aspx</pingback:server>
      <pingback:target>http://vladsnotes.hrybok.com/PermaLink,guid,80e3b19d-aa13-4dfa-8690-30ef7641cb2e.aspx</pingback:target>
      <dc:creator>Vlad Hrybok</dc:creator>
      <wfw:comment>http://vladsnotes.hrybok.com/CommentView,guid,80e3b19d-aa13-4dfa-8690-30ef7641cb2e.aspx</wfw:comment>
      <wfw:commentRss>http://vladsnotes.hrybok.com/SyndicationService.asmx/GetEntryCommentsRss?guid=80e3b19d-aa13-4dfa-8690-30ef7641cb2e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Here's how it works: for the last two years we at <a href="http://UltiDev.com">UltiDev
LLC</a> work mainly on <a href="http://UltiDev.com/Products/HttpVPN/">HttpVPN</a> -
our flagship product and the main reason why our company exists. Once upon a
time we've decided that making a simple redistributable web server software would
be a great value-added piece completing HttpVPN offering and allowing us
to probe prospective market for HttpVPN, gather contact information of people who
may by interested in HttpVPN and setup our QA, build and release processes along
the way. The experiment turned out to be as successful and we hoped it would be. We've
got about 15,000 (and counting) installed <a href="http://UltiDev.com/Products/Cassini/">UltiDev
Cassini Web Server</a> runtimes worldwide and we are receiving overwhelmingly positive
feedback from users. All this also means that about every six months we have our Cassini
task tracker full enough to suspend HttpVPN work for a few weeks and do another release
or UltiDev Cassini. This time was no exception.
</p>
        <p>
Although we always hope to keep our Cassini mid-version upgrade development cycle
limited to three weeks, it took us usual five weeks to fix, test, fix again, test
again and release the <a href="http://www.ultidev.com/Products/Cassini/CassiniReleaseNotes.htm">latest
version</a> of UltiDev Cassini Web Server. This release had two main points of focus:
to eliminate all known installation/registration hurdles and to make UltiDev Cassini
compatible with all 64-bit Windows platforms. 64 bit OSes are gaining popularity
very rapidly thanks to the fact that most of the recent (and even not so recent -
think Pentium D) CPUs from AMD and Intel are x64-compatible. Windows Vista comes in
32- and 64-bit versions right from the start, while existing Windows XP Pro x64 and
Windows 2003 Server 64-bit were somewhat obscure because they were released before
64-bit CPUs hit the mainstream. Nowadays it's pretty much impossible to buy a CPU
that does not have x64 compatibility. Hoping to please Vista 32 and 64 bit users we
made sure that our latest version of Cassini runs smoothly on all the latest multicore
32 and 64 bit CPUs and supports entire (reasonable) line of Windows operating systems:
from Windows 2000 to Vista.
</p>
        <p>
Now, whether you own an older version of our tiny but powerful UltiDev Cassini, or
you never tried it - go ahead and <a href="http://www.ultidev.com/download/">download
the latest version</a>. If you owned old version - most of the known issues
will go away (or if you had none you will be less likely to face issues in the future).
If you never saw our Cassini - it's a perfect time to spend 20 minutes on something
you probably will go "wow!" about. Check it out now!
</p>
        <img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=80e3b19d-aa13-4dfa-8690-30ef7641cb2e" />
      </body>
      <title>Next version of UltiDev Cassini ASP.NET Web Server is available for download!</title>
      <guid isPermaLink="false">http://vladsnotes.hrybok.com/PermaLink,guid,80e3b19d-aa13-4dfa-8690-30ef7641cb2e.aspx</guid>
      <link>http://vladsnotes.hrybok.com/PermaLink,guid,80e3b19d-aa13-4dfa-8690-30ef7641cb2e.aspx</link>
      <pubDate>Sat, 10 Feb 2007 20:57:09 GMT</pubDate>
      <description>&lt;p&gt;
Here's how it works: for the last two years we at &lt;a href="http://UltiDev.com"&gt;UltiDev
LLC&lt;/a&gt; work mainly on &lt;a href="http://UltiDev.com/Products/HttpVPN/"&gt;HttpVPN&lt;/a&gt; -
our flagship&amp;nbsp;product and the main reason why our company exists. Once upon a
time we've decided that making a simple redistributable web server software would
be a&amp;nbsp;great value-added piece&amp;nbsp;completing HttpVPN offering and allowing us
to probe prospective market for HttpVPN, gather contact information of people who
may&amp;nbsp;by interested in HttpVPN and setup our QA, build and release processes along
the way. The experiment turned out to be as successful and we hoped it would be. We've
got about 15,000 (and counting) installed &lt;a href="http://UltiDev.com/Products/Cassini/"&gt;UltiDev
Cassini Web Server&lt;/a&gt; runtimes worldwide and we are receiving overwhelmingly positive
feedback from users. All this also means that about every six months we have our Cassini
task tracker full enough to suspend HttpVPN work for a few weeks and do another release
or UltiDev Cassini. This time was no exception.
&lt;/p&gt;
&lt;p&gt;
Although we always hope to keep our Cassini&amp;nbsp;mid-version upgrade development cycle
limited to three&amp;nbsp;weeks, it took us usual five weeks to fix, test, fix again,&amp;nbsp;test
again and release the &lt;a href="http://www.ultidev.com/Products/Cassini/CassiniReleaseNotes.htm"&gt;latest
version&lt;/a&gt; of UltiDev Cassini Web Server. This release had two main points of focus:
to eliminate all known installation/registration hurdles and to make UltiDev Cassini
compatible with all 64-bit Windows platforms. 64 bit&amp;nbsp;OSes&amp;nbsp;are gaining popularity
very rapidly thanks to the fact that most of the recent (and even not so recent -
think Pentium D) CPUs from AMD and Intel are x64-compatible. Windows Vista comes in
32- and 64-bit versions right from the start, while existing Windows XP Pro x64 and
Windows 2003 Server 64-bit were somewhat obscure because they were released before
64-bit CPUs hit the mainstream. Nowadays it's pretty much impossible to buy a CPU
that does not have x64 compatibility. Hoping to please Vista 32 and 64 bit users we
made sure that our latest version of Cassini runs smoothly on all the latest multicore
32 and 64 bit CPUs and supports entire (reasonable) line of Windows operating systems:
from Windows 2000 to Vista.
&lt;/p&gt;
&lt;p&gt;
Now, whether you own an older version of our tiny but powerful UltiDev Cassini, or
you never tried it - go ahead and &lt;a href="http://www.ultidev.com/download/"&gt;download
the latest version&lt;/a&gt;. If you owned old&amp;nbsp;version -&amp;nbsp;most of the known issues
will go away (or if you had none you will be less likely to face issues in the future).
If you never saw our Cassini - it's a perfect time to spend 20 minutes on something
you probably will go "wow!" about. Check it out now!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://vladsnotes.hrybok.com/aggbug.ashx?id=80e3b19d-aa13-4dfa-8690-30ef7641cb2e" /&gt;</description>
      <comments>http://vladsnotes.hrybok.com/CommentView,guid,80e3b19d-aa13-4dfa-8690-30ef7641cb2e.aspx</comments>
      <category>ASP.NET;Cassini Web Server;Digital Home;Visual Studio</category>
    </item>
  </channel>
</rss>