<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>René Stein - ASP.NET</title>
    <link>http://blog.renestein.net/</link>
    <description>Názory vzešlé z mesaliance humanitní skepse a technologického optimismu</description>
    <image>
      <url>http://blog.renestein.net/themes/discreetBlogBlue/SpotImages/sfinga_rss.jpg</url>
      <title>René Stein - ASP.NET</title>
      <link>http://blog.renestein.net/</link>
    </image>
    <language>cs-CZ</language>
    <copyright>René Stein</copyright>
    <lastBuildDate>Mon, 21 Mar 2011 12:11:41 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.7174.0</generator>
    <managingEditor>rene@renestein.net</managingEditor>
    <webMaster>rene@renestein.net</webMaster>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=7aff293a-4afa-4efa-8bfa-78500f267cfa</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,7aff293a-4afa-4efa-8bfa-78500f267cfa.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,7aff293a-4afa-4efa-8bfa-78500f267cfa.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7aff293a-4afa-4efa-8bfa-78500f267cfa</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Přibližně před rokem jsem u dvou firem začínal sérii technologických kurzů subjektivním
shrnutím změn (nejen) v aplikacích psaných v .Net Frameworku. Nedávno jsme ji s kolegou
náhodou otevřeli a pobavili jsme se nad tím, jak je rok v IT stále dlouhá doba a že
zde dvojnásobně platí “tempus fugit”. Napadlo mě, že se nad prezentací možná se pobaví
i někdo další, hlavně v pasážích, kde jemně naznačuju zálibu Microsoftu v zařezávání
technologií.<img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blog.renestein.net/content/binary/Windows-Live-Writer/de5bdc4acd85_ADFB/wlEmoticon-smile_2.png" /></p>
        <p>
U prezentace je třeba mít na paměti:
</p>
        <ol>
          <li>
Jedná se jen o osnovu “přehledové“ a cca dvouhodinové přednášky.<br /><br /></li>
          <li>
Témata, typy projektů a technologie jsou v přednášce voleny podle zájmu zákazníka.<br /><br /></li>
          <li>
Snažil jsem se nebýt hned  v této úvodní přednášce příliš ostrý a konfliktní.<img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blog.renestein.net/content/binary/Windows-Live-Writer/de5bdc4acd85_ADFB/wlEmoticon-smile_2.png" /><br /><br /></li>
          <li>
Zvolená témata se týkala oblastí, které jsme v dalších dnech probíraly detailněji
na konkrétních projektech vytvořených na návazných kurzech. Po pár zkušenostech si
myslím, že jediný smyslupný kurz zabývající se technologií či programovacím jazykem
je ten, na kterém píšete před účastníky kód. Tato přednáška byla koncipována jako
motivační úvod k dalším tématům.</li>
        </ol>
        <div style="width: 425px" id="__ss_7332936">
          <strong style="margin: 12px 0px 4px; display: block">
            <a title="Moderni trendy ve_vyvoji_aplikaci" href="http://www.slideshare.net/RENESTEIN/moderni-trendy-vevyvojiaplikaci">Moderni
trendy ve_vyvoji_aplikaci</a>
          </strong>
          <object id="__sse7332936" width="425" height="355">
            <param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=modernitrendyvevyvojiaplikaci-110321070156-phpapp01&amp;stripped_title=moderni-trendy-vevyvojiaplikaci&amp;userName=RENESTEIN" />
            <param name="allowFullScreen" value="true" />
            <param name="allowScriptAccess" value="always" />
            <embed name="__sse7332936" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=modernitrendyvevyvojiaplikaci-110321070156-phpapp01&amp;stripped_title=moderni-trendy-vevyvojiaplikaci&amp;userName=RENESTEIN" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355">
            </embed>
          </object>
          <div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px">View
more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/RENESTEIN">RENESTEIN</a>.
</div>
        </div>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=7aff293a-4afa-4efa-8bfa-78500f267cfa" />
      </body>
      <title>Prezentace Modern&amp;iacute; trendy ve v&amp;yacute;voji aplikac&amp;iacute;</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,7aff293a-4afa-4efa-8bfa-78500f267cfa.aspx</guid>
      <link>http://blog.renestein.net/Prezentace+Moderniacute+Trendy+Ve+Vyacutevoji+Aplikaciacute.aspx</link>
      <pubDate>Mon, 21 Mar 2011 12:11:41 GMT</pubDate>
      <description>&lt;p&gt;
Přibližně před rokem jsem u dvou firem začínal sérii technologických kurzů subjektivním
shrnutím změn (nejen) v aplikacích psaných v .Net Frameworku. Nedávno jsme ji s kolegou
náhodou otevřeli a pobavili jsme se nad tím, jak je rok v IT stále dlouhá doba a že
zde dvojnásobně platí “tempus fugit”. Napadlo mě, že se nad prezentací možná se pobaví
i někdo další, hlavně v pasážích, kde jemně naznačuju zálibu Microsoftu v zařezávání
technologií.&lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blog.renestein.net/content/binary/Windows-Live-Writer/de5bdc4acd85_ADFB/wlEmoticon-smile_2.png"&gt;
&lt;/p&gt;
&lt;p&gt;
U prezentace je třeba mít na paměti:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Jedná se jen o osnovu “přehledové“ a cca dvouhodinové přednášky.&lt;br&gt;
&lt;br&gt;
&lt;li&gt;
Témata, typy projektů a technologie jsou v přednášce voleny podle zájmu zákazníka.&lt;br&gt;
&lt;br&gt;
&lt;li&gt;
Snažil jsem se nebýt hned&amp;nbsp; v této úvodní přednášce příliš ostrý a konfliktní.&lt;img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blog.renestein.net/content/binary/Windows-Live-Writer/de5bdc4acd85_ADFB/wlEmoticon-smile_2.png"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;li&gt;
Zvolená témata se týkala oblastí, které jsme v dalších dnech probíraly detailněji
na konkrétních projektech vytvořených na návazných kurzech. Po pár zkušenostech si
myslím, že jediný smyslupný kurz zabývající se technologií či programovacím jazykem
je ten, na kterém píšete před účastníky kód. Tato přednáška byla koncipována jako
motivační úvod k dalším tématům.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="width: 425px" id="__ss_7332936"&gt;&lt;strong style="margin: 12px 0px 4px; display: block"&gt;&lt;a title="Moderni trendy ve_vyvoji_aplikaci" href="http://www.slideshare.net/RENESTEIN/moderni-trendy-vevyvojiaplikaci"&gt;Moderni
trendy ve_vyvoji_aplikaci&lt;/a&gt;&lt;/strong&gt;
&lt;object id="__sse7332936" width="425" height="355"&gt;
&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=modernitrendyvevyvojiaplikaci-110321070156-phpapp01&amp;amp;stripped_title=moderni-trendy-vevyvojiaplikaci&amp;amp;userName=RENESTEIN" /&gt;
&lt;param name="allowFullScreen" value="true" /&gt;
&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed name="__sse7332936" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=modernitrendyvevyvojiaplikaci-110321070156-phpapp01&amp;amp;stripped_title=moderni-trendy-vevyvojiaplikaci&amp;amp;userName=RENESTEIN" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"&gt;View
more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/RENESTEIN"&gt;RENESTEIN&lt;/a&gt;.
&lt;/div&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=7aff293a-4afa-4efa-8bfa-78500f267cfa" /&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,7aff293a-4afa-4efa-8bfa-78500f267cfa.aspx</comments>
      <category>.NET Framework</category>
      <category>ASP.NET</category>
      <category>C#</category>
      <category>Compact .Net Framework</category>
      <category>LINQ</category>
      <category>RX Extensions</category>
      <category>Silverlight</category>
      <category>Web Services</category>
      <category>Windows Forms</category>
      <category>WP7</category>
    </item>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=2571bdba-d854-44f6-8874-eb90eaeb7182</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,2571bdba-d854-44f6-8874-eb90eaeb7182.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,2571bdba-d854-44f6-8874-eb90eaeb7182.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=2571bdba-d854-44f6-8874-eb90eaeb7182</wfw:commentRss>
      <title>LINQ II - přetypovávání i vnořených anonymních datových typů z jiné assembly</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,2571bdba-d854-44f6-8874-eb90eaeb7182.aspx</guid>
      <link>http://blog.renestein.net/LINQ+II+P%c5%99etypov%c3%a1v%c3%a1n%c3%ad+I+Vno%c5%99en%c3%bdch+Anonymn%c3%adch+Datov%c3%bdch+Typ%c5%af+Z+Jin%c3%a9+Assembly.aspx</link>
      <pubDate>Fri, 09 May 2008 08:09:26 GMT</pubDate>
      <description>V předchozím spotu jsem byl schopen pracovat s anonymními datovými typy, i když byly dotazy a výsledné sady dat vytvořeny v jiné assembly. Odstranění vrozené xenofobie v praxi.:)

Náš kód ale vygeneruje výjimku, jestliže anonymní datový typ z jiné assembly obsahuje další vnořené anonymní datové typy jako v následujícím upraveném příkladu. Vlastnost InnerAT vrací další anonymní datový typ, který  pro zajímavost obsahuje odkaz ještě na další anonymní datový typ.&lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=2571bdba-d854-44f6-8874-eb90eaeb7182"/&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,2571bdba-d854-44f6-8874-eb90eaeb7182.aspx</comments>
      <category>.NET Framework</category>
      <category>ASP.NET</category>
      <category>Compact .Net Framework</category>
      <category>LINQ</category>
      <category>Windows Forms</category>
    </item>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=6cb35bf4-f660-440a-aaec-d96f85b1d594</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,6cb35bf4-f660-440a-aaec-d96f85b1d594.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,6cb35bf4-f660-440a-aaec-d96f85b1d594.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=6cb35bf4-f660-440a-aaec-d96f85b1d594</wfw:commentRss>
      <title>LINQ - anonymní typ deklarovaný v jedné assembly dostupný v metodách další assembly?</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,6cb35bf4-f660-440a-aaec-d96f85b1d594.aspx</guid>
      <link>http://blog.renestein.net/LINQ+Anonymn%c3%ad+Typ+Deklarovan%c3%bd+V+Jedn%c3%a9+Assembly+Dostupn%c3%bd+V+Metod%c3%a1ch+Dal%c5%a1%c3%ad+Assembly.aspx</link>
      <pubDate>Thu, 08 May 2008 14:00:43 GMT</pubDate>
      <description>Anonymní datové typy v LINQu nelze použít jako návratový typ z metody a jediný způsob, jak anonymní typ z metody předat, je použít jako návratovou hodnotu typ object, protože v .Net Frameworku - jak je všeobecně známo - všechny třídy přímo či nepřímo dědí z třídy Object. Navíc platí, že anonymní typ je kompilátorem vždy deklarován jako internal a jeho použití je striktně omezeno na jednu assembly.

Jde o rozumné omezení a anonymní datové typy bychom neměli zneužívat k nesmyslům typu "hezká syntaxe pro generování objektů Dictionary", které si našly cestu i do připravovaného (a už dnes "přehypovaneného") MVC frameworku pro ASP.NET.&lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=6cb35bf4-f660-440a-aaec-d96f85b1d594"/&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,6cb35bf4-f660-440a-aaec-d96f85b1d594.aspx</comments>
      <category>.NET Framework</category>
      <category>ASP.NET</category>
      <category>Compact .Net Framework</category>
      <category>LINQ</category>
      <category>Windows Forms</category>
    </item>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=a0b1d713-b107-47ee-b793-29af338143f2</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,a0b1d713-b107-47ee-b793-29af338143f2.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,a0b1d713-b107-47ee-b793-29af338143f2.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a0b1d713-b107-47ee-b793-29af338143f2</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>ASP.NET - jednoduchý přístup z kódu na webovém formuláři k prvkům deklarovaným v šabloně</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,a0b1d713-b107-47ee-b793-29af338143f2.aspx</guid>
      <link>http://blog.renestein.net/ASPNET+Jednoduch%c3%bd+P%c5%99%c3%adstup+Z+K%c3%b3du+Na+Webov%c3%a9m+Formul%c3%a1%c5%99i+K+Prvk%c5%afm+Deklarovan%c3%bdm+V+%c5%a0ablon%c4%9b.aspx</link>
      <pubDate>Mon, 09 Oct 2006 14:42:53 GMT</pubDate>
      <description> ASP.NET 1.x jsme při přístupu k prvkům v šabloně (šablonou rozumíme vlastnost serverového ovládacího prvku typu ITemplate) museli zavolat metodu FindControl a předat ji Id hledaného prvku. A protože návratovou hodnotou metody FindControl je pouze rozhraní třídy Control, byli jsme nuceni přetypovávat na odvozený ovládací prvek (např. Label, Button). &lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=a0b1d713-b107-47ee-b793-29af338143f2"/&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,a0b1d713-b107-47ee-b793-29af338143f2.aspx</comments>
      <category>.NET Framework</category>
      <category>ASP.NET</category>
    </item>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=5f0904c6-f52d-46b0-87dd-7d65a19fcca5</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,5f0904c6-f52d-46b0-87dd-7d65a19fcca5.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,5f0904c6-f52d-46b0-87dd-7d65a19fcca5.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=5f0904c6-f52d-46b0-87dd-7d65a19fcca5</wfw:commentRss>
      <title>Sloupec v GridView s potvrzením vymazání záznamu (na klientovi)  II - sloupec se šablonou</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,5f0904c6-f52d-46b0-87dd-7d65a19fcca5.aspx</guid>
      <link>http://blog.renestein.net/Sloupec+V+GridView+S+Potvrzen%c3%adm+Vymaz%c3%a1n%c3%ad+Z%c3%a1znamu+Na+Klientovi+II+Sloupec+Se+%c5%a0ablonou.aspx</link>
      <pubDate>Thu, 20 Jul 2006 12:08:06 GMT</pubDate>
      <description>V prvním spotu jsem ukázal, jak napsat pro GridView nový sloupec zobrazující tlačítko pro vymazání záznamu. Po stisknutí tlačítka se zobrazilo okno vytvořené v Javascriptu, ve kterém byl uživatel požádán o potvrzení vymazání záznamu. Náš nový sloupec byl potomkem všem důvěrně známého sloupce ButtonField. Jak jsme ale viděli v kódu třídy DeleteButtonColumn, neobešli jsme se bez několika ne úplně čistých praktik ...

&lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=5f0904c6-f52d-46b0-87dd-7d65a19fcca5"/&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,5f0904c6-f52d-46b0-87dd-7d65a19fcca5.aspx</comments>
      <category>ASP.NET</category>
    </item>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=4c55c954-22ad-434a-af84-60c7097cf6e5</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,4c55c954-22ad-434a-af84-60c7097cf6e5.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,4c55c954-22ad-434a-af84-60c7097cf6e5.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=4c55c954-22ad-434a-af84-60c7097cf6e5</wfw:commentRss>
      <title>Sloupec v GridView s potvrzením vymazání záznamu (na klientovi)</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,4c55c954-22ad-434a-af84-60c7097cf6e5.aspx</guid>
      <link>http://blog.renestein.net/Sloupec+V+GridView+S+Potvrzen%c3%adm+Vymaz%c3%a1n%c3%ad+Z%c3%a1znamu+Na+Klientovi.aspx</link>
      <pubDate>Fri, 19 May 2006 16:44:04 GMT</pubDate>
      <description>Jestliže chcete mít v GridView sloupec, který uživatele požádá na klientovi (s využitím Javascriptu) o potvrzeni smazání záznamu, je doporučeno používat TemplateField, jehož šablona ItemTemplate obsahuje ve vlastnosti OnClientClick tlačítka klientský kód.&lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=4c55c954-22ad-434a-af84-60c7097cf6e5"/&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,4c55c954-22ad-434a-af84-60c7097cf6e5.aspx</comments>
      <category>.NET Framework</category>
      <category>ASP.NET</category>
    </item>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=4ae1e501-e9db-4d64-af3c-c91fc489d679</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,4ae1e501-e9db-4d64-af3c-c91fc489d679.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,4ae1e501-e9db-4d64-af3c-c91fc489d679.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=4ae1e501-e9db-4d64-af3c-c91fc489d679</wfw:commentRss>
      <title>Svůdná asynchronní volání v ASP.NET 2.0</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,4ae1e501-e9db-4d64-af3c-c91fc489d679.aspx</guid>
      <link>http://blog.renestein.net/Sv%c5%afdn%c3%a1+Asynchronn%c3%ad+Vol%c3%a1n%c3%ad+V+ASPNET+20.aspx</link>
      <pubDate>Wed, 26 May 2004 19:11:00 GMT</pubDate>
      <description>
		&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
ASP.NET 2.0 ulehčí vývojářům práci nativní podporou asynchronních volání. V aktuální
verzi 1.1 je prováděno pouze synchronní odesílání formuláře („postback“) &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Při
větším množství „postbacků“, které musíme používat například proto, že plníme některé
serverové ovládací prvky podle uživatelem zadaných hodnot v jiných ovládacích prvcích,
rychle odhalíme méně příjemné aspekty „postbacků“. Uživatelé, zvláště ti s pomalejším
připojením, takové aplikace nepoužívají rádi, protože jim obrazovka neustále nepříjemně
problikává nebo musejí nezanedbatelnou dobu čekat na nové zobrazení stránky.
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
Řešení je mnoho. Ti troufalejší z nás na stránce uloží všechna data bez ohledu na
to, že každý uživatel využije jen malý zlomek. Podmíněné plnění prvků je zajištěno &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;JavaScriptem. &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;Nevýhodou
je, že uživatelé zbytečně stahují do svého prohlížeče i data, která nikdy nepoužijí.
Při větším objemu dat je toto řešení nepřijatelné.
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
Lepším řešením je například asynchronní volání WWW služby z JavaScriptu nebo využití
objektu XmlHttp. Uživatel pracuje a aplikace na pozadí stahuje potřebná data ze serveru.
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
Do ASP.NET 2.0 bylo přidáno nové API pro asynchronní volání, které vývojáře zbavuje
nutnosti znát detailně principy a způsoby zajištění &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;asynchronního
volání. Interně ale toto API (alespoň v IE) stále pracuje s komponentou XmlHttp.
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1"&gt;
Jak nové API vypadá?
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1"&gt;
Serverový ovládací prvek musí implementovat rozhraní ICallBackEventHandler. 
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/i&gt; 
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;interface ICallBackEventHandler&lt;o:p&gt;&lt;/o:p&gt;
&lt;/i&gt; 
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt; &lt;span lang="EN-US" style="mso-ansi-language: EN-US"&gt;{&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; &lt;/i&gt; 
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 35.4pt"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;string RaiseCallbackEvent(string eventArgument);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/i&gt; 
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;}&lt;o:p&gt;&lt;/o:p&gt;
&lt;/i&gt; 
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
Metoda RaiseCallBackEvent přijímá jeden argument typu string s názvem eventArgument,
který je zaslán z klientské funkce na stránce v prohlížeči. Může se jednat například
o identifikátor kategorie, jejíž výrobky mají být načteny. Metoda RaiseCallBackEvent
načte data, ať už z databáze, XML souboru nebo jiného datového zdroje, a ve formě
řetězce je vrátí. Návratová hodnota metody je zaslána do prohlížeče, který ji zobrazí
nebo jinak zpracuje.
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
Serverový ovládací prvek si při svém renderování vyžádá od stránky kód v JavaScriptu,
který z klienta &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;asynchronně zavolá aplikační
logiku na serveru. Do třídy Page byla přidána přetížená metoda&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;GetCallbackEventReference.
Zde je jedna z jejích verzí. 
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; mso-outline-level: 1"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;GetCallbackEventReference(Control control,
string&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;content, string &lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;callback,
string context);&lt;o:p&gt;&lt;/o:p&gt;
&lt;/i&gt; 
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/i&gt; 
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
V argumentu control&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;metoda dostane odkaz na
serverový ovládací prvek, pro nějž chceme vygenerovat skript, argument content je
názvem metody v JavaScriptu, která poskytne parametr (eventArgument), se kterým pracuje
výše popsaná metoda RaiseCallBackEvent. V argumentu callback je název další funkce
v JavaScriptu, které má být předán výsledek vrácený metodou RaiseCallBackEvent. Tato
fukce se většinou postará o aktualizaci uživatelského rozhraní. V argumentu context
je název proměnné v JavaScriptu, kterou používáme pro odlišení různých asynchronních
volání. Hodnota proměnné context není nikdy zasílána na server, používají ji jen funkce
na klientovi. 
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
Naše funkce v JavaScriptu, jíž je předán výsledek asynchronního volání, musí mít tuto
signaturu.
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt; &lt;span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'"&gt; 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; &lt;/i&gt; 
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;i style="mso-bidi-font-style: normal"&gt;function NazevFunkce (raiseCallbackEventMethodResult,
context) 
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/i&gt; 
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
Jak mnou zvolené názvy argumentů napovidaji, v prvnim argumentu je výsledek asynchronního
volání a ve druhém obsah proměnné context v okamžiku zahájení asynchronního volání.
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 12pt 0cm 0pt"&gt;
V jiné verzi metody &lt;i style="mso-bidi-font-style: normal"&gt;GetCallbackEventReference&lt;/i&gt; lze
zadat také název funkce v JavaScriptu, jež bude zavolána, když v metodě &lt;i style="mso-bidi-font-style: normal"&gt;RaiseCallbackEvent &lt;/i&gt;dojde
k výjimce.
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
A to je celý trik. V rychlosti zrekapitulujme, jak celý scénář probíhá. Metodou GetCallbackEventReference
vygenerovaný klientský kód zavolá na klientovi metodu __doCallBack. Ta získá data
z funkce „content“ a odešle je na server, kde běhové prostředí nalezne serverový ovládací
prvek, jemuž jsou data určena, zavolá jeho metodu RaiseCallbackEvent a výsledná data
zašle zpět na klienta metodě „callback“.&lt;b style="mso-bidi-font-weight: normal"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/b&gt;
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 12pt 0cm 0pt"&gt;
Do třídy HttpBrowserCapabilities byly přidány dvě vlastnosti, abychom si mohli při
renderování ovládacího prvku ověřit, zda cílový prohlížeč asynchronní volání podporuje.
Vlastnost SupportsCallback nese informaci o přítomnosti nebo absenci podpory asynchronního
volání v prohlížeči, ale nesděluje nic o tom, jak jsou případná asynchronní volání
realizována. Vlastnost SupportsXmlHttp sděluje, jestli prohlížeč pro asynchronní volání
může použít objekt XmlHttp.
&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=4ae1e501-e9db-4d64-af3c-c91fc489d679" /&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,4ae1e501-e9db-4d64-af3c-c91fc489d679.aspx</comments>
      <category>ASP.NET</category>
    </item>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=262cc8c0-dadd-426c-868e-281bb27d4f2f</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,262cc8c0-dadd-426c-868e-281bb27d4f2f.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,262cc8c0-dadd-426c-868e-281bb27d4f2f.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=262cc8c0-dadd-426c-868e-281bb27d4f2f</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Kniha Network programming for the Microsoft .Net Framework je úvodem do síťového programování.
Slovo úvodem bych zdůraznil, protože žádné rozsáhlé případové studie v ní nenaleznete.<br />
Po obligátním a povrchním úvodu do .Net Frameworku, nás autoři seznámí se “streamy”
a pochopitelně se soustředí na třídu NetworkStream. Následuje popis práce s thready
a ukázky asynchronního návrhového vzoru (metody Begin*, End*)- i když je problematice
věnováno plných 19 stran, nečekejte žádné "best practices", ale spíše upovídaný přepis
toho, co je v MSDN. Ukázek asynchronního návrhového vzoru je v celé knize hříšně opulentní
množství , takže tato kapitola je jen "lákavou" návnadou.<br />
Dále je v knize vysvětlen význam serializace a probrány jsou XML, binární a SOAP serializace.
Když už je serializace probírána do takových detailů, jakými jsou XML atributy, mohla
být zmíněna i dynamická redefinice atributů za asistence třídy XmlAttributeOverrides.<br />
Lehký úvod do jmenného prostoru System.Net, jehož smysl mi v kompozici knihy uniká,
je vystřídán popisem protokolů IPV4 a IPV6 a metod třídy DNS. Tato kapitola mi připadá
z celé knihy nejpovedenější, protože z ní čiší, že její autor své téma podrobně zná,
ale přitom dokáže na vyhrazeném prostoru vybrat to podstatné a nezabíhat do zdržujících
detailů.<br />
Následující dvě kapitoly tvoří jádro knihy, protože se zabývají klientskými a serverovými
sokety a také jejich nadstavbami s jednodušším API (TcpClient, TcpListener). Bohužel
tyto kapitoly trpí také největší nevyvážeností ve zpracování tématu. Přístup autorů
kolísá od pasivního přejímání informací z MSDN k neustálému zdůrazňování, že pro většinu
synchronních metod existují jejich asynchronní doplňky. Když jsem se tuto zajímavou
informaci dověděl potřetí a prohlédl si další úmorný Step By Step příklad určený pravděpodobně
programátorům po akutní lobotomii provedené brokovnicí, měl jsem chuť připojit se
dobře cíleným výstřelem k zástupu šťastných idiotů, abych dokázal kapitoly dočíst.
Tam, kde by měla být tématika zpracována velmi prodrobně i s ukázkami, se autoři omezí
na shrnující tabulky, jejichž pravděpodobně jediným smyslem je rychlé navýšení počtu
popsaných normostran. Moje výtka směřuje hlavně k zcela nedostatečné dokumentaci enumerace
SocketOption.<br />
Kromě TCP/IP protokolu jsou zde i ukázky UDP protokolu a implementace takzvaných "Raw"
soketů. "Raw" sokety jsou vysvětleny na příkladu ICMP protokolu (což není nic jiného
než všem důvěrně známý PING). Slušelo by se zmínit, že na Windows 2000 a XP mohou
"Raw" sokety otevřít pouze administrátoři. (ping.exe může spustit každý uživatel,
jde asi o jedinou výjimku).<br />
Důležitost tříd WebClient, WebResponse a WebRequest je vyzdvižena v kapitole nazvané
"Using the Network". Tato kapitola je povedená, i když zde asi nenaleznete nic překvapivého.
Zmíněny jsou cookies, různé způsoby autentizace, certifikáty, SSL.<br />
Z dalších kapitol rychle získáte pocit, že se autoři zavázali dodat dílko o vyšším
počtu stran, a proto zařadili témata jako jsou Web Services a .Net Remoting. Sice
jsou vždy naťuknuty pokročilé vlastnosti (SOAP extenze, Channel sinks), ale z jejich
odfláknutého vysvětlení si začátečník bude brzy zoufat a slabší nátura se k těmto
konceptům kvůli neumětelství autorů již nikdy nevrátí. Jako leitmotiv knihy:) se zde
objevuje podrobné vysvětlení asynchronního volání WWW služeb.<br />
Autoři se také s těžko pochopitelnou vervou pustí i do vysvětlování Code Acces Security.
Jejich snaha se ale omezí na výčet oprávnění a hrubý přehled významu konstitutivních
složek CAS, takže kdybych se s CAS setkal poprvé, získám mylný dojem, že CAS je nesmysl
bez jakékoli užitné hodnoty. Jsme také poučeni, že bychom měli komunikaci mezi sokety
kryptovat, protože svět plný hackerů čeká na naše pakety. Děkuji za osvětu, hned se
cítím jako up-to-date vývojář, teď si najdu jen ve slovníku cizích slov význam termínu
kryptovat, abych ty hackery svými programy sejmul. :)<br />
Doporučení pro psaní výkonných aplikací jsou shrnuta v mozaice nazvané "Network performance
and scalability. Zajímavá je hlavně část týkající se doporučení pro používání "Nagle"
algoritmu, ale ani ostatní rady vašim aplikacím neublíží. 
<br />
Zcela do počtu je kratičká poslední kapitola Advancements in .Net Framework programming,
jejíž originální teze by se dala shrnout "Nebojte se, v příští verzi bude zase vše
lepší, výkonnější a bezpečnější".<br />
Co říci závěrem? Jestliže se sokety začínáte a jste úplní zelenáči, kniha se Vam bude
hodit, i když si z ní odnesete hlavně poznatek, že sokety jsou tady proto, aby bylo
na čem demonstrovat dokonalý asynchronní návrhový vzor. :) Jste-li pokročilý vývojář
a v knize hledáte neotřelé rady starých zkušených harcovníků, schovejte peněženku,
zamáčkněte slzu kanoucí za odpíraným poznáním a vyberte si jiný titul.<br />
Anotace<br />
Název: Network Programming For the Microsoft .Net Framework<br />
Autoři: Jones, A; Ohlund, J; Olson, L;<br />
Nakladatelství: Microsoft Press 2004
</p>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=262cc8c0-dadd-426c-868e-281bb27d4f2f" />
      </body>
      <title>Kniha Network programming for the Microsoft .Net Framework</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,262cc8c0-dadd-426c-868e-281bb27d4f2f.aspx</guid>
      <link>http://blog.renestein.net/Kniha+Network+Programming+For+The+Microsoft+Net+Framework.aspx</link>
      <pubDate>Fri, 14 May 2004 19:05:00 GMT</pubDate>
      <description>
		&lt;p&gt;
Kniha Network programming for the Microsoft .Net Framework je úvodem do síťového programování.
Slovo úvodem bych zdůraznil, protože žádné rozsáhlé případové studie v ní nenaleznete.&lt;br /&gt;
Po obligátním a povrchním úvodu do .Net Frameworku, nás autoři seznámí se “streamy”
a pochopitelně se soustředí na třídu NetworkStream. Následuje popis práce s thready
a ukázky asynchronního návrhového vzoru (metody Begin*, End*)- i když je problematice
věnováno plných 19 stran, nečekejte žádné "best practices", ale spíše upovídaný přepis
toho, co je v MSDN. Ukázek asynchronního návrhového vzoru je v celé knize hříšně opulentní
množství , takže tato kapitola je jen "lákavou" návnadou.&lt;br /&gt;
Dále je v knize vysvětlen význam serializace a probrány jsou XML, binární a SOAP serializace.
Když už je serializace probírána do takových detailů, jakými jsou XML atributy, mohla
být zmíněna i dynamická redefinice atributů za asistence třídy XmlAttributeOverrides.&lt;br /&gt;
Lehký úvod do jmenného prostoru System.Net, jehož smysl mi v kompozici knihy uniká,
je vystřídán popisem protokolů IPV4 a IPV6 a metod třídy DNS. Tato kapitola mi připadá
z celé knihy nejpovedenější, protože z ní čiší, že její autor své téma podrobně zná,
ale přitom dokáže na vyhrazeném prostoru vybrat to podstatné a nezabíhat do zdržujících
detailů.&lt;br /&gt;
Následující dvě kapitoly tvoří jádro knihy, protože se zabývají klientskými a serverovými
sokety a také jejich nadstavbami s jednodušším API (TcpClient, TcpListener). Bohužel
tyto kapitoly trpí také největší nevyvážeností ve zpracování tématu. Přístup autorů
kolísá od pasivního přejímání informací z MSDN k neustálému zdůrazňování, že pro většinu
synchronních metod existují jejich asynchronní doplňky. Když jsem se tuto zajímavou
informaci dověděl potřetí a prohlédl si další úmorný Step By Step příklad určený pravděpodobně
programátorům po akutní lobotomii provedené brokovnicí, měl jsem chuť připojit se
dobře cíleným výstřelem k zástupu šťastných idiotů, abych dokázal kapitoly dočíst.
Tam, kde by měla být tématika zpracována velmi prodrobně i s ukázkami, se autoři omezí
na shrnující tabulky, jejichž pravděpodobně jediným smyslem je rychlé navýšení počtu
popsaných normostran. Moje výtka směřuje hlavně k zcela nedostatečné dokumentaci enumerace
SocketOption.&lt;br /&gt;
Kromě TCP/IP protokolu jsou zde i ukázky UDP protokolu a implementace takzvaných "Raw"
soketů. "Raw" sokety jsou vysvětleny na příkladu ICMP protokolu (což není nic jiného
než všem důvěrně známý PING). Slušelo by se zmínit, že na Windows 2000 a XP mohou
"Raw" sokety otevřít pouze administrátoři. (ping.exe může spustit každý uživatel,
jde asi o jedinou výjimku).&lt;br /&gt;
Důležitost tříd WebClient, WebResponse a WebRequest je vyzdvižena v kapitole nazvané
"Using the Network". Tato kapitola je povedená, i když zde asi nenaleznete nic překvapivého.
Zmíněny jsou cookies, různé způsoby autentizace, certifikáty, SSL.&lt;br /&gt;
Z dalších kapitol rychle získáte pocit, že se autoři zavázali dodat dílko o vyšším
počtu stran, a proto zařadili témata jako jsou Web Services a .Net Remoting. Sice
jsou vždy naťuknuty pokročilé vlastnosti (SOAP extenze, Channel sinks), ale z jejich
odfláknutého vysvětlení si začátečník bude brzy zoufat a slabší nátura se k těmto
konceptům kvůli neumětelství autorů již nikdy nevrátí. Jako leitmotiv knihy:) se zde
objevuje podrobné vysvětlení asynchronního volání WWW služeb.&lt;br /&gt;
Autoři se také s těžko pochopitelnou vervou pustí i do vysvětlování Code Acces Security.
Jejich snaha se ale omezí na výčet oprávnění a hrubý přehled významu konstitutivních
složek CAS, takže kdybych se s CAS setkal poprvé, získám mylný dojem, že CAS je nesmysl
bez jakékoli užitné hodnoty. Jsme také poučeni, že bychom měli komunikaci mezi sokety
kryptovat, protože svět plný hackerů čeká na naše pakety. Děkuji za osvětu, hned se
cítím jako up-to-date vývojář, teď si najdu jen ve slovníku cizích slov význam termínu
kryptovat, abych ty hackery svými programy sejmul. :)&lt;br /&gt;
Doporučení pro psaní výkonných aplikací jsou shrnuta v mozaice nazvané "Network performance
and scalability. Zajímavá je hlavně část týkající se doporučení pro používání "Nagle"
algoritmu, ale ani ostatní rady vašim aplikacím neublíží. 
&lt;br /&gt;
Zcela do počtu je kratičká poslední kapitola Advancements in .Net Framework programming,
jejíž originální teze by se dala shrnout "Nebojte se, v příští verzi bude zase vše
lepší, výkonnější a bezpečnější".&lt;br /&gt;
Co říci závěrem? Jestliže se sokety začínáte a jste úplní zelenáči, kniha se Vam bude
hodit, i když si z ní odnesete hlavně poznatek, že sokety jsou tady proto, aby bylo
na čem demonstrovat dokonalý asynchronní návrhový vzor. :) Jste-li pokročilý vývojář
a v knize hledáte neotřelé rady starých zkušených harcovníků, schovejte peněženku,
zamáčkněte slzu kanoucí za odpíraným poznáním a vyberte si jiný titul.&lt;br /&gt;
Anotace&lt;br /&gt;
Název: Network Programming For the Microsoft .Net Framework&lt;br /&gt;
Autoři: Jones, A; Ohlund, J; Olson, L;&lt;br /&gt;
Nakladatelství: Microsoft Press 2004
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=262cc8c0-dadd-426c-868e-281bb27d4f2f" /&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,262cc8c0-dadd-426c-868e-281bb27d4f2f.aspx</comments>
      <category>.NET Framework</category>
      <category>.Net Remoting</category>
      <category>ASP.NET</category>
      <category>Web Services</category>
    </item>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=160bdf71-3ed9-4a52-97b5-2b1f8e3d4794</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,160bdf71-3ed9-4a52-97b5-2b1f8e3d4794.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,160bdf71-3ed9-4a52-97b5-2b1f8e3d4794.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=160bdf71-3ed9-4a52-97b5-2b1f8e3d4794</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <title>Uložení důležitého stavu serverových ovládacích prvků  v ASP.NET 2.0 </title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,160bdf71-3ed9-4a52-97b5-2b1f8e3d4794.aspx</guid>
      <link>http://blog.renestein.net/Ulo%c5%been%c3%ad+D%c5%afle%c5%beit%c3%a9ho+Stavu+Serverov%c3%bdch+Ovl%c3%a1dac%c3%adch+Prvk%c5%af+V+ASPNET+20.aspx</link>
      <pubDate>Fri, 07 May 2004 14:47:00 GMT</pubDate>
      <description>ASP.NET 1.0 přineslo pro vývojáře WWW aplikací několik zásadních novinek. Jednou z nejlepších je simulace stavového chovaní prvků pomocí ViewState. U každého serverového ovládací prvku je před vyrenderováním stránky volána metoda SaveViewState, ve které prvek uloží všechny &lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=160bdf71-3ed9-4a52-97b5-2b1f8e3d4794"/&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,160bdf71-3ed9-4a52-97b5-2b1f8e3d4794.aspx</comments>
      <category>ASP.NET</category>
    </item>
    <item>
      <trackback:ping>http://blog.renestein.net/Trackback.aspx?guid=0e78fc08-3018-48e3-8d42-5a34418eccc3</trackback:ping>
      <pingback:server>http://blog.renestein.net/pingback.aspx</pingback:server>
      <pingback:target>http://blog.renestein.net/PermaLink,guid,0e78fc08-3018-48e3-8d42-5a34418eccc3.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://blog.renestein.net/CommentView,guid,0e78fc08-3018-48e3-8d42-5a34418eccc3.aspx</wfw:comment>
      <wfw:commentRss>http://blog.renestein.net/SyndicationService.asmx/GetEntryCommentsRss?guid=0e78fc08-3018-48e3-8d42-5a34418eccc3</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
V konferenci EMWAC se objevil příspěvek <a href="http://konference.vyvojar.cz/post.aspx?id=53046">http://konference.vyvojar.cz/post.aspx?id=53046</a>,
jehož autor chce do vlastnosti ve svém serverovém ovládacím prvku uložit Id jiného
ovládacího prvku na stránce. Vývojář by neměl zapisovat Id přímo, ale vybírat ze seznamu
na stránce vlastností. První myšlenkou autora příspěvku bylo nadeklarovat vlastnost
jako WebControl - to je samozřejmě nesmysl. Když zkusíme perzistovat vlastnost na
stránce (atribut PersistenceMode), tak dosáhneme pouze toho, že validátor ASPX stránky
nás bude upozorňovat, že máme na stránce 2 prvky se stejným Id.
</p>
        <p>
To, o co se autor snaží, umí všichni validátoři. Jejich vlastnost ControlToValidate
nabídne Id všech prvků na stránce, kteří obsahují vlastnost dekorovanou atributem
ValidationProperty. Vlastnost ControlToValidate je samozřejmě typu string. Seznam
Id naplní speciální TypeConverter s názvem ValidatedControlConverter.
</p>
        <p>
ValidatedControlConverter nelze použít pro načtení seznamu Id všech prvků na stránce,
protože, jak jsem již napsal, ta bere v úvahu jen prvky s vlastností označenou atributem
ValidationProperty. Proto jsem napsal ControlConverter, který nalezne Id všech prvků
na stránce.
</p>
        <font color="#0000ff" size="2">
          <p>
public
</p>
        </font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">class</font>
        <font size="2">ControlConverter
: StringConverter 
<p>
{
</p><p></p></font>
        <font color="#0000ff" size="2"> public</font>
        <font size="2">ControlConverter()
: </font>
        <font color="#0000ff" size="2">base</font>
        <font size="2">() 
<p>
{
</p><p>
}
</p><p></p><p></p></font>
        <font color="#0000ff" size="2"> public</font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">override</font>
        <font size="2">StandardValuesCollection
GetStandardValues(ITypeDescriptorContext context) 
<p>
{
</p><p></p></font>
        <font color="#0000ff" size="2">if</font>
        <font size="2">((context == </font>
        <font color="#0000ff" size="2">null</font>
        <font size="2">)
|| (context.Container == </font>
        <font color="#0000ff" size="2">null</font>
        <font size="2">)) 
<p></p></font>
        <font color="#0000ff" size="2"> return</font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">null</font>
        <font size="2">; 
<p></p><p></p></font>
        <font color="#0000ff" size="2"> object</font>
        <font size="2">[] foundControls
= enumerateControls(context.Container); 
<p></p><p></p></font>
        <font color="#0000ff" size="2"> if</font>
        <font size="2">(foundControls == </font>
        <font color="#0000ff" size="2">null</font>
        <font size="2">) 
<p></p></font>
        <font color="#0000ff" size="2"> return</font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">null</font>
        <font size="2">; 
<p></p><p></p></font>
        <font color="#0000ff" size="2"> return</font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">new</font>
        <font size="2">StandardValuesCollection(foundControls); 
<p>
}
</p><p></p></font>
        <font color="#0000ff" size="2"> public</font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">override</font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">bool</font>
        <font size="2">GetStandardValuesSupported(ITypeDescriptorContext
context) 
<p>
{
</p><p></p></font>
        <font color="#0000ff" size="2"> return</font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">true</font>
        <font size="2">; 
<p>
}
</p><p></p></font>
        <font color="#0000ff" size="2"> public</font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">override</font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">bool</font>
        <font size="2">GetStandardValuesExclusive(ITypeDescriptorContext
context) 
<p>
{
</p><p></p></font>
        <font color="#0000ff" size="2"> return</font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">false</font>
        <font size="2">; 
<p>
}
</p><p></p></font>
        <font color="#0000ff" size="2"> private</font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">object</font>
        <font size="2">[]
enumerateControls(IContainer container)</font>
        <p>
          <font size="2"> {</font>
        </p>
        <p>
ArrayList retList = <font color="#0000ff" size="2">new</font><font size="2"> ArrayList();</font></p>
        <p>
          <font color="#0000ff" size="2"> foreach</font>
          <font size="2">(IComponent component </font>
          <font color="#0000ff" size="2">in</font>
          <font size="2">container.Components)</font>
        </p>
        <p>
{
</p>
        <p>
Control foundControl = component <font color="#0000ff" size="2">as</font><font size="2"> Control;</font></p>
        <p>
          <font color="#0000ff" size="2"> if</font>
          <font size="2">(foundControl == </font>
          <font color="#0000ff" size="2">null</font>
          <font size="2">)</font>
        </p>
        <p>
          <font color="#0000ff" size="2"> continue</font>
          <font size="2">;</font>
        </p>
        <p>
        </p>
        <p>
          <font color="#0000ff" size="2"> if</font>
          <font size="2">((foundControl.ID == </font>
          <font color="#0000ff" size="2">null</font>
          <font size="2">)
||</font>
        </p>
        <p>
(foundControl.ID == String.Empty))
</p>
        <p>
          <font color="#0000ff" size="2">
          </font>
          <font color="#0000ff" size="2">continue</font>
          <font size="2">;</font>
        </p>
        <p>
        </p>
        <p>
retList.Add(foundControl.ID);
</p>
        <p>
}
</p>
        <p>
        </p>
        <p>
          <font color="#0000ff" size="2"> return</font>
          <font size="2">retList.ToArray();</font>
        </p>
        <p>
}
</p>
        <p>
}
</p>
        <p>
Converter se u vlastnosti použije takto:
</p>
        <font size="2">
          <p>
[Browsable(
</p>
        </font>
        <font color="#0000ff" size="2">true</font>
        <font size="2">)] 
<p>
[TypeConverter(
</p></font>
        <font color="#0000ff" size="2">typeof</font>
        <font size="2">(ControlConverter))] 
<p></p></font>
        <font color="#0000ff" size="2">public</font>
        <font size="2">
        </font>
        <font color="#0000ff" size="2">string</font>
        <font size="2">MyControl 
<p>
{
</p><p></p></font>
        <font color="#0000ff" size="2"> get</font>
        <font size="2">
          <p>
{
</p>
          <p>
          </p>
        </font>
        <font color="#0000ff" size="2"> string</font>
        <font size="2">myControl = (</font>
        <font color="#0000ff" size="2">string</font>
        <font size="2">)
ViewState["MyControl"]; 
<p></p></font>
        <font color="#0000ff" size="2"> return</font>
        <font size="2">(myControl == </font>
        <font color="#0000ff" size="2">null</font>
        <font size="2">?
String.Empty : myControl); 
<p>
}
</p><p></p></font>
        <font color="#0000ff" size="2"> set</font>
        <font size="2">
          <p>
{
</p>
          <p>
ViewState["myControl"] = 
</p>
        </font>
        <font color="#0000ff" size="2">value</font>
        <font size="2">; 
<p>
}
</p><p>
}
</p><p></p></font>
        <img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=0e78fc08-3018-48e3-8d42-5a34418eccc3" />
      </body>
      <title>Výběr ze seznamu Id serverových ovládacích prvků na stránce</title>
      <guid isPermaLink="false">http://blog.renestein.net/PermaLink,guid,0e78fc08-3018-48e3-8d42-5a34418eccc3.aspx</guid>
      <link>http://blog.renestein.net/V%c3%bdb%c4%9br+Ze+Seznamu+Id+Serverov%c3%bdch+Ovl%c3%a1dac%c3%adch+Prvk%c5%af+Na+Str%c3%a1nce.aspx</link>
      <pubDate>Sun, 25 Apr 2004 17:44:00 GMT</pubDate>
      <description>
		&lt;p&gt;
V konferenci EMWAC se objevil příspěvek &lt;a href="http://konference.vyvojar.cz/post.aspx?id=53046"&gt;http://konference.vyvojar.cz/post.aspx?id=53046&lt;/a&gt;,
jehož autor chce do vlastnosti ve svém serverovém ovládacím prvku uložit Id jiného
ovládacího prvku na stránce. Vývojář by neměl zapisovat Id přímo, ale vybírat ze seznamu
na stránce vlastností. První myšlenkou autora příspěvku bylo nadeklarovat vlastnost
jako WebControl - to je samozřejmě nesmysl. Když zkusíme perzistovat vlastnost na
stránce (atribut PersistenceMode), tak dosáhneme pouze toho, že validátor ASPX stránky
nás bude upozorňovat, že máme na stránce 2 prvky se stejným Id.
&lt;/p&gt;
&lt;p&gt;
To, o co se autor snaží, umí všichni validátoři. Jejich vlastnost ControlToValidate
nabídne Id všech prvků na stránce, kteří obsahují vlastnost dekorovanou atributem
ValidationProperty. Vlastnost ControlToValidate je samozřejmě typu string. Seznam
Id naplní speciální TypeConverter s názvem ValidatedControlConverter.
&lt;/p&gt;
&lt;p&gt;
ValidatedControlConverter nelze použít pro načtení seznamu Id všech prvků na stránce,
protože, jak jsem již napsal, ta bere v úvahu jen prvky s vlastností označenou atributem
ValidationProperty. Proto jsem napsal ControlConverter, který nalezne Id všech prvků
na stránce.
&lt;/p&gt;
&lt;font color="#0000ff" size="2"&gt; 
&lt;p&gt;
public
&lt;/p&gt;
&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;class&lt;/font&gt; &lt;font size="2"&gt;ControlConverter
: StringConverter 
&lt;p&gt;
{
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; public&lt;/font&gt; &lt;font size="2"&gt;ControlConverter()
: &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;base&lt;/font&gt; &lt;font size="2"&gt;() 
&lt;p&gt;
{
&lt;/p&gt;
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; public&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;override&lt;/font&gt; &lt;font size="2"&gt;StandardValuesCollection
GetStandardValues(ITypeDescriptorContext context) 
&lt;p&gt;
{
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;if&lt;/font&gt; &lt;font size="2"&gt;((context == &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt; &lt;font size="2"&gt;)
|| (context.Container == &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt; &lt;font size="2"&gt;)) 
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; return&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt; &lt;font size="2"&gt;; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; object&lt;/font&gt; &lt;font size="2"&gt;[] foundControls
= enumerateControls(context.Container); 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; if&lt;/font&gt; &lt;font size="2"&gt;(foundControls == &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt; &lt;font size="2"&gt;) 
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; return&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt; &lt;font size="2"&gt;; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; return&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt; &lt;font size="2"&gt;StandardValuesCollection(foundControls); 
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; public&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;override&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;bool&lt;/font&gt; &lt;font size="2"&gt;GetStandardValuesSupported(ITypeDescriptorContext
context) 
&lt;p&gt;
{
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; return&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;true&lt;/font&gt; &lt;font size="2"&gt;; 
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; public&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;override&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;bool&lt;/font&gt; &lt;font size="2"&gt;GetStandardValuesExclusive(ITypeDescriptorContext
context) 
&lt;p&gt;
{
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; return&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;false&lt;/font&gt; &lt;font size="2"&gt;; 
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; private&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;object&lt;/font&gt; &lt;font size="2"&gt;[]
enumerateControls(IContainer container)&lt;/font&gt; 
&lt;p&gt;
&lt;font size="2"&gt; {&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
ArrayList retList = &lt;font color="#0000ff" size="2"&gt;new&lt;/font&gt;&lt;font size="2"&gt; ArrayList();&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#0000ff" size="2"&gt; foreach&lt;/font&gt; &lt;font size="2"&gt;(IComponent component &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;in&lt;/font&gt; &lt;font size="2"&gt;container.Components)&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
{
&lt;/p&gt;
&lt;p&gt;
Control foundControl = component &lt;font color="#0000ff" size="2"&gt;as&lt;/font&gt;&lt;font size="2"&gt; Control;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#0000ff" size="2"&gt; if&lt;/font&gt; &lt;font size="2"&gt;(foundControl == &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt; &lt;font size="2"&gt;)&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#0000ff" size="2"&gt; continue&lt;/font&gt; &lt;font size="2"&gt;;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#0000ff" size="2"&gt; if&lt;/font&gt; &lt;font size="2"&gt;((foundControl.ID == &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt; &lt;font size="2"&gt;)
||&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
(foundControl.ID == String.Empty))
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#0000ff" size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;continue&lt;/font&gt; &lt;font size="2"&gt;;&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
retList.Add(foundControl.ID);
&lt;/p&gt;
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color="#0000ff" size="2"&gt; return&lt;/font&gt; &lt;font size="2"&gt;retList.ToArray();&lt;/font&gt; 
&lt;/p&gt;
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
Converter se u vlastnosti použije takto:
&lt;/p&gt;
&lt;font size="2"&gt; 
&lt;p&gt;
[Browsable(
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;true&lt;/font&gt; &lt;font size="2"&gt;)] 
&lt;p&gt;
[TypeConverter(
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;typeof&lt;/font&gt; &lt;font size="2"&gt;(ControlConverter))] 
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;public&lt;/font&gt; &lt;font size="2"&gt; &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt; &lt;font size="2"&gt;MyControl 
&lt;p&gt;
{
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; get&lt;/font&gt; &lt;font size="2"&gt; 
&lt;p&gt;
{
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; string&lt;/font&gt; &lt;font size="2"&gt;myControl = (&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;string&lt;/font&gt; &lt;font size="2"&gt;)
ViewState["MyControl"]; 
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; return&lt;/font&gt; &lt;font size="2"&gt;(myControl == &lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;null&lt;/font&gt; &lt;font size="2"&gt;?
String.Empty : myControl); 
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt; set&lt;/font&gt; &lt;font size="2"&gt; 
&lt;p&gt;
{
&lt;/p&gt;
&lt;p&gt;
ViewState["myControl"] = 
&lt;/p&gt;
&lt;/font&gt; &lt;font color="#0000ff" size="2"&gt;value&lt;/font&gt; &lt;font size="2"&gt;; 
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
}
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/font&gt; &lt;img width="0" height="0" src="http://blog.renestein.net/aggbug.ashx?id=0e78fc08-3018-48e3-8d42-5a34418eccc3" /&gt;</description>
      <comments>http://blog.renestein.net/CommentView,guid,0e78fc08-3018-48e3-8d42-5a34418eccc3.aspx</comments>
      <category>ASP.NET</category>
      <category>.NET Framework</category>
    </item>
  </channel>
</rss>