<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SergioTarrillo - RichWeblog : ASP.NET</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx</link><description>Etiquetas: ASP.NET</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Proveedores de Alojamiento (Hosting): WinHost, ASP.NET Hosting</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2011/09/23/proveedores-de-alojamiento-hosting-winhost-asp-net-hosting.aspx</link><pubDate>Fri, 23 Sep 2011 21:42:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200699</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=200699</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2011/09/23/proveedores-de-alojamiento-hosting-winhost-asp-net-hosting.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://www.winhost.com/a/guxwjk_b_66"&gt;&lt;img src="http://www.winhost.com/c/b_66" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Desde hace unos meses que vengo usando WinHost para mi sitio Web personal, y hasta ahora todo va muy bien. Antes ten&amp;iacute;a otro proveedor que me hac&amp;iacute;a dos facturaciones una por el alojamiento del sitio web y otra por el alojamiento de la base de datos. Pero como lo que tengo es un sitio personal, de vez en cuando subo algunos prototipos, buscaba una opci&amp;oacute;n m&amp;aacute;s econ&amp;oacute;mica y que el uso de base de datos este incluida dentro del mismo plan, y &lt;a target="_blank" title="WinHost" href="http://www.winhost.com/c/b_66"&gt;WinHost&lt;/a&gt; cumpl&amp;iacute;a con eso.&lt;/p&gt;
&lt;p&gt;Algunas de sus caracter&amp;iacute;sticas, a mi parecer b&amp;aacute;sicas para tomar una decisi&amp;oacute;n, son las siguientes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IIS 7 Web Hosting&lt;/li&gt;
&lt;li&gt;Acceso remoto a trav&amp;eacute;s de IIS 7 Manager&lt;/li&gt;
&lt;li&gt;Incluye una base datos SQL Server y MySql&lt;/li&gt;
&lt;li&gt;Acceso remoto a la base de datos desde SQL Management Studio&lt;/li&gt;
&lt;li&gt;ASP.NET en todas sus versiones, y sus add-ins ASP.NET MVC, Silverlight, etc.&lt;/li&gt;
&lt;li&gt;Y para el correo el uso de SmarterMail&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tiene un &lt;a target="_blank" title="WinHost Demo Panel del Control" href="https://demo.winhost.com/"&gt;panel de control simple y pr&amp;aacute;ctico&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="WinHost Demo Control Panel" src="http://sergiot2.com/blogimages/2011/09Sep/23_WinHost_DemoControlPanel.png" /&gt;&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;
&lt;ul&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200699" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Windows+Server/default.aspx">Windows Server</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Hosting/default.aspx">Hosting</category></item><item><title>Descargas: Plantillas de diseño para ASP.NET (ASP.NET 2.0 Design Templates)</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2011/06/29/descargas-plantillas-de-dise-241-o-para-asp-net-asp-net-2-0-design-templates.aspx</link><pubDate>Wed, 29 Jun 2011 15:18:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:196851</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=196851</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2011/06/29/descargas-plantillas-de-dise-241-o-para-asp-net-asp-net-2-0-design-templates.aspx#comments</comments><description>&lt;p&gt;Hace algunos a&amp;ntilde;os, exist&amp;iacute;a un excelente recurso en MSDN para ASP.NET llamado: ASP.NET 2.0 Design Templates, bajo la siguiente url: &lt;a target="_blank" href="http://msdn.microsoft.com/asp.net/reference/design/templates/default.aspx" title="ASP.NET 2.0 Design Templates"&gt;http://msdn.microsoft.com/asp.net/reference/design/templates/default.aspx&lt;/a&gt;. No pude encontrar este recurso en otro lado, si alguien tiene el dato, por favor lo deja en los comentarios.&lt;/p&gt;
&lt;p&gt;Aunque la p&amp;aacute;gina web mencionada no esta disponible, las plantillas como descargas si lo est&amp;aacute;n. Gracias a mi amigo: &lt;a target="_blank" href="http://hi.csdn.net/flysun0311" title="flysun0311"&gt;flysun0311&lt;/a&gt;, por guardar los enlaces en esta entrada: &lt;a target="_blank" href="http://blog.csdn.net/flysun0311/archive/2008/11/25/3373528.aspx" title="符合Web标准的ASP .NET 2.0 Starter Kit模板下载"&gt;符合Web标准的ASP .NET 2.0 Starter Kit模板下载&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Todas estas descargas son compatibles para cualquier versi&amp;oacute;n de ASP.NET, es m&amp;aacute;s se pueden usar con cualquier otro lenguaje Php, Jsp, etc, el dise&amp;ntilde;o es uno solo para todos Html y CSS.&lt;/p&gt;
&lt;p&gt;P.D.: Si alg&amp;uacute;n enlace no esta disponible, me avisan por los comentarios tengo un bakcup de todos estos archivos en la nube.&lt;/p&gt;
&lt;p&gt;Html - Div y Table - &amp;quot;Basic Design Template&amp;quot; &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/0/b/1/0b155bb5-6890-4af0-94a7-7b5b87c16796/basic06.msi" title="Basic Design Template"&gt;Descarga&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sergiot2.com/blogimages/2011/09Sep/13_ST2_BasicWebTemplate.jpg" title="ST2 - Basic Web Template" target="_blank"&gt;&lt;img src="http://sergiot2.com/blogimages/2011/09Sep/13_ST2_BasicWebTemplate.jpg" alt="ST2 Basic Web Template" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Html - Div y Table &amp;ndash; &amp;ldquo;Fun Design Template&amp;rdquo; &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/d/8/2/d8291134-ac4d-45cc-b7eb-446564bb095e/fun06.msi" title="Fun Design Template"&gt;Descarga&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Html &amp;ndash; Div y Table &amp;ndash; &amp;ldquo;Grid Design Tamplte&amp;quot; &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/1/f/d/1fd59802-643c-49d2-9586-26216d6840e8/grid06.msi" title="Grid Design Template"&gt;Descarga&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Html &amp;ndash; Div y Table &amp;ndash; &amp;ldquo;Rounded Design Template&amp;rdquo; &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/c/7/a/c7a07f0e-4778-4d73-a163-f873a06b18ed/rounded06.msi" title="Rounded Design Template"&gt;Descarga&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Html &amp;ndash; Div y Table &amp;ndash; &amp;ldquo;Simple Design Template&amp;rdquo; &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/f/d/e/fdea6532-984c-43ec-b41f-ea6b92d33edb/simple06.msi" title="Simple Design Template"&gt;Descarga&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ASP.NET - Web Commerce Design &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/3/1/3/3134bdea-cae1-4795-a685-d48140264a08/templatecommercecs0106.vsi" title="ASP.NET Web Commerce Design C#"&gt;C#&lt;/a&gt; y &lt;a target="_blank" href="http://download.microsoft.com/download/0/e/2/0e201d64-1aee-4ffb-abfc-1fa24cecf757/templatecommerceVB0106.vsi" title="ASP.NET Web Commerce Design VB"&gt;VB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ASP.NET &amp;ndash; Web Corporate Design &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/9/8/0/980dc514-5e91-4608-b40c-c3aea45b00cb/templatecorporatecs0106.vsi" title="ASP.NET Web Corporate Design C#"&gt;C#&lt;/a&gt; y &lt;a target="_blank" href="http://download.microsoft.com/download/e/f/2/ef2f6d60-4cc0-4e9d-a22d-5930999db677/templatecorporateVB0106.vsi" title="ASP.NET Web Corporate Design VB"&gt;VB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ASP.NET - Web Personal Design &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/2/3/2/2328890d-8ca1-4b7f-a138-08fca8a244bd/templatepersonalcs0106.vsi" title="ASP.NET Web Personal Design C#"&gt;C#&lt;/a&gt; y &lt;a target="_blank" href="http://download.microsoft.com/download/9/3/3/933adec5-f5d4-4501-b552-0e825a0cf0bf/templatepersonalVB0106.vsi" title="ASP.NET Web Personal Design VB"&gt;VB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ASP.NET - Web Small Business Design &amp;ndash; &lt;a target="_blank" href="http://download.microsoft.com/download/7/0/6/7061c0be-477a-44a3-ac02-a75ffd172f2d/templatesmallbusinesscs0106.vsi" title="ASP.NET Web Small Business Design C#"&gt;C#&lt;/a&gt; y &lt;a target="_blank" href="http://download.microsoft.com/download/e/3/6/e36ac37c-92fd-462b-b55e-7d5bcfdaf69f/templatesmallbusinessVB0106.vsi" title="ASP.NET Web Small Business Design VB"&gt;VB&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=196851" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Samples+WebSite/default.aspx">Samples WebSite</category></item><item><title>[CodeSnipeet] C# Detección personaliza de un navegador móvil</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2011/06/23/codesnipeet-c-detenci-243-n-personaliza-de-un-navegador-m-243-vil.aspx</link><pubDate>Thu, 23 Jun 2011 05:17:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:196505</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=196505</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2011/06/23/codesnipeet-c-detenci-243-n-personaliza-de-un-navegador-m-243-vil.aspx#comments</comments><description>&lt;p&gt;F&amp;aacute;cilmente&amp;nbsp; podr&amp;iacute;amos detectarlo usando la siguiente propiedad: &lt;strong&gt;Request.Browser.IsMobileDevice&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pero esta propiedad no satisface algunos casos, por ejemplo con Opera Mini en un equipo Nokia. Si queremos crear nuestro propio m&amp;eacute;todo, podemos usar el siguiente c&amp;oacute;digo, extra&amp;iacute;do del art&amp;iacute;culo: &lt;a target="_blank" href="http://www.codeproject.com/KB/aspnet/mobiledetect.aspx" title="Detecting a mobile browser in ASP.NET"&gt;Detecting a mobile browser in ASP.NET&lt;/a&gt;:&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; Boolean IsCustomMobileBrowser()&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="rem"&gt;//GETS THE CURRENT USER CONTEXT&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    HttpContext context = HttpContext.Current;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="rem"&gt;//FIRST TRY BUILT IN ASP.NT CHECK&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (context.Request.Browser.IsMobileDevice)&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="rem"&gt;//THEN TRY CHECKING FOR THE HTTP_X_WAP_PROFILE HEADER&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (context.Request.ServerVariables[&lt;span class="str"&gt;&amp;quot;HTTP_X_WAP_PROFILE&amp;quot;&lt;/span&gt;] != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="rem"&gt;//THEN TRY CHECKING THAT HTTP_ACCEPT EXISTS AND CONTAINS WAP&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (context.Request.ServerVariables[&lt;span class="str"&gt;&amp;quot;HTTP_ACCEPT&amp;quot;&lt;/span&gt;] != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        context.Request.ServerVariables[&lt;span class="str"&gt;&amp;quot;HTTP_ACCEPT&amp;quot;&lt;/span&gt;].ToLower().Contains(&lt;span class="str"&gt;&amp;quot;wap&amp;quot;&lt;/span&gt;))&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;    &lt;span class="rem"&gt;//AND FINALLY CHECK THE HTTP_USER_AGENT &lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;    &lt;span class="rem"&gt;//HEADER VARIABLE FOR ANY ONE OF THE FOLLOWING&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (context.Request.ServerVariables[&lt;span class="str"&gt;&amp;quot;HTTP_USER_AGENT&amp;quot;&lt;/span&gt;] != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;    {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        &lt;span class="rem"&gt;//Create a list of all mobile types&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        String[] mobiles =&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;            &lt;span class="kwrd"&gt;new&lt;/span&gt; String[]&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;midp&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;j2me&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;avant&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;docomo&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;novarra&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;palmos&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;palmsource&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;240x320&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;opwv&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;chtml&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;pda&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;windows ce&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;mmp/&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;blackberry&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;mib/&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;symbian&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;wireless&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;nokia&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;hand&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;mobi&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;phone&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;cdm&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;up.b&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;audio&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;SIE-&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;SEC-&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;samsung&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;HTC&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;mot-&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;mitsu&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sagem&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sony&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;                , &lt;span class="str"&gt;&amp;quot;alcatel&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;lg&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;eric&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;vx&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  40:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;NEC&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;philips&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;mmm&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;xx&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  41:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;panasonic&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sharp&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;wap&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sch&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  42:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;rover&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;pocket&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;benq&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;java&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  43:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;pt&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;pg&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;vox&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;amoi&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  44:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;bird&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;compal&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;kg&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;voda&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  45:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;sany&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;kdd&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;dbt&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;sendo&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  46:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;sgh&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;gradi&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;jb&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;dddi&amp;quot;&lt;/span&gt;, &lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  47:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;moto&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;iphone&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  48:  &lt;/span&gt;            };&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  49:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  50:  &lt;/span&gt;        &lt;span class="rem"&gt;//Loop through each item in the list created above &lt;/span&gt;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  51:  &lt;/span&gt;        &lt;span class="rem"&gt;//and check if the header contains that text&lt;/span&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  52:  &lt;/span&gt;        &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt; s &lt;span class="kwrd"&gt;in&lt;/span&gt; mobiles)&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  53:  &lt;/span&gt;        {&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  54:  &lt;/span&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (context.Request.ServerVariables[&lt;span class="str"&gt;&amp;quot;HTTP_USER_AGENT&amp;quot;&lt;/span&gt;].&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  55:  &lt;/span&gt;                            ToLower().Contains(s.ToLower()))&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  56:  &lt;/span&gt;            {&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  57:  &lt;/span&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  58:  &lt;/span&gt;            }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  59:  &lt;/span&gt;        }&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  60:  &lt;/span&gt;    }&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  61:  &lt;/span&gt;&amp;nbsp;&lt;/pre&gt;
&lt;pre&gt;&lt;span class="lnum"&gt;  62:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;/pre&gt;
&lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  63:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;

&lt;/p&gt;
&lt;p&gt;P.D.: Si tienen alg&amp;uacute;n dispositivo que no funciona en este c&amp;oacute;digo, nos dejan un comentario para actualizar el c&amp;oacute;digo.&lt;/p&gt;
&lt;p&gt;Los detalles de la aplicaci&amp;oacute;n de este c&amp;oacute;digo, lo podemos ver en la siguiente p&amp;aacute;gina: &lt;a target="_blank" href="http://sergiot2.com/browserInformation.aspx" title="sergiot2.com - Browser Information"&gt;http://sergiot2.com/browserInformation.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img height="598" width="664" src="http://sergiot2.com/blogimages/2011/06Jun/22_Browsers.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Vamos a usar un navegador Wap para Windows, &lt;a target="_blank" href="http://www.winwap.com/" title="WinWap for Windows"&gt;WinWap&lt;/a&gt;, para mostrar algunas p&amp;aacute;ginas en su versi&amp;oacute;n para m&amp;oacute;vil:&lt;/p&gt;
&lt;p&gt;Si ingresamos a la p&amp;aacute;gina desarrollada:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2011/06Jun/21_Browse_Wap_st2.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Si ingresamos a Facebook vemos la redirecci&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2011/06Jun/21_Browse_Wap_fb.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;En Google presentan contenido de acuerdo al dispositivo:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2011/06Jun/21_Browse_Wap_go.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Microsoft al parecer ya no tiene pensado soportar Wap:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2011/06Jun/21_Browse_Wap_ms.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Ingresando directamente a la direcci&amp;oacute;n m&amp;oacute;vil:&lt;/p&gt;
&lt;p&gt;&lt;img height="678" width="516" src="http://sergiot2.com/blogimages/2011/06Jun/21_Browse_Wap_mms.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Otros enlaces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://www.ytechie.com/2008/10/detecting-mobile-device-user-agents-in-aspnet.html" title="Detecting mobile device user agents in ASP.NET"&gt;Detecting mobile device user agents in ASP.NET&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://www.logiclabz.com/asp-net/detect-request-url-from-mobile-device-pda.aspx" title="Detect Request URL from Mobile Device (PDA)"&gt;Detect Request URL from Mobile Device (PDA)&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=196505" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Mobile/default.aspx">Mobile</category></item><item><title>Proveedores de Alojamiento (Hosting): myLittleAdmin, una herramienta para SQL Server via Web</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/28/proveedores-de-alojamiento-hosting-mylittleadmin-una-herramienta-para-sql-server-via-web.aspx</link><pubDate>Tue, 28 Sep 2010 22:14:26 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:182571</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=182571</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/28/proveedores-de-alojamiento-hosting-mylittleadmin-una-herramienta-para-sql-server-via-web.aspx#comments</comments><description>&lt;p&gt;Uno de los clientes, tiene alojada su Web en un proveedor de Hosting, el proveedor te da la opción de conectarte directamente desde un SQL Management Studio a la base de datos remotamente. &lt;/p&gt;  &lt;p&gt;Pero que pasa si, por alguna razón:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;No tenemos instalado SQL Management Studio &lt;/li&gt;    &lt;li&gt;Estamos en la partición Linux y hay un problema que resolver &lt;/li&gt;    &lt;li&gt;Estamos en algún cliente y sólo tenemos acceso a internet &lt;/li&gt;    &lt;li&gt;Da mucha lata levantar la virtual con las herramientas “Developer Ranger” &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Pero por suerte, si nuestro proveedor soporta &lt;a title="myLittleAdmin - A Real SQL Server Management Tool" href="http://www.mylittleadmin.com" target="_blank"&gt;myLittleAdmin&lt;/a&gt; estamos salvado. Antes de todo, &lt;strike&gt;unos screenshots&lt;/strike&gt; unas pantallas: &lt;/p&gt;  &lt;p&gt;1. Modelo de Objetos&lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/09Sep/28_ObjectExplorer.JPG" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;2. Crear una tabla &lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/09Sep/28_NewTable.JPG" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;3. Crear un Registro &lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/09Sep/28_NewRow.JPG" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;4. Hacer un “Abrir Tabla” (Open Table) &lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/09Sep/28_OpenTable.JPG" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a title="myLittleAdmin - A Real SQL Server Management Tool" href="http://www.mylittleadmin.com" target="_blank"&gt;myLittleAdmin&lt;/a&gt;, es una herramienta como SQL Management Studio pero vía Web, es como el &lt;a title="phpMyAdmin - MySql" href="http://www.phpmyadmin.net" target="_blank"&gt;phpMyAdmin&lt;/a&gt; de &lt;a title="MySql" href="http://mysql.com/" target="_blank"&gt;MySql&lt;/a&gt;. Debido al costo de licencia su mayor ventaja se da en los proveedores de hosting. Si hay dos proveedores de hosting de ASP.NET y sólo uno de ellos soporta myLittleAdmin, es altamente recomendable que seleccionen el que soporta myLittleAdmin. &lt;/p&gt;  &lt;p&gt;Enlaces &lt;a title="myLittleAdmin - A Real SQL Server Management Tool" href="http://www.mylittleadmin.com" target="_blank"&gt;myLittleAdmin&lt;/a&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="Live Demo myLittleAdmin" href="http://livedemo.mylittleadmin.com/livedemo/" target="_blank"&gt;Live Demo&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="Installation Guide" href="http://livedemo.mylittleadmin.com/livedemo/installation%20guide.pdf" target="_blank"&gt;Installation Guide&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="Quick Start Guide" href="http://livedemo.mylittleadmin.com/livedemo/quick%20start%20guide.pdf" target="_blank"&gt;Quick Start Guide&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;P.D.: No hay beneficio por recomendar esta herramienta, &lt;strike&gt;lo cual si sucediera no me enojaría&lt;/strike&gt;, es sólo que me gusto y a veces prefiero usar esta en lugar del SQL Management Studio.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=182571" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category></item><item><title>Reciente vulnerabilidad de ASP.NET y BlogEngine.Net</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/21/reciente-vulnerabilidad-de-asp-net-y-blogengine-net.aspx</link><pubDate>Tue, 21 Sep 2010 18:26:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:182279</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=182279</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/21/reciente-vulnerabilidad-de-asp-net-y-blogengine-net.aspx#comments</comments><description>&lt;p&gt;Vamos a listar las noticias en orden cronol&amp;oacute;gico, para intentar entender la vulnerabilidad:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Miercoles 15-Sep, &lt;a title="Juliano Rizzo" href="http://www.ekoparty.org/juliano-rizzo-2010.php" target="_blank"&gt;Juliano Rizzo&lt;/a&gt; anunciaba a Clar&amp;iacute;n se iba a presentar una vulnerabilidad de ASP.NET durante la conferencia de seguridad &lt;a title="Ekoparty" href="http://www.ekoparty.org/" target="_blank"&gt;Ekoparty&lt;/a&gt;. Nota: &lt;a title="Uno de cada cuatro sitios web est&amp;aacute; expuesto a ciberataques" href="http://www.clarin.com/internet/cuatros-sitios-web-expuesto-ciberataques_0_335966623.html" target="_blank"&gt;Uno de cada cuatro sitios web est&amp;aacute; expuesto a ciberataques&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Jueves 16-Sep, El equipo de investigaci&amp;oacute;n, &lt;a title="Thai Duong" href="http://www.ekoparty.org/thai-duong-2010.php" target="_blank"&gt;Thai Duong&lt;/a&gt; and &lt;a title="Juliano Rizzo" href="http://www.ekoparty.org/juliano-rizzo-2010.php" target="_blank"&gt;Juliano Rizzo&lt;/a&gt;, de la vulnerabilidad p&amp;uacute;blica un video en youtube de como atacar y tomar el control total de un famoso CSM: DotNetNuke. Video: &lt;a title="POET vs ASP.NET: DotNetNuke" href="http://www.youtube.com/watch?v=yghiC_U2RaM" target="_blank"&gt;POET vs ASP.NET: DotNetNuke&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Viernes 17-Sep, El equipo presenta su investigaci&amp;oacute;n: &lt;a title="Padding Oracles Everywhere" href="http://www.ekoparty.org/cronograma.php" target="_blank"&gt;Padding Oracles Everywhere&lt;/a&gt;, en la conferencia de seguridad &lt;a title="Ekoparty" href="http://www.ekoparty.org/" target="_blank"&gt;Ekoparty&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Viernes 17-Sep, Microsoft lanza un bolet&amp;iacute;n de seguridad anunciando la vulnerabilidad de ASP.NET. Nota: &lt;a title="Microsoft Security Advisory (2416728)" href="http://www.microsoft.com/technet/security/advisory/2416728.mspx" target="_blank"&gt;Microsoft Security Advisory (2416728)&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Viernes 17-Sep, El blog oficial de Microsoft sobre Seguridad, explica los detalles sobre la vulnerabilidad. Nota: &lt;a title="Understanding the ASP.NET Vulnerability" href="http://blogs.technet.com/b/srd/archive/2010/09/17/understanding-the-asp-net-vulnerability.aspx" target="_blank"&gt;Understanding the ASP.NET Vulnerability&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Viernes 17-Sep, El blog Microsoft Security Response Center (MSRC), da la cara y dice que est&amp;aacute;n trabajando arduamente para parchar el problema. Nota: &lt;a title="Security Advisory 2416728 Released" href="http://blogs.technet.com/b/msrc/archive/2010/09/17/security-advisory-2416728-released.aspx" target="_blank"&gt;Security Advisory 2416728 Released&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;S&amp;aacute;bado 18-Sep, &lt;span style="text-decoration:line-through;"&gt;mientras tu est&amp;aacute;bas de parranda o recuperandote de la resaca del viernes&lt;/span&gt;, el gran ScottGu&amp;rsquo;s da una respuesta clara de como podemos evitar de alguna forma ser atacados explotando esta vulnerabilidad. Nota: &lt;a title="Important: ASP.NET Security Vulnerability" href="http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx" target="_blank"&gt;Important: ASP.NET Security Vulnerability&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;S&amp;aacute;bado 18-Sep, empezaron los rebotes de esta vulnerabilidad en &lt;a title="http://geeks.ms/blogs/" href="http://geeks.ms/blogs/" target="_blank"&gt;Geeks.ms&lt;/a&gt;: &lt;a title="[ASP.NET] Vulnerabilidad de Seguridad (Todas las versiones)" href="http://geeks.ms/blogs/fernandezja/archive/2010/09/18/asp-net-vulnerabilidad-de-seguridad-todas-las-versiones.aspx" target="_blank"&gt;[ASP.NET] Vulnerabilidad de Seguridad (Todas las versiones)&lt;/a&gt; y Importante!: &lt;a title="Vulnerabilidad de Seguridad detectada en ASP.NET" href="http://geeks.ms/blogs/gperez/archive/2010/09/18/importante-vulnerabilidad-de-seguridad-detectada-en-asp-net.aspx" target="_blank"&gt;Vulnerabilidad de Seguridad detectada en ASP.NET&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Domingo 19-Sep, el maestro &lt;a title="David Salgado" href="http://geeks.ms/blogs/dsalgado/default.aspx" target="_blank"&gt;David Salgado&lt;/a&gt; intenta describir y enteder la vulnerabilidad para la lengua hispana: &lt;a title="El 0 day de asp.net&amp;hellip; modo de evitarlo? y referencias" href="http://geeks.ms/blogs/dsalgado/archive/2010/09/19/el-0-day-de-asp-net-modo-de-evitarlo-y-referencias.aspx" target="_blank"&gt;El 0 day de asp.net&amp;hellip; modo de evitarlo? y referencias&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Lunes 20-Sep, ScottGu crea una FAQ sobre esta vulnerabilidad: &lt;a title="Frequently Asked Questions about the ASP.NET Security Vulnerability" href="http://weblogs.asp.net/scottgu/archive/2010/09/20/frequently-asked-questions-about-the-asp-net-security-vulnerability.aspx" target="_blank"&gt;Frequently Asked Questions about the ASP.NET Security Vulnerability&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Lunes 20-Sep, Wait&amp;hellip; SharePoint est&amp;aacute; construido sobre ASP.NET, Alberto Diaz con una entrada al respecto: &lt;a title="SharePoint 2010. Vulnerabilidad 0 days de ASP.NET" href="http://geeks.ms/blogs/adiazmartin/archive/2010/09/20/sharepoint-2010-vulnerabilidad-0-days-de-asp-net.aspx" target="_blank"&gt;SharePoint 2010. Vulnerabilidad 0 days de ASP.NET&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Lunes 20-Sep, El blog oficial de SharePoint responde a est&amp;aacute; vulnerabilidad: &lt;a title="Security Advisory 2416728 (Vulnerability in ASP.NET) and SharePoint" href="http://blogs.msdn.com/b/sharepoint/archive/2010/09/21/security-advisory-2416728-vulnerability-in-asp-net-and-sharepoint.aspx" target="_blank"&gt;Security Advisory 2416728 (Vulnerability in ASP.NET) and SharePoint&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Y as&amp;iacute; estamos&amp;hellip;&lt;/p&gt;
&lt;p&gt;Si no quieren leer todos los enlaces, el resumen de David Salgado sobre la vulnerabilidad:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;En resumen&lt;/b&gt;&amp;hellip; explota una vulnerabilidad relacionada con el algoritmo de cifrado que se utiliza en la autenticaci&amp;oacute;n por Forms. Va probando diferentes entradas y detectando la diferencia de respuesta de la aplicaci&amp;oacute;n para aprender y finalmente dar con una clave que da acceso.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Y si no queda claro a&amp;uacute;n, puede ver &lt;a href="http://www.youtube.com/watch?v=yghiC_U2RaM" target="_blank"&gt;el video con la demo completa&lt;/a&gt;. Y la soluci&amp;oacute;n que se tiene ahora, pasa por evitar &amp;ldquo;responder&amp;rdquo; a los intentos de usar esta vulnerabilidad. &amp;iquest;C&amp;oacute;mo?. Evitar que los atacantes obtengan informaci&amp;oacute;n usando los errores personalizados de ASP.NET (customErrors element, web.config).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;La vulnerabilidad y &lt;a title="BlogEngine" href="http://www.dotnetblogengine.net/" target="_blank"&gt;BlogEngine&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;No hay una respuesta oficial de BlogEngine, pero podemos hacer lo siguiente (para dormir tranquilos) hasta tener alguna respuesta oficial. Referencia: &lt;a title="http://jonalb.com/post/2010/09/20/AspNet-Vulnerability-and-BlogEngineNet.aspx" href="http://jonalb.com/post/2010/09/20/AspNet-Vulnerability-and-BlogEngineNet.aspx" target="_blank"&gt;The Asp.Net Vulnerability and DotNetBlogEngine.Net&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;1. Cambiar el elemento customErrors en el archivo web.config:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;customErrors&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;mode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;RemoteOnly&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;defaultRedirect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;~/error404.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;error&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;statusCode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;404&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;redirect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;error404.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;customErrors&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Por el siguiente:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;customErrors&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;mode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;On&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;redirectMode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ResponseRewrite&amp;quot;&lt;/span&gt; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;defaultRedirect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;~/fail.aspx&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2. Crear la siguiente p&amp;aacute;gina ASPX, y subirla a la carpeta root de BlogEngine:&lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%@ Import Namespace=&amp;quot;System.Security.Cryptography&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="background-color:#ffff00;"&gt;&amp;lt;%@ Import Namespace=&amp;quot;System.Threading&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;script&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;    void Page_Load() {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;       byte[] delay = new byte[1];&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;       RandomNumberGenerator prng = new RNGCryptoServiceProvider();&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;       prng.GetBytes(delay);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;       Thread.Sleep((int)delay[0]);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;         &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;       IDisposable disposable = prng as IDisposable;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;       if (disposable != null) { disposable.Dispose(); }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;     }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt; /script&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;html&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;head&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;Error&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;head&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;body&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;         An error occurred while processing your request.&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;body&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;html&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;A estar pendientes en estos d&amp;iacute;as, para ver que pasa con esta vulnerabilidad.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=182279" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Seguridad/default.aspx">Seguridad</category></item><item><title>ScrumPeak (y una chiquita sobre ASP.NET MVC en IIS)</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/07/scrumpeak-y-una-chiquita-sobre-asp-net-mvc-en-iis.aspx</link><pubDate>Tue, 07 Sep 2010 21:56:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:181604</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=181604</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/09/07/scrumpeak-y-una-chiquita-sobre-asp-net-mvc-en-iis.aspx#comments</comments><description>&lt;p&gt;Como no andamos con mucho tiempo, vamos a hacer breves: &lt;/p&gt;
&lt;p&gt;&lt;a title="ScrumPeak" href="http://scrumpeak.codeplex.com/" target="_blank"&gt;ScrumPeak&lt;/a&gt;, es una Aplicaci&amp;oacute;n Web para el seguimiento de proyectos con la caracter&amp;iacute;stica que soporta &lt;a title="Scrum on Geeks.ms" href="http://geeks.ms/search/SearchResults.aspx?q=Scrum" target="_blank"&gt;Scrum&lt;/a&gt;. Para que tengan una idea de lo que se puede hacer con la web, dejo la siguiente pantalla: &lt;/p&gt;
&lt;p&gt;&lt;img alt="http://sergiot2.com/blogimages/2010/09Sep/07_ScrumPeak.JPG" src="http://sergiot2.com/blogimages/2010/09Sep/07_ScrumPeak.JPG" /&gt;&lt;/p&gt;
&lt;p&gt;Por otro lado, la aplicaci&amp;oacute;n Web fue desarrollada con ASP.NET MVC, y si est&amp;aacute;n en una versi&amp;oacute;n de Windows que no tiene IIS 7 en modo Integrado, deben seguir algunos pasos adicionales para permitir la ejecuci&amp;oacute;n de la Web. &lt;/p&gt;
&lt;p&gt;En este caso de &lt;a title="ScrumPeak" href="http://scrumpeak.codeplex.com/" target="_blank"&gt;ScrumPeak&lt;/a&gt;, como no disponemos del c&amp;oacute;digo fuente, la mejor opci&amp;oacute;n ser&amp;iacute;a habilitar que el mapeo todas las solicitudes del usuario sean hecho por asp.net, para lo cual, hacemos lo siguiente: &lt;/p&gt;
&lt;p&gt;&lt;img alt="http://sergiot2.com/blogimages/2010/09Sep/07_ASP.NET_MVC_IIS_XP.JPG" src="http://sergiot2.com/blogimages/2010/09Sep/07_ASP.NET_MVC_IIS_XP.JPG" /&gt;&lt;/p&gt;
&lt;p&gt;Esta opci&amp;oacute;n de habilitar el mapeo en el IIS no es recomendable porque afecta el rendmiento de la aplicaci&amp;oacute;n. Asumiendo que el portal ser&amp;aacute; para uso interno, de equipos peque&amp;ntilde;os y estar&amp;aacute; en el servidor de desarrollo, no debemos notar esto. En una Aplicaci&amp;oacute;n Web para toda la internet, esta decisi&amp;oacute;n no debe ser la primera. &lt;/p&gt;
&lt;p&gt;Algunos enlaces relacionados:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Explicando Scrum a mi abuela" href="http://geeks.ms/blogs/jorge/archive/2007/05/09/explicando-scrum-a-mi-abuela.aspx" target="_blank"&gt;Explicando Scrum a mi abuela&lt;/a&gt; by &lt;a title="Jorge Serrano - MVP Visual Developer - Visual Basic" href="http://geeks.ms/blogs/jorge/default.aspx" target="_blank"&gt;Jorge Serrano&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.proyectalis.com/2008/02/26/scrum-y-xp-desde-las-trincheras/"&gt;Scrum y XP desde las trincheras&lt;/a&gt; (&lt;a title="Scrum y XP desde las trincheras" href="http://www.proyectalis.com/wp-content/uploads/2008/02/scrum-y-xp-desde-las-trincheras.pdf" target="_blank"&gt;PDF file&lt;/a&gt;) - &lt;a title="proyectalis" href="http://www.proyectalis.com" target="_blank"&gt;proyectalis&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Scrum on Geeks.ms" href="http://geeks.ms/search/SearchResults.aspx?q=Scrum" target="_blank"&gt;Scrum on Geeks.ms&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Using ASP.NET MVC with Different Versions of IIS" href="http://www.asp.net/mvc/tutorials/using-asp-net-mvc-with-different-versions-of-iis-cs" target="_blank"&gt;Using ASP.NET MVC with Different Versions of IIS&lt;/a&gt; - &lt;a title="ASP.NET MVC Team" href="http://www.asp.net/mvc" target="_blank"&gt;ASP.NET MVC Team&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Deploying ASP.NET MVC to IIS 6" href="http://blog.stevensanderson.com/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/" target="_blank"&gt;Deploying ASP.NET MVC to IIS 6&lt;/a&gt; by &lt;a href="http://blog.stevensanderson.com/"&gt;Steve Sanderson&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://itscommonsensestupid.blogspot.com/2008/11/deploy-aspnet-mvc-app-on-windows-xp-iis.html"&gt;Deploy ASP.NET MVC App on Windows XP (IIS 5.1)&lt;/a&gt; by &lt;a title="Ngu Soon ***" href="http://itscommonsensestupid.blogspot.com/" target="_blank"&gt;Ngu Soon ***&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=181604" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/IIS/default.aspx">IIS</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Samples+WebSite/default.aspx">Samples WebSite</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/MVC/default.aspx">MVC</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Scrum/default.aspx">Scrum</category></item><item><title>[WebForms] Todavía no usas el ObjectDataSource?</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2010/07/16/webforms-todav-237-a-no-usas-el-objectdatasource.aspx</link><pubDate>Fri, 16 Jul 2010 18:12:01 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:179457</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=179457</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/07/16/webforms-todav-237-a-no-usas-el-objectdatasource.aspx#comments</comments><description>&lt;p&gt;Este es el intento N, de enviar un post de introducción al &lt;strong&gt;ObjectDataSource&lt;/strong&gt;. Muchos post extensos se han quedado en el draft, veremos si este ve la luz. &lt;/p&gt;  &lt;p&gt;ASP.NET disponible de varios controles para mostrar datos: GridView, ListView, DataList, Repeater, el mismo FormView. En cuanto controles para el artículo vamos a usar el GridView y el FormView. Veamos algunos ejemplos y al final intentamos definir al ObjectDataSource.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Mostrando datos&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;La forma tradicional, es el clásico: &lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//enlazar gridView&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; grdCategories.DataSource = blCatManager.GetAll();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; grdCategories.DataBind(); &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Con el ObjectDataSource no hago nada y todo es declarativo: &lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:GridView&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;grdCategories&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;        &lt;span style="color:#ff0000;"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;DataKeyNames&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryID&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;DataSourceID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;odsCategorias&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Columns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#008000;"&gt;&amp;lt;!-- Aqui Columnas --&amp;gt;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Columns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:GridView&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ObjectDataSource&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;odsCategorias&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;OldValuesParameterFormatString&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;original_{0}&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;SelectMethod&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;getAll&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;TypeName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryManager&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ObjectDataSource&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Este código no hay que aprenderlo de memoria, lo puede generar el asistente. Para grandes cantidades de información debemos usar paginación personalizada, el control GridView + ObjectDataSource, soportan esto de manera transparente, sólo hay que agregar un método count y mapearlo. Revisar más detalles en el siguiente artículo: &lt;a title="Paginando Eficientemente en ASP.NET" href="http://geeks.ms/blogs/gperez/archive/2009/03/02/paginando-eficientemente-en-asp-net.aspx"&gt;Paginando Eficientemente en ASP.NET&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ingreso de datos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Creo que este es el fuerte de los ObjectDataSource y una de las cosas por la cual lo uso en todos los proyectos de ASP.NET en que participo. Cuando he tenido la oportunidad de integrar nuevos equipos de desarrollo o visitar a algunos, muchos todavía siguen con el clásico recuperar/asignar el contenido de las cajas de texto de uno a uno, muchas veces por el desconocimiento de la existencia del control ObjectDataSource. Después de unas demos con el ObjectDataSource, también terminan adoptándolo, salvo algunos casos en que resisten al cambio, y trabajar con mas orden o porque tienen el famoso código: “mírame y no me toques”. &lt;strike&gt;si ese código donde si cambias un C= A + B, a C = B + A, la aplicación completa deja de funcionar&lt;/strike&gt;.&lt;/p&gt;

&lt;p&gt;Si quiere cargar el detalle de un registro en un formulario que tengo que hacer: &lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//asignar información de objetos a las cajas de texto&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; CategoryNameTextBox.Text = objItem.CategoryName; &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Y por el contrario si quiero recuperar el objeto para guardarlo en la base de datos, lo primero que debo hacer es recuperarlo de la caja de texto: &lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//recuperar la información de las cajas de texto, para guardarlas en un objeto&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; objItem.CategoryName = CategoryNameTextBox.Text; &lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Un control FormView + ObjectDataSource, hace esto por ti, y todo de manera declarativa: &lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:FormView&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;frvDetCategoria&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;DataKeyNames&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryID&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;DataSourceID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;odsCatDetails&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;EditItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;        CategoryID:&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Label&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryIDLabel1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;#39;&amp;lt;%# Eval(&amp;quot;CategoryID&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;br&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;        CategoryName:&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:TextBox&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryNameTextBox&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;#39;&amp;lt;%# Bind(&amp;quot;CategoryName&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;br&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;        CategoryDescription:&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:TextBox&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryDescriptionTextBox&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;#39;&amp;lt;%# Bind(&amp;quot;CategoryDescription&amp;quot;) %&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;br&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:LinkButton&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;UpdateButton&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;CausesValidation&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;CommandName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Update&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Actualizar&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt;        &lt;span style="color:#ff0000;"&gt;&amp;amp;nbsp;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:LinkButton&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;UpdateCancelButton&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;CausesValidation&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;CommandName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Cancel&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Cancelar&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;EditItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;InsertItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#800000;"&gt;--&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;El&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;formulario&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;insert&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;puede&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt;             &lt;span style="color:#ff0000;"&gt;ser&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;distinto&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;por&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ya&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;no&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;se&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt;              &lt;span style="color:#ff0000;"&gt;actualiza&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;los&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;campos&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;claves&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;--&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;InsertItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum27"&gt;  27:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#800000;"&gt;--&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Informacion&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;solo&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;lectura&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;--&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum28"&gt;  28:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:FormView&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum29"&gt;  29:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ObjectDataSource&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;odsCatDetails&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum30"&gt;  30:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;DataObjectTypeName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Category&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;DeleteMethod&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Delete&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum31"&gt;  31:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;InsertMethod&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Insert&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum32"&gt;  32:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;OldValuesParameterFormatString&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;original_{0}&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum33"&gt;  33:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;SelectMethod&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;getOneByID&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum34"&gt;  34:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;TypeName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;CategoryManager&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;UpdateMethod&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Update&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum35"&gt;  35:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum36"&gt;  36:&lt;/span&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ControlParameter&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ControlID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;grdCategories&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum37"&gt;  37:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;categoryID&amp;quot;&lt;/span&gt; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum38"&gt;  38:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;PropertyName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;SelectedValue&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Int32&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum39"&gt;  39:&lt;/span&gt;      &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum40"&gt;  40:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ObjectDataSource&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Con el control FormView se puede hacer prácticamente todo tipo de mantenimiento, se puede poner combos dentro de el y además que esté enlazados a base de datos a través de otro control ObjectDataSource. Podemos decir que el &lt;strong&gt;ObjectDataSource&lt;/strong&gt; es un motorcito que permite mapear automáticamente controles de datos (tanto para mostrar como para recuperar) con clases y objetos. Imaginen un formulario de 20 campos y tener que asignar/recuperar uno por uno. Con el ObjectDataSource no es nada.&lt;/p&gt;

&lt;p&gt;Para terminar, si están desarrollando en ASP.NET con WebForms, los animo a intentar usar el FormView + ObjectDataSource en los escenarios de mantenimiento que tengan, y si tienen alguna duda, puede dejar sus comentarios y vemos como los ayudamos. En base a las preguntas que tengan, podemos hacer ejemplos más elaborados y más puntuales.&lt;/p&gt;

&lt;p&gt;Pueden descargar la aplicación ejemplo aquí: &lt;a title="CRUD usando ObjectDataSource" href="http://geeks.ms/media/p/179456.aspx" target="_blank"&gt;CRUD usando ObjectDataSource&lt;/a&gt;. (completar los acceso a datos del Insert, Update, Delete).&lt;/p&gt;

&lt;p&gt;Página en el navegador:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/07Jul/16_ObjectDataSource_FormView.JPG" alt="" /&gt;&lt;/p&gt;

&lt;p&gt;El código que tiene la página aspx es:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//pagina ASPX&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; wfCategories : System.Web.UI.Page&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;La clase que use para el &lt;strong&gt;ObjectDataSource&lt;/strong&gt; es la siguiente:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//CategoryManager&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;using&lt;/span&gt; System.ComponentModel;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt; [DataObject]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; CategoryManager&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;   &lt;span style="color:#cc6633;"&gt;#region&lt;/span&gt; GetAll, getOne&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;   [DataObjectMethod(DataObjectMethodType.Select, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; List&amp;lt;Category&amp;gt; getAll()&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;     CategoryRepository catRep = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CategoryRepository();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; catRep.getAll();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;   }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt;   [DataObjectMethod(DataObjectMethodType.Select, &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; Category getOneByID(Int32 categoryID)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;     CategoryRepository catRep = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; CategoryRepository();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; catRep.getOneByID(categoryID);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt;   }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum27"&gt;  27:&lt;/span&gt;   &lt;span style="color:#cc6633;"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum28"&gt;  28:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum29"&gt;  29:&lt;/span&gt;   &lt;span style="color:#cc6633;"&gt;#region&lt;/span&gt; Insert, Update, Delete&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum30"&gt;  30:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum31"&gt;  31:&lt;/span&gt;   [DataObjectMethod(DataObjectMethodType.Insert,&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum32"&gt;  32:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Insert(Category objItem)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum33"&gt;  33:&lt;/span&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum34"&gt;  34:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//pendiente de implementacion&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum35"&gt;  35:&lt;/span&gt;   }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum36"&gt;  36:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum37"&gt;  37:&lt;/span&gt;   [DataObjectMethod(DataObjectMethodType.Update, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum38"&gt;  38:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Update(Category objItem)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum39"&gt;  39:&lt;/span&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum40"&gt;  40:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//pendiente de implementacion&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum41"&gt;  41:&lt;/span&gt;   }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum42"&gt;  42:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum43"&gt;  43:&lt;/span&gt;   [DataObjectMethod(DataObjectMethodType.Delete, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)]&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum44"&gt;  44:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Delete(Category objItem)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum45"&gt;  45:&lt;/span&gt;   {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum46"&gt;  46:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//pendiente de implementacion&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum47"&gt;  47:&lt;/span&gt;   }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum48"&gt;  48:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum49"&gt;  49:&lt;/span&gt;   &lt;span style="color:#cc6633;"&gt;#endregion&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:#f4f4f4;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum50"&gt;  50:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;border-right-style:none;background-color:white;margin:0em;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;font-size:8pt;border-left-style:none;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum51"&gt;  51:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=179457" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ObjectDataSource/default.aspx">ObjectDataSource</category></item><item><title>Publicando Aplicaciones Web Sobre IIS: Web Site, Virtual Directory, y Application</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2010/06/02/publicando-aplicaciones-web-sobre-iis-web-site-virtual-directory-y-application.aspx</link><pubDate>Thu, 03 Jun 2010 03:08:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:177593</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=177593</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/06/02/publicando-aplicaciones-web-sobre-iis-web-site-virtual-directory-y-application.aspx#comments</comments><description>&lt;p&gt;Esta entrada gira alrededor de IIS 6.0, pero los conceptos tambi&amp;eacute;n se pueden aplicar a IIS 7.0. &lt;/p&gt;
&lt;p&gt;Hay un error muy conocido cuando publicamos una aplicaci&amp;oacute;n ASP.NET a IIS: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;It is an error to use a section registered as allowDefinition=&amp;#39;MachineToApplication&amp;#39; beyond application level.&amp;nbsp; This error can be caused by a virtual directory not being configured as an application in IIS. &lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Si deseamos publicar una aplicaci&amp;oacute;n Web ASP.NET sobre IIS 6.0 en Windows Server 2003, debes poder diferenciar tres conceptos: Web Site, Virtual Directory, y Application. Estos t&amp;eacute;rminos no los traducir&amp;eacute; en los siguientes p&amp;aacute;rrafos, para no generar confusi&amp;oacute;n en la definici&amp;oacute;n de los mismos. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Web Site&lt;/b&gt;: Es la ruta base de una aplicaci&amp;oacute;n Web, y que se corresponde con un nombre de dominio o una ip de red: &lt;a href="http://sergiot2.com"&gt;http://sergiot2.com&lt;/a&gt;, o &lt;a href="http://servidorInformes"&gt;http://servidorInformes&lt;/a&gt;. Por ejemplo, si estamos desarrollando un portal de reportes, y despu&amp;eacute;s de publicar nuestra aplicaci&amp;oacute;n tenemos que acceder as&amp;iacute;: &lt;a href="http://serv2010/Reportes/"&gt;http://serv2010/Reportes/&lt;/a&gt;, es por que no la hemos publicado a nivel de Web Site. Si la publicamos a nivel de Web Site, debemos poder acceder a la aplicaci&amp;oacute;n s&amp;oacute;lo ingresando la ruta: &lt;a href="http://serv2010/"&gt;http://serv2010/&lt;/a&gt;. Mas claro el concepto de Web Site? &lt;/p&gt;
&lt;p&gt;En IIS podemos tener m&amp;uacute;ltiples Web Sites, y que b&amp;aacute;sicamente se pueden diferenciar por el puerto usado y la carpeta. Por ejemplo, cuando se instala IIS crea un Default Web Site, que apunta a: C:\inetpub\wwwroot\, y apunta al puerto 80. Cuando instalamos SharePoint, este crear varios Web Site, que usan otros puertos, dependiendo de la configuraci&amp;oacute;n seleccionada. Otro es caso en la instalaci&amp;oacute;n de Reporting Services, que por defecto se instala s&amp;oacute;lo como un Application dentro de un Web Site. &lt;/p&gt;
&lt;p&gt;&lt;img title="Web Site - sergiot2.com" alt="Web Site - sergiot2.com" src="http://sergiot2.com/blogimages/2010/06Jun/02_WebSites_sergiot2.com.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Virtual Directory&lt;/b&gt;: Un &amp;ldquo;directorio virtual&amp;rdquo; sirve para mapear una subdirecci&amp;oacute;n de un Web Site a otra carpeta. Imaginen que un Web Site de venta de autos, &lt;a href="http://crediAutos.com/"&gt;http://crediAutos.com/&lt;/a&gt; alojado en &amp;ldquo;C:\inetpub\wwwroot\&amp;rdquo;, que desea usar las im&amp;aacute;genes que est&amp;aacute;n en otro disco duro: &amp;ldquo;F:\imageAutos&amp;rdquo;, si deseamos cargar las im&amp;aacute;genes en la siguiente ruta: &lt;a href="http://crediAutos.com/images"&gt;http://crediAutos.com/images&lt;/a&gt; sin mover los archivos f&amp;iacute;sicos, es ah&amp;iacute; cuando podemos crear un Virtual Directory dentro del Web Site. Veamos la configuraci&amp;oacute;n del siguiente ejemplo: &lt;/p&gt;
&lt;p&gt;&lt;img title="Web Site Configuraton - Sergiot2.com" alt="Web Site Configuraton - Sergiot2.com" src="http://sergiot2.com/blogimages/2010/06Jun/02_VirtualDirectory_sergiot2.com.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Y si lo vemos en el navegador: &lt;/p&gt;
&lt;p&gt;&lt;img title="Web Site Sample - sergiot2.com" alt="Web Site Sample - sergiot2.com" src="http://sergiot2.com/blogimages/2010/06Jun/02_VirtualDirectory_test.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;Si colocamos p&amp;aacute;ginas aspx dentro de un Virtual Directory, funcionar&amp;aacute; siempre y cuando y no tenga un archivo web.config con elementos de aplicaci&amp;oacute;n, por llamarlo as&amp;iacute;. Por ejemplo dentro de un Virtual Directory, que es un sub-directorio de nuestro Web Site, podemos colocar un archivo web.config con el elemento &lt;b&gt;&lt;a title="Authorization Element - ASP.NET" href="http://msdn.microsoft.com/en-us/library/8d82143t.aspx" target="_blank"&gt;authorization&lt;/a&gt;&lt;/b&gt;, como se menciona &lt;a href="http://geeks.ms/blogs/ivan/archive/2007/02/08/es-incorrecto-utilizar-una-secci-n-registrada-como-allowdefinition-machinetoapplication-mas-all-del-nivel-de-aplicaci-n.aspx" target="_blank"&gt;en esta entrada&lt;/a&gt;. Pero no podemos colocar un elemento &lt;a title="Authentication Elemento - ASP.NET" href="http://msdn.microsoft.com/en-us/library/532aee0e.aspx" target="_blank"&gt;Authentication&lt;/a&gt; dentro de un web.config de un Virtual Directoty, debido a que este elemento s&amp;oacute;lo se permite a nivel de aplicaci&amp;oacute;n. De ah&amp;iacute; el problema origen. &lt;/p&gt;
&lt;p&gt;Si queremos que nuestro Virtual Directory se comporte como una aplicaci&amp;oacute;n aparte, es decir tenga un web.config con el elemento Authentication, para poder manejar su propia autenticaci&amp;oacute;n distinta al Web Site base, debemos convertir este Virtual Directory en un ASP.NET Application. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Application&lt;/b&gt;: Tambi&amp;eacute;n podemos llamarlo ASP.NET Application, y se crea de la misma forma que un Virtual Directory, pero con la diferencia de que si puede comportarse como una aplicaci&amp;oacute;n ASP.NET independiente, es decir puede tener su propio Application Pool, puede tener su propia versi&amp;oacute;n de ASP.NET y el web.config permite elementos de aplicaci&amp;oacute;n como el famoso Authentication del error inicial. Se pueden crear varios ASP.NET Applications dentro de un Web Site, como se muestra en la siguiente figura: &lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/06Jun/02_Applications_aspnet_sergiot2.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Caso de la Vida Real&lt;/b&gt;: Un amigo X ten&amp;iacute;a el problema mencionado al inicio, cuando publico su aplicaci&amp;oacute;n ASP.NET en el hosting de otro amigo due&amp;ntilde;o, por cierto el hosting en menci&amp;oacute;n es &lt;a title="dattatec.com - Su hosting hecho simple" href="http://www.dattatec.com" target="_blank"&gt;dattatec.com&lt;/a&gt;. Digamos que el due&amp;ntilde;o del hosting ten&amp;iacute;a su aplicaci&amp;oacute;n ASP.NET a nivel del Web Site del IIS, es decir: &lt;a href="http://todoautos.com.pe"&gt;http://todoautos.com.pe&lt;/a&gt;, el amigo del due&amp;ntilde;o ten&amp;iacute;a una aplicaci&amp;oacute;n ASP.NET que quer&amp;iacute;a probar, entonces publico su aplicaci&amp;oacute;n como un subdirectorio para no afectar la aplicaci&amp;oacute;n del due&amp;ntilde;o. Pero no funcionaba ninguna aspx, debido al error mencionado arriba. Dentro del panel de control de dattatec (dentro de lo que pude revisar a simple vista) s&amp;oacute;lo se pod&amp;iacute;a convertir la carpeta del amigo invitado en un Virtual Directory, pero no hab&amp;iacute;a ninguna opci&amp;oacute;n para convertirlo en un ASP.NET Application, y segu&amp;iacute;a el famoso problema del inicio. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;La soluci&amp;oacute;n pasar&amp;iacute;a&lt;/b&gt;, si es que no hay una opci&amp;oacute;n en el panel del control, mandar un correo al proveedor para que cree el Application manualmente, debe haber un administrador que monitorea los servidores no?. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Consejo&lt;/b&gt;: cuando renten un hosting, validen si se pueden crear muchos Virtual Directory y ASP.NET Application, pregunten por los dos por si ellos no tienen claro la diferencia entre los mismos. &lt;/p&gt;
&lt;p&gt;Por cierto, un proveedor de hosting no tendr&amp;iacute;a sentido habilitar la creaci&amp;oacute;n de Virtual Directory, porque no es l&amp;oacute;gico que administren carpetas en distintas ubicaciones para el mismo usuario, &amp;iquest;ser&amp;aacute; que pensaron que una aplicaci&amp;oacute;n ASP.NET pod&amp;iacute;a correr en un Virtual Directory? Bueno si alguien tiene su hosting en Dattatec.com, y sabe m&amp;aacute;s del tema, lo comenta por favor.&lt;/p&gt;
&lt;p&gt;Lecturas complementarias: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Quick Review: How does IIS map applications and sites?" href="http://weblogs.asp.net/scottgu/archive/2005/08/23/423409.aspx" target="_blank"&gt;Quick Review: How does IIS map applications and sites?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a title="Virtual Directory versus Application" href="http://forums.asp.net/t/1327183.aspx" target="_blank"&gt;Virtual Directory versus Application&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saludos, &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=177593" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/IIS/default.aspx">IIS</category></item><item><title>[CodeSnippet] Enviar cuando correo cuando el usuario use Internet Explorer 6 (IE6)</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2010/04/27/codesnippet-enviar-cuando-correo-cuando-el-usuario-use-internet-explorer-6-ie6.aspx</link><pubDate>Tue, 27 Apr 2010 17:51:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:175681</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=175681</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/04/27/codesnippet-enviar-cuando-correo-cuando-el-usuario-use-internet-explorer-6-ie6.aspx#comments</comments><description>&lt;p&gt;Internet Explorer 6, es una de esas piedritas por la que a veces uno tiene que pensar, &amp;iquest;damos soporte para IE6 o no?, claro hablando de dise&amp;ntilde;o. &lt;/p&gt;
&lt;p&gt;En un proyecto actual para una intranet, hemos decidido no dar soporte para IE6, &lt;span style="text-decoration:line-through;"&gt;no estresarnos haciendo dise&amp;ntilde;os web paralelos&lt;/span&gt;. IE6, fue lanzado all&amp;aacute; por el 2001, y como que ya va siendo hora de ni siquiera mencionarlo cuando definamos los navegadores a soportar por nuestra web. [Extra]: &lt;a title="Mat&amp;oacute; IE6 la marca Internet Explorer??" href="http://geeks.ms/blogs/dsalgado/archive/2009/10/08/mat-243-ie6-la-marca-internet-explorer.aspx" target="_blank"&gt;Mat&amp;oacute; IE6 la marca Internet Explorer??&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Regresando al tema, no vamos a bloquear a los usuarios que ingresen con IE6, lo que vamos hacer es enviar un email a Soporte, para actualizar a los usuarios que a&amp;uacute;n est&amp;aacute;n usando IE6. &lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ValidarIExplore()&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (HttpContext.Current.Request.Browser.Type.ToUpper() == &lt;span style="color:#006080;"&gt;&amp;quot;IE6&amp;quot;&lt;/span&gt;)&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;   {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     String fromEmail = ConfigurationManager.AppSettings[&lt;span style="color:#006080;"&gt;&amp;quot;emailAdmin&amp;quot;&lt;/span&gt;];&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     String toEmail = ConfigurationManager.AppSettings[&lt;span style="color:#006080;"&gt;&amp;quot;emailSoporte&amp;quot;&lt;/span&gt;];&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;     String subject = String.Format(&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;           &lt;span style="color:#006080;"&gt;&amp;quot;[{0}], necesita actualizar internet explorer&amp;quot;&lt;/span&gt;, &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;           HttpContext.Current.User.Identity.Name);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     String message = String.Format(&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;             &lt;span style="color:#006080;"&gt;@&amp;quot;Sres. de soporte, &amp;lt;br/&amp;gt; El usuario {0} necesita actualizar [...] &amp;quot;&lt;/span&gt;,&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;             HttpContext.Current.User.Identity.Name);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;     SendEmail(fromEmail, toEmail, subject, message);&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;   }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;El m&amp;eacute;todo es sencillo, y como tengo una p&amp;aacute;gina base para todos mis formularios web, aplico lo siguiente: &lt;/p&gt;
&lt;div id="codeSnippetWrapper"&gt;
&lt;div style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;" id="codeSnippet"&gt;
&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;abstract&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; ReportPageBase : System.Web.UI.Page&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;   {&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//si no esta logueado reenviarlo&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!User.Identity.IsAuthenticated) { Response.Redirect(&lt;span style="color:#006080;"&gt;&amp;quot;~/login.aspx&amp;quot;&lt;/span&gt;); }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//validar browser&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;     Helper.ValidarIExplore();&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     &lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//other code&lt;/span&gt;&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:white;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;   }&lt;/pre&gt;

&lt;pre style="border-style:none;text-align:left;padding:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;width:100%;font-family:&amp;#39;Courier New&amp;#39;,courier,monospace;direction:ltr;color:black;font-size:8pt;overflow:visible;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Para enviar correos desde ASP.NET, consulte la &lt;a title="http://geeks.ms/blogs/jalarcon/archive/2007/06/23/c-243-mo-enviar-correo-electr-243-nico-por-c-243-digo-usando-cuentas-de-gmail.aspx" href="http://geeks.ms/blogs/jalarcon/archive/2007/06/23/c-243-mo-enviar-correo-electr-243-nico-por-c-243-digo-usando-cuentas-de-gmail.aspx" target="_blank"&gt;siguiente entrada&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Saludos, &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=175681" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Code+Snippets/default.aspx">Code Snippets</category></item><item><title>ASP.NET WebForms vs ASP.NET MVC, la nueva batalla</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2010/03/26/171454.aspx</link><pubDate>Fri, 26 Mar 2010 19:47:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:171454</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=171454</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/03/26/171454.aspx#comments</comments><description>&lt;p&gt;&lt;img title="ASP.NET Web Forms, basado en armar todo por componentes" alt="ASP.NET Web Forms, basado en armar todo por componentes" src="http://sergiot2.com/blogimages/2010/03Mar/26_aspnet_WebForms.jpg" /&gt;&amp;nbsp; &lt;img title="ASP.NET MVC - basado en construir todo el renderizado tu mismo" alt="ASP.NET MVC - basado en construir todo el renderizado tu mismo" src="http://sergiot2.com/blogimages/2010/03Mar/26_aspnet_mvc.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;Uacute;ltimamente los debates de C# o VB.Net quedaron atr&amp;aacute;s, ahora los nuevos debates dentro del mundillo .Net est&amp;aacute;n entre usar ASP.NET Web Forms o ASP.NET MVC. Imaginen la desorientaci&amp;oacute;n sobre el tema, que hasta se dedico una sesi&amp;oacute;n del &lt;a title="MIX 2009" href="http://videos.visitmix.com/MIX09/T23F"&gt;MIX 2009&lt;/a&gt; a tratar sobre este tema: &lt;a title="Choosing between ASP.NET Web Forms and MVC" href="http://videos.visitmix.com/MIX09/T23F" target="_blank"&gt;Choosing between ASP.NET Web Forms and MVC&lt;/a&gt;. En los inicios de ASP.NET su principal objetivo era ganar terreno a PHP, JSP, y las otras tecnolog&amp;iacute;as existentes, vendiendo que hacer aplicaciones Web era como hacer aplicaciones Windows, aunque haya un trabajo extra por detr&amp;aacute;s. Con los a&amp;ntilde;os de este Framework el uso de la comunidad ha hecho los Web Forms evolucionen, esfuerzos como reducir el tama&amp;ntilde;o del ViewState, los CSS Adapters, los Starter Kits, las buenas pr&amp;aacute;cticas, entre otras, han ido mejorando el Framework. De hecho no creo que de Microsoft escuchemos no usen Web Forms, ahora usen ASP.NET MVC, por que por parte de ellos y de la comunidad hubo un gran esfuerzo,&lt;span style="text-decoration:line-through;"&gt; y mucho cari&amp;ntilde;o&lt;/span&gt;, por hacer que los Web Forms, sean un buen Framework de desarrollo Web.&lt;/p&gt;
&lt;p&gt;Antes de empezar quisiera usar y resaltar esta l&amp;iacute;nea de un post de &lt;a title="ScottGu Blog" href="http://weblogs.asp.net/scottgu/default.aspx" target="_blank"&gt;ScottGu&lt;/a&gt; relacionado con esta discusi&amp;oacute;n, &lt;a title="About Technical Debates (and ASP.NET Web Forms and ASP.NET MVC debates in particular)" href="http://weblogs.asp.net/scottgu/archive/2010/01/24/about-technical-debates-both-in-general-and-regarding-asp-net-web-forms-and-asp-net-mvc-in-particular.aspx" target="_blank"&gt;About Technical Debates (and ASP.NET Web Forms and ASP.NET MVC debates in particular)&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Great developers using bad tools/frameworks can make great apps. Bad developers using great tools/frameworks can make bad apps.&amp;rdquo; &lt;/p&gt;
&lt;p&gt;Al citar esta cifra, creo que deben tener un idea de cual es mi punto de vista. Ahora dividamos el problema, vamos a establecer dos grupos de usuarios para dar nuestros comentarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;Grupo de usuarios experimentados de ASP.NET&lt;/span&gt;, que tienen varios proyectos en producci&amp;oacute;n y que no han tenido problemas de rendimiento, tiempo de respuesta, etc, cuando han desarrollado proyectos usando &lt;b&gt;WebForms&lt;/b&gt;. &lt;/li&gt;
&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;Grupo de usuarios nuevos de ASP.NET&lt;/span&gt; (y en general nuevos en el desarrollo Web), cuyo primero contacto fue hacer proyectos Web usando ASP.NET, y que no han tenido buenos resultados, han tenido problemas de rendimiento, de tiempo de respuesta, de dise&amp;ntilde;o, y todos los que encontramos en los foros. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Usando el mismo patr&amp;oacute;n que recomend&amp;oacute; Jorge Serrano en este art&amp;iacute;culo, &lt;a title="C# o VB, VB o C#,... la envidia me corroe" href="http://geeks.ms/blogs/jorge/archive/2008/04/18/c-o-vb-vb-o-c-la-envidia-me-corroe.aspx" target="_blank"&gt;C# o VB, VB o C#,... la envidia me corroe&lt;/a&gt;, si eres un usuario experimentando, no necesitas recomendaciones, s&amp;oacute;lo revisar las caracter&amp;iacute;sticas de ASP.NET MVC y ver si alguna de ellas es la estabas buscando: &lt;a title="ASP.NET MVC Overview" href="http://msdn.microsoft.com/en-us/library/dd381412%28VS.100%29.aspx" target="_blank"&gt;ASP.NET MVC Overview&lt;/a&gt;. Cerramos el tema con ellos, y nos dedicamos a los usuarios nuevos en el desarrollo Web y que van a empezar con ASP.NET.&lt;/p&gt;
&lt;p&gt;El problema para los nuevos usuarios, y para los que toman como cierto el mensaje: &amp;ldquo;Desarrolla Aplicaciones Web como si lo hicieras con Windows Forms, s&amp;oacute;lo arrastras controles y ya tienes tu Aplicaci&amp;oacute;n Web&amp;rdquo;. Y lo toman literalmente, &lt;a title="no necesitan aprender la diferencia entre POST Y GET" href="http://geeks.ms/blogs/sergiotarrillo/archive/2008/08/25/95868.aspx" target="_blank"&gt;no necesitan aprender la diferencia entre POST Y GET&lt;/a&gt;, no hay porque aprender el significado de QueryString, no es necesario saber si es malo guardar un DataSet en el ViewState de la p&amp;aacute;gina, s&amp;oacute;lo la hago para ya no consultar la base de datos y no tener lenta mi aplicaci&amp;oacute;n, no se preocupan en aprender HTML, no se preocupan en aprender JavaScript, entre todas las otras que suelen dejarse de aprender. &lt;/p&gt;
&lt;p&gt;Entonces si eres un usuario nuevo en ASP.NET (y si no eres nuevo y no sabes que que usa POST o GET), la recomendaci&amp;oacute;n b&amp;aacute;sica es aprender los fundamentos del desarrollo Web:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Programando Web para principiantes I" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032336422&amp;amp;culture=es-ES" target="_blank"&gt;Programando Web para principiantes I&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Programando Web para principiantes II" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032336425&amp;amp;culture=es-ES" target="_blank"&gt;Programando Web para principiantes II&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Programando Web para principiantes III" href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032346608&amp;amp;culture=es-ES" target="_blank"&gt;Programando Web para principiantes III&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos son WebCasts impartidos por el amigo &lt;a title="Jonas Stawski" href="http://www.jstawski.com/" target="_blank"&gt;Jonas Stawski&lt;/a&gt;. Es m&amp;aacute;s si pueden traten de hacer peque&amp;ntilde;as Web simples usando s&amp;oacute;lo ASP cl&amp;aacute;sico, ver&amp;aacute;n los resultados y la diferencia cuando despu&amp;eacute;s aprendan ASP.NET.&lt;/p&gt;
&lt;p&gt;Si ya aprendieron los fundamentos, la elecci&amp;oacute;n ser&amp;aacute; m&amp;aacute;s f&amp;aacute;cil. Por otro lado, tampoco es que ASP.NET MVC cambie totalmente la forma de hacer aplicaciones Web Forms, hay muchas funcionalidades que comparten en un com&amp;uacute;n, la diferencia principal esta en como presentar el fron-ed al usuario, no vamos a entrar en detalles muy t&amp;eacute;cnico por que quiz&amp;aacute;s si fuerzas a cualquier de los dos frameworks puedes lograr la funcionalidad del otro, pero vamos mostrar el siguiente gr&amp;aacute;fico para mostrar algunas diferencias, y como podemos elegir en que escenario usar uno u otro:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/03Mar/26_aspnet_mvc_webForms.jpg" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.gadodia.net/choosing-between-webforms-and-mvc/" target="_blank"&gt;Fuente del gr&amp;aacute;fico&lt;/a&gt;, y &lt;a title="otro m&amp;aacute;s detallado" href="http://www.emadibrahim.com/2008/09/07/deciding-between-aspnet-mvc-and-webforms/" target="_blank"&gt;otro m&amp;aacute;s detallado&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Como recomendaci&amp;oacute;n final, podr&amp;iacute;amos establecer la siguiente l&amp;iacute;nea para aprender correctamente cualquier de las tecnolog&amp;iacute;as y no caer en las malas practicas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Aprender Html &lt;/li&gt;
&lt;li&gt;Aprender JavaScript &lt;/li&gt;
&lt;li&gt;Aprender ASP Cl&amp;aacute;sico &lt;/li&gt;
&lt;li&gt;Aprender ASP.NET MVC &lt;/li&gt;
&lt;li&gt;Aprender ASP.NET Web Forms &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Aprender al final ASP.Net Web Forms, nos ayudar&amp;aacute; a entender porque algunas opiniones dicen no usar Web Forms, principalmente por el m&amp;aacute;gico ViewState que hace que los WebForms sean Stateful, por el contrario de toda la Web que es Stateless.&lt;/p&gt;
&lt;p&gt;Otros art&amp;iacute;culos con algunos detalles de este versus, unos m&amp;aacute;s t&amp;eacute;cnicos que otros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="About Technical Debates (and ASP.NET Web Forms and ASP.NET MVC debates in particular)" href="http://weblogs.asp.net/scottgu/archive/2010/01/24/about-technical-debates-both-in-general-and-regarding-asp-net-web-forms-and-asp-net-mvc-in-particular.aspx" target="_blank"&gt;About Technical Debates (and ASP.NET Web Forms and ASP.NET MVC debates in particular)&lt;/a&gt; , by &lt;a title="ScottGu&amp;#39;s" href="http://weblogs.asp.net/scottgu/default.aspx" target="_blank"&gt;ScottGu&amp;#39;s&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Web Forms vs. ASP.NET MVC" href="http://weblogs.asp.net/despos/archive/2009/04/11/web-forms-vs-asp-net-mvc.aspx" target="_blank"&gt;Web Forms vs. ASP.NET MVC&lt;/a&gt;, by &lt;a title="Dino Esposito" href="http://weblogs.asp.net/despos/default.aspx" target="_blank"&gt;Dino Esposito - .NET Architectonics&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Choosing Between WebForms and MVC" href="http://blog.gadodia.net/choosing-between-webforms-and-mvc/" target="_blank"&gt;Choosing Between WebForms and MVC&lt;/a&gt;, by &lt;a title="http://blog.gadodia.net/" href="http://blog.gadodia.net/" target="_blank"&gt;Vaibhav Gadodia&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Comparing Web Forms And ASP.NET MVC" href="http://msdn.microsoft.com/en-us/magazine/dd942833.aspx" target="_blank"&gt;Comparing Web Forms And ASP.NET MVC&lt;/a&gt;, by &lt;a href="http://weblogs.asp.net/despos/default.aspx"&gt;Dino Esposito - .NET Architectonics&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Deciding Between ASP.NET MVC and WebForms" href="http://www.emadibrahim.com/2008/09/07/deciding-between-aspnet-mvc-and-webforms/" target="_blank"&gt;Deciding Between ASP.NET MVC and WebForms&lt;/a&gt;, by &lt;a title="Emad Ibrahim" href="http://www.emadibrahim.com/" target="_blank"&gt;Emad Ibrahim&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Video: ASP.NET MVC vs ASP.NET WebForms &amp;ndash; Will WebForms be replaced by MVC?" href="http://blog.tatham.oddie.com.au/2009/09/14/video-asp-net-mvc-vs-asp-net-webforms-will-webforms-be-replaced-by-mvc/" target="_blank"&gt;Video: ASP.NET MVC vs ASP.NET WebForms &amp;ndash; Will WebForms be replaced by MVC?&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="ASP.NET Development: MVC vs. Web Forms" href="http://rachelappel.com/asp-net/asp-net-development-mvc-vs-web-forms/" target="_blank"&gt;ASP.NET Development: MVC vs. Web Forms&lt;/a&gt;, by &lt;a title="Rachel Appel" href="http://rachelappel.com/" target="_blank"&gt;Rachel Appel&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="MSDN Guidance on ASP.NET MVC vs WebForms and its Impact on my EF + ASP.NET Work" href="http://thedatafarm.com/blog/asp-net/msdn-guidance-on-asp-net-mvc-vs-webforms-and-it-rsquo-s-impact-on-my-ef-asp-net-work/" target="_blank"&gt;MSDN Guidance on ASP.NET MVC vs WebForms and its Impact on my EF + ASP.NET Work&lt;/a&gt;, by &lt;a title="Julie Lerman&amp;#39;s Blog" href="http://thedatafarm.com/blog/" target="_blank"&gt;Julie Lerman&amp;#39;s Blog&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=171454" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category></item><item><title>Que hacer cuando IIS no te deja publicar un Sitio Web ASP.NET</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2010/03/03/168632.aspx</link><pubDate>Wed, 03 Mar 2010 15:01:54 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:168632</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=168632</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2010/03/03/168632.aspx#comments</comments><description>&lt;p&gt;Con el paso del tiempo y familiaridad nos daremos cuenta que la publicación de un Sitio Web (Web Site) o Aplicación Web (Web Application), es lo más sencillo gracias a la herramienta, es decir, Visual Studio 2005+ o Visual Web Developer Express, sólo hacemos clic derecho sobre el proyecto Web o el Sitio Web, y seleccionamos Copy Web Site o Publish Web Site, y podemos escoger si publicamos directamente hacia un servidor, un FTP, o File System para copiarlo por RED o llevarlo en un USB.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/01Ene/02_CopyWebSite_Web_Site_ASPNET.jpg" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/01Ene/02_Publish_Web_Site_ASPNET.jpg" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Reducimos el problema, &lt;strike&gt;divide y vencerás &lt;b&gt;forever&lt;/b&gt;&lt;/strike&gt;, a llevar los archivos generados a nuestro Servidor Web IIS, que es donde suceden los mayores problemas al publicar un Sitio Web.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Problema Central&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;En cuanto a la publicación en un Servidor Web, se pondrá más interesante si es que no tenemos acceso remoto al servidor, y sólo podemos copiar los archivos por FTP o subiéndolos vía web, la identificación de problemas será un poco más difícil porque no tenemos acceso a la servidor (verificar permisos en el sistema de archivos, revisar Event Viewer, etc). Por ejemplo, un error en la definición de la de conexión, puede hacer que no podamos acceder a la pagina y confundir sobre el verdadero error, entonces debemos deshabilitar los errores personalizados, en algunos extremos intentar depurar remotamente la aplicación Web (es lo peor que se puede hacer, evitar llevar este tema a los foros). Si una aplicación funciona bien en desarrollo, debería funcionar también en producción sin la necesidad de hacer una depuración remota, sólo es un tema de configuración y permisos.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Alternativa&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Una buena práctica si es que recién estamos empezando y el llevar nuestra aplicación a producción se convierte en un grave problema , es tener un página con código “Inline” que sea nuestro robot “buscaerrores”. Cada vez que deseamos publicar una aplicación Web, primero enviaremos a nuestro robot a verificar que la configuración del servidor Web sea el correcta, si el robot pasa la prueba, la publicación del sitio web será una tarea sencilla.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Algunas Ventajas &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Ya sea el equipo infraestructura o el equipo de desarrollo, el que realice la publicación de una Aplicación Web, debemos tener un robot que nos permita detectar los siguientes problemas:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Detectar configuraciones incorrectas en el Application Pool de un Sitio Web. ¿&lt;a title="Los Application Pools, y que tienen que ver con los Web Sites de ASP.NET" href="http://geeks.ms/blogs/sergiotarrillo/archive/2007/03/04/11279.aspx" target="_blank"&gt;Qué es un Application Pool&lt;/a&gt;? Por ejemplo, si no tenemos al usuario por defecto en un Application Pool (NETWORK SERVICE), debemos darle ciertos permisos y hacerlo que pertenezca a un grupo especial para que pueda ser un usuario del Application Pool. &lt;/li&gt;    &lt;li&gt;Verificar que las conexiones a la base de datos funcionen correctamente. Hay muchos sitios web, que no hay ninguna página que no funcione sin hacer conexiones a la base de datos, es decir que si por alguna razón no cambiaron la cadena de conexión al pasar a producción, o el servidor de base de datos no tiene los permisos correctos, ninguna página web de toda la Aplicación va a funcionar. Por ejemplo sitios web que generan sus menús desde la base de datos, este menú estará presente en todas las páginas. &lt;/li&gt;    &lt;li&gt;Verificar que los permisos en el sistema de archivos sea el correcto. Si habilitamos la carga de archivos en nuestra aplicación debemos dar los permisos necesarios al usuario del Application Pool (por defecto NETWORK SERVICE) para que pueda escribir sobre la carpeta donde vamos a poner los archivos. &lt;/li&gt;    &lt;li&gt;Cualquier otra verificación que ustedes requieran hacer antes de pasar una aplicación Web a Producción. La idea es dejar una página base, pero ustedes pueden personalizarla de acuerdo a sus escenarios. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;El robot, debe ser muy simple y no depender de ninguna otra página o recurso para funcionar:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/01Ene/02_Robot_Interface.jpg" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Y el código fuente debe ser Inline para que funcione independiente si es un Sitio Web o una Aplicación Web:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://sergiot2.com/blogimages/2010/01Ene/02_Robot_Source.jpg" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a title="Descargar Robot para Verficicar IIS para ASP.NET" href="http://geeks.ms/media/p/168621.aspx" target="_blank"&gt;Descargar Robot para Verificar IIS para ASP.NET&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Anécdota sobre el tema&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Recuerdo hace algunos años, en el team “epica” estábamos liberando una nueva versión de un producto Web para uno de nuestros clientes, el Project Manager tuvo problemas durante la presentación de esta nueva versión, sólo llamo para decirme: “La Web no funciona, revisa que puede estar pasando”. El equipo de infraestructura del cliente (un empresa multinacional) no pudo detectar el problema y sólo se liberaba de la responsabilidad diciendo que la aplicación Web no Funcionaba. Después de un par de intentos fallidos por solucionar el problema, el equipo de desarrollo tuvo que ir a resolver el problema. No recuerdo exactamente el problema, pero era más o menos así: anteriormente habían instalando una Aplicación Web, que había cambiado la estructura común del IIS, ellos al instalar nuestra aplicación Web no lo habían hecho correctamente y nuestra Web estaba heredando el archivo de configuración de la aplicación instalada anteriormente, y por eso no funcionaba correctamente. Después de un par de cambios en el IIS Manager, nuestra aplicación Web estaba funcionando correctamente.&lt;/p&gt;  &lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=168632" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/IIS/default.aspx">IIS</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category></item><item><title>[CodeSnippet] Mostrar un Label en ASP.NET por 3 segundos</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2009/02/21/143172.aspx</link><pubDate>Sat, 21 Feb 2009 06:34:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:143172</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=143172</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2009/02/21/143172.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;Requerimiento&lt;/b&gt;: Despu&amp;eacute;s de procesar una operaci&amp;oacute;n contra la base de datos, se desea mostrar un mensaje de confirmaci&amp;oacute;n en un Label, pero que el mismo desaparezca en unos tres segundos, &lt;a title="Mensaje en label pocos segundos." href="http://foros.solocodigo.com/viewtopic.php?f=49&amp;amp;t=38146" target="_blank"&gt;ver pregunta&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Soluci&amp;oacute;n&lt;/b&gt;: Conociendo el funcionamiento de la &lt;a title="Aplicaciones de Escritorio vs Aplicaciones Web, &amp;iquest;hay diferencia en el desarrollo?" href="http://geeks.ms/blogs/sergiotarrillo/archive/2009/01/14/140214.aspx" target="_blank"&gt;infraestructura web&lt;/a&gt;, el browser es quien autom&amp;aacute;ticamente pasado los 3 segundos debe ocultar el mensaje mostrado. Dado que la funcionalidad que necesitamos es del lado del cliente, la opci&amp;oacute;n es usar &lt;a title="JavaScript" href="http://en.wikipedia.org/wiki/JavaScript" target="_blank"&gt;JavaScript&lt;/a&gt;. Dentro de los &lt;a title="JavaScript Timing Events" href="http://www.w3schools.com/js/js_timing.asp" target="_blank"&gt;eventos Timing de JavaScript&lt;/a&gt;, existe el m&amp;eacute;todo &lt;a title="HTML DOM setTimeout() Method" href="http://www.w3schools.com/htmldom/met_win_settimeout.asp" target="_blank"&gt;setTimeout()&lt;/a&gt; que pertenece al &lt;a title="HTML DOM Window Object" href="http://www.w3schools.com/htmldom/dom_obj_window.asp" target="_blank"&gt;DOM Window&lt;/a&gt;, este m&amp;eacute;todo permite ejecutar una sentencia o funci&amp;oacute;n JavaScript, despu&amp;eacute;s de un determinado tiempo. Y la propuesta ser&amp;aacute; tener dos funciones, una que muestre el &amp;ldquo;Label&amp;rdquo; y que a la vez llame dentro de 3 segundos a otra funci&amp;oacute;n que oculta el Label. Y finalmente para integrarlo con nuestro bot&amp;oacute;n de ASP.NET, al finalizar la ejecuci&amp;oacute;n del mismo podemos registrar el script del lado cliente, usando el m&amp;eacute;todo &lt;a title="ClientScriptManager..::.RegisterStartupScript Method (Type, String, String, Boolean)" href="http://msdn.microsoft.com/en-us/library/z9h4dk8y.aspx" target="_blank"&gt;RegisterStartupScript&lt;/a&gt; de la propiedad &lt;a title="Page.ClientScript" href="http://msdn.microsoft.com/en-us/library/system.web.ui.page.clientscript(VS.80).aspx" target="_blank"&gt;Page.ClientScript&lt;/a&gt;. Nota: no es necesario usar un Label, podemos usar el elemento &lt;a title="HTML &amp;lt;div&amp;gt; tag" href="http://www.w3schools.com/tags/tag_DIV.asp" target="_blank"&gt;HTML Div&lt;/a&gt; para mostrar el mensaje.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;C&amp;oacute;digo ASPX&lt;/b&gt;:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;head&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;script&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;text/javascript&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;language&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;javascript&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; MostrarLabel() {&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;             setTimeout(&lt;span style="color:#006080;"&gt;&amp;quot;OcultarLabel()&amp;quot;&lt;/span&gt;, 3000);&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; msj = document.getElementById(&lt;span style="color:#006080;"&gt;&amp;quot;lblMensaje&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;             msj.style.visibility = &lt;span style="color:#006080;"&gt;&amp;quot;visible&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         }&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;function&lt;/span&gt; OcultarLabel() {&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; msj = document.getElementById(&lt;span style="color:#006080;"&gt;&amp;quot;lblMensaje&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;             msj.style.visibility = &lt;span style="color:#006080;"&gt;&amp;quot;hidden&amp;quot;&lt;/span&gt;;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;         }&lt;/pre&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;script&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;head&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;body&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;form&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;lblMensaje&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;style&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;visibility:hidden;&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;           &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;h3&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;Mensaje mostrado por tres segundos...&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;h3&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;           &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;br&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;                &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;input&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;click aqui&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onclick&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MostrarLabel()&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;btnMostrarMensaje&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Mostrar&amp;quot;&lt;/span&gt; &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;             &lt;span style="color:#ff0000;"&gt;onclick&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;btnMostrarMensaje_Click&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;          &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:Button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;btnNada&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;No Muestra nada&amp;quot;&lt;/span&gt;  &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;        &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;form&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;body&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;C&amp;oacute;digo Evento&lt;/b&gt;:&lt;/p&gt;
&lt;div&gt;
&lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; btnMostrarMensaje_Click(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;   {  &lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;//codigo de operaciones contra la base de datos&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     Page.ClientScript.RegisterStartupScript(&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;        Page.ClientScript.GetType(), &lt;span style="color:#006080;"&gt;&amp;quot;onLoad&amp;quot;&lt;/span&gt;, &lt;span style="color:#006080;"&gt;&amp;quot;MostrarLabel();&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:#f4f4f4;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;   }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt;Navegadores Probados:&lt;/b&gt; Todos sobre Windows Vista SP1.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Firefox 3.0.6 &lt;/li&gt;
&lt;li&gt;Internet Explorer 7.0.6001 &lt;/li&gt;
&lt;li&gt;Opera 9.52 &lt;/li&gt;
&lt;li&gt;Google Chrome 1.0.154.48 &lt;/li&gt;
&lt;li&gt;Safari 3.1.2 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Notas&lt;/b&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Art&amp;iacute;culo base: &lt;a title="Show an HTML message box that disappears after 2 seconds" href="http://www.delphifaq.com/faq/javascript/f1055.shtml" target="_blank"&gt;Show an HTML message box that disappears after 2 seconds&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Palabras m&amp;aacute;gicas: &lt;a title="show message seconds JavaScript" href="http://www.google.com/search?q=show+message+seconds+JavaScript&amp;amp;hl=en" target="_blank"&gt;show message seconds JavaScript&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Se pudo mejorar el dise&amp;ntilde;o, con un poco m&amp;aacute;s de HTML + &lt;a title="CSS" href="http://geeks.ms/blogs/sergiotarrillo/search.aspx?q=CSS" target="_blank"&gt;CSS&lt;/a&gt;, la idea es que este art&amp;iacute;culo sea una base para cualquier variaci&amp;oacute;n que ustedes creaci&amp;oacute;n conveniente de acuerdo al requerimiento de su escenario. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Recursos&lt;/b&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Using JavaScript Along with ASP.NET 2.0" href="http://msdn.microsoft.com/en-us/library/aa479390.aspx" target="_blank"&gt;Using JavaScript Along with ASP.NET 2.0&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;P.D.: Cuando tenga este tipo de requerimientos, no inventen marcianadas para hacerlo con ASP.NET 3.5++, puede ser tan simple de hacerlo con JavaScript. Ojo, tampoco se quiere concluir que todo lo vamos hacer con JavaScript, debemos buscar el equilibrio, sin afectar la seguridad y el rendimiento.&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=143172" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Code+Snippets/default.aspx">Code Snippets</category></item><item><title>Recomendaciones para la Adopcion de AJAX usando ASP.NET AJAX</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2009/02/19/143035.aspx</link><pubDate>Thu, 19 Feb 2009 05:13:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:143035</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=143035</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2009/02/19/143035.aspx#comments</comments><description>&lt;p&gt;&lt;b&gt;Simple&lt;/b&gt;: &amp;ldquo;No usarlo&amp;rdquo;&amp;hellip; (no tomarlo literalmente)&lt;/p&gt;
&lt;p&gt;&lt;img alt="http://sergiot2.com/blogimages/2009/02Feb/18_aspnet_ajax_logo.png" src="http://sergiot2.com/blogimages/2009/02Feb/18_aspnet_ajax_logo.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Repasando&lt;/b&gt;: Como ya hemos comentado, &lt;a title="Aplicaciones de Escritorio vs Aplicaciones Web, &amp;iquest;hay diferencia en el desarrollo?" href="http://geeks.ms/blogs/sergiotarrillo/archive/2009/01/14/140214.aspx" target="_blank"&gt;la infraestructura que da soporte a las aplicaciones Web&lt;/a&gt; es diferente a una aplicaci&amp;oacute;n de escritorio. Si bien esta infraestructura es rica en acceso (acceder desde cualquier parte del mundo con una conexi&amp;oacute;n a Internet), tambi&amp;eacute;n tiene desventajas y una de ellas son los &amp;ldquo;viajes&amp;rdquo; que tienen que hacer al servidor Web. Si bien en el navegador estamos viendo una r&amp;eacute;plica de la informaci&amp;oacute;n (en formato html), si queremos refrescar la informaci&amp;oacute;n o hacer alguna operaci&amp;oacute;n, nuestro pedido (request) viaja desde nuestra PC hasta el servidor Web, que puede estar al otro lado del mundo, pero gracias al protocolo &lt;a title="Hypertext Transfer Protocol (HTTP)" href="http://en.wikipedia.org/wiki/Http" target="_blank"&gt;HTTP&lt;/a&gt; se pueden comunicar. Y cada vez que hacemos un request al servidor, tenemos que esperar que se refresque nuevamente toda la p&amp;aacute;gina (algunos navegadores usan Cache para los estilos y dise&amp;ntilde;o) lo que da una apariencia de cargar m&amp;aacute;s r&amp;aacute;pido. De ah&amp;iacute; la siguiente necesidad de las aplicaciones Web, despu&amp;eacute;s de quedar la satisfecha la necesidad de que sean din&amp;aacute;micas (tecnolog&amp;iacute;as de servidor, asp, php, jsp, etc), es la necesidad de mejorar la experiencia de usuario de las aplicaciones Web, y que puedan ser semejantes al estilo de una aplicaci&amp;oacute;n de escritorio, &lt;a title="ASP.NET AJAX, haciendo historia" href="http://blogs.3devnet.com/blogs/guino/archive/2007/03/11/14687.aspx" target="_blank"&gt;han habido muchos intentos&lt;/a&gt; &lt;a title="iframe o AJAX?" href="http://geeks.ms/blogs/sergiotarrillo/archive/2007/06/25/16509.aspx" target="_blank"&gt;por establecer&lt;/a&gt; la tecnolog&amp;iacute;a que permitir&amp;iacute;a mejorar la experiencia de usuario de una Aplicaci&amp;oacute;n Web, todos ten&amp;iacute;an que ver con el complemento del lado del cliente para lograr esto. Pero en los &amp;uacute;ltimos a&amp;ntilde;os, los esfuerzos han estado centrados en &lt;a title="Ajax" href="http://geeks.ms/blogs/sergiotarrillo/search.aspx?q=Ajax" target="_blank"&gt;AJAX&lt;/a&gt;, y en las aplicaciones &lt;a title="Rich Internet application" href="http://geeks.ms/search/SearchResults.aspx?q=RIA" target="_blank"&gt;RIA&lt;/a&gt;, considerando a estas &amp;uacute;ltimas como producto: Silverlight y Flash, por que las aplicaciones AJAX tambi&amp;eacute;n hacen una aplicaci&amp;oacute;n RIA.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Frameworks AJAX&lt;/b&gt;: Implementar AJAX usando directamente el objeto &lt;a title="XMLHttpRequest" href="http://es.wikipedia.org/wiki/XMLHttpRequest" target="_blank"&gt;XMLHttpRequest&lt;/a&gt;, puede llevarnos a escribir c&amp;oacute;digo m&amp;aacute;s limpio y m&amp;aacute;s &amp;oacute;ptimo, pero el esfuerzo y tiempo invertido para lograr grandes cosas, puede ser muy alto (dependiendo del escenario). Y es por eso que existen los frameworks AJAX, para todos los gustos, sabores, y colores. Aqu&amp;iacute; hay &lt;a title="List of Ajax frameworks" href="http://en.wikipedia.org/wiki/List_of_Ajax_frameworks" target="_blank"&gt;una lista&lt;/a&gt; de un &lt;a title="The Most Complete AJAX Framework and JavaScript Libraries List(124+)" href="http://ntt.cc/2008/02/13/the-most-complete-ajax-framework-and-javascript-libraries-list.html" target="_blank"&gt;mont&amp;oacute;n de Frameworks Ajax&lt;/a&gt;, tambi&amp;eacute;n pueden verlos &lt;a title="AJAXFrameworks" href="http://ajaxpatterns.org/wiki/index.php?title=AJAXFrameworks" target="_blank"&gt;agrupados por lenguaje&lt;/a&gt;. Microsoft, tambi&amp;eacute;n liber&amp;oacute; para los desarrolladores .NET (y no .Net) un Framework AJAX llamado &lt;a title="ASP.NET AJAX" href="http://www.asp.net/ajax/" target="_blank"&gt;ASP.NET AJAX&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;ASP.NET AJAX&lt;/b&gt;, tiene dos componentes: Microsoft Ajax Library (que podr&amp;iacute;a ser usado con PHP, &lt;a title="Webcast: Usando Microsoft AJAX Library con PHP" href="http://geeks.ms/blogs/sergiotarrillo/archive/2007/03/06/11352.aspx" target="_blank"&gt;ver WebCast&lt;/a&gt;), y otro componente del lado del servidor llamado ASP.NET AJAX Extensions, y que es netamente para integrarse con el Page Framework de ASP.NET 2.0+ (VS2005/VS2008), pueden ver m&amp;aacute;s detalles de la arquitectura de ASP.NET AJAX en el &lt;a title="ASP.NET AJAX Overview" href="http://www.asp.net/ajax/documentation/live/overview/default.aspx" target="_blank"&gt;siguiente art&amp;iacute;culo&lt;/a&gt;. ASP.NET AJAX, puede ser una soluci&amp;oacute;n m&amp;aacute;gica, por que r&amp;aacute;pidamente podemos tener nuestras aplicaciones Web, usando AJAX con s&amp;oacute;lo arrastrar el control &lt;a title="UpdatePanel on Geeks.ms" href="http://geeks.ms/search/SearchResults.aspx?q=UpdatePanel" target="_blank"&gt;UpdatePanel&lt;/a&gt;, podemos tener implementando AJAX en aplicaciones existentes, &lt;a title="ya pueden descargar el webCast de ASP.NET AJAX" href="http://geeks.ms/blogs/sergiotarrillo/archive/2007/06/05/15631.aspx" target="_blank"&gt;ver WebCast&lt;/a&gt;. Si tienen un mantenedor con una barra de botones, un GridView para mostrar la lista, y un FormView para las dem&amp;aacute;s operaciones, bastar&amp;iacute;a colocar los 3 controles dentro de un UpdatePanel cada uno, y m&amp;aacute;gicamente ya tenemos implementado AJAX dentro de nuestra aplicaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Problema de la Magia&lt;/b&gt;, como todo producto m&amp;aacute;gico, tiene sus costos por detr&amp;aacute;s. Aunque ASP.NET AJAX maneja postbacks as&amp;iacute;ncronos con el servidor Web, la informaci&amp;oacute;n que viaja entre cliente y servidor no es la m&amp;aacute;s &amp;oacute;ptima, hombre que la magia tiene su coste. Y esto debido a que si no hacemos una buena administraci&amp;oacute;n del ViewState, este estar&amp;aacute; viajando entre los postbacks as&amp;iacute;ncronos, revisar &lt;a title="Why ASP.NET AJAX UpdatePanels are dangerous" href="http://encosia.com/2007/07/11/why-aspnet-ajax-updatepanels-are-dangerous/" target="_blank"&gt;este art&amp;iacute;culo&lt;/a&gt; para ver un ejemplo. Adem&amp;aacute;s de que ASP.NET AJAX es un framework centrado en el Servidor viaja informaci&amp;oacute;n+dise&amp;ntilde;o entre postbacks as&amp;iacute;ncronos, a diferencia de un framework centrado en el cliente, que s&amp;oacute;lo viaja datos entre cliente y servidor, pero hay que &amp;ldquo;actualizar el dise&amp;ntilde;o&amp;rdquo; manualmente usando &lt;a title="JavaScript" href="http://en.wikipedia.org/wiki/JavaScript" target="_blank"&gt;JavaScript&lt;/a&gt; y &lt;a title="Document Object Model" href="http://en.wikipedia.org/wiki/Document_Object_Model" target="_blank"&gt;DOM&lt;/a&gt;. &lt;a title="Welcome to my comparison of AJAX frameworks for ASP.NET" href="http://www.daniel-zeiss.de/AJAXComparison/Results.htm" target="_blank"&gt;Este art&amp;iacute;culo&lt;/a&gt; tiene resultados muy interesantes en cuanto a comparaci&amp;oacute;n de frameworks de AJAX para ASP.NET.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Alternativa&lt;/b&gt;, Una alternativa dentro de ASP.NET AJAX es usar los &lt;a title="PageMethods on Geeks.ms" href="http://geeks.ms/search/SearchResults.aspx?q=PageMethods" target="_blank"&gt;PageMethods&lt;/a&gt;, para que desde JavaScript podamos llamar a los mismos, o tambi&amp;eacute;n llamar desde JavaScript a Web Services. Con esto garantizamos la transferencia s&amp;oacute;lo de informaci&amp;oacute;n, y el dise&amp;ntilde;o hay que modificarlo con JavaScript. Revisar este ejemplo de &lt;a title="ASP.NET AJAX UpdatePanel vs ASP.NET PageMethod" href="http://geeks.ms/blogs/dsalgado/archive/2008/05/05/asp-net-ajax-updatepanel-vs-asp-net-pagemethod.aspx" target="_blank"&gt;JavaScript y PageMethods&lt;/a&gt;, y &lt;a title="Acceder a PageMethods con jQuery" href="http://geeks.ms/blogs/jmaguilar/archive/2008/06/02/acceder-a-pagemethods-con-jquery.aspx" target="_blank"&gt;JQuery y PageMethods&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Recomendaciones&lt;/b&gt;, se que fue mucho floro para llegar a las recomendaciones, pero fue necesario. Si cociendo la &amp;ldquo;magia&amp;rdquo; que hay detr&amp;aacute;s de ASP.NET AJAX, hemos decidido usarlo, por que la aplicaci&amp;oacute;n no requiere un alto rendimiento, s&amp;oacute;lo estar&amp;aacute; disponible dentro de nuestra empresa (y no a toda la internet, &amp;oacute;sea cantidad de usuarios limitada), o hemos visto que en el prototipo, los resultados son aceptables. Hay algunas recomendaciones b&amp;aacute;sicas para usar ASP.NET AJAX:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="text-decoration:underline;"&gt;No usarlo&lt;/span&gt;. No usarlo hasta que la p&amp;aacute;gina web este funcionando al 100%. La magia de ASP.NET AJAX, a trav&amp;eacute;s del &lt;a title="UpdatePanel on Geeks.ms" href="http://geeks.ms/search/SearchResults.aspx?q=UpdatePanel" target="_blank"&gt;UpdatePanel&lt;/a&gt;, permite que luego de que la p&amp;aacute;gina este funcionando, arrastramos al control UpdatePanel, colocamos nuestros controles de ASP.NET dentro del UpdatePanel, y nuestra p&amp;aacute;gina aspx ya tiene AJAX, con s&amp;oacute;lo arrastrar un control, en &lt;a title="Implementando ASP.NET AJAX en aplicaciones Web Existentes" href="http://geeks.ms/blogs/sergiotarrillo/archive/2007/06/05/15631.aspx" target="_blank"&gt;este WebCast&lt;/a&gt;, se muestra como a una &lt;a title="The Classifieds Site Starter Kit" href="http://www.asp.net/downloads/starter-kits/classifieds/" target="_blank"&gt;aplicaci&amp;oacute;n Web existente&lt;/a&gt; (de otro autor), la implementaci&amp;oacute;n de ASP.NET AJAX usando el UpdtePanel fue sencilla y no requiri&amp;oacute; cambiar el modelo de programaci&amp;oacute;n. La recomendaci&amp;oacute;n, que motiva a no usar ASP.NET AJAX hasta que la p&amp;aacute;gina este funcionando, es debido a que muchas veces suele confundirse los errores, y no se sabe si la p&amp;aacute;gina no funciona por que el UpdatePanel tiene un bug, o los otros controles que estamos usando tiene bug, y raras veces se piensa que el c&amp;oacute;digo que hemos hecho es el que tiene el bug. Por eso, si nos centramos principalmente en hacer funcionar la p&amp;aacute;gina al inicio, el rango de causas de errores disminuir&amp;aacute; por que no incluye los que pueda producir el uso de ASP.NET AJAX, lo que har&amp;aacute; m&amp;aacute;s f&amp;aacute;cil identificarlos, y solucionarlos, y esto sobretodo para procesos complejos, que tienen que implementarse. En los proyectos participado o en las consultor&amp;iacute;as y mentoring que hemos impartido con 3Dev, este era un problema frecuente, se tiende a responsabilizar al UpdatePanel de cualquier error que suceda en la p&amp;aacute;gina, y siempre hay que hacerse esta pregunta: &amp;ndash;la p&amp;aacute;gina funciona correctamente sin el UpdatePanel?, y despu&amp;eacute;s de remover el UpdatePanel queda claro cual es el origen del error. Un amigo (Luis B.), en tono jocoso, quer&amp;iacute;a demandar a Bill Gates por que ASP.NET Ajax no funcionaba, despu&amp;eacute;s de remover el UpdatePanel ya no dijo nada :D. &lt;/li&gt;
&lt;li&gt;El UpdatePanel no es &lt;span style="text-decoration:underline;"&gt;barita m&amp;aacute;gica&lt;/span&gt;. Si bien es tan sencillo agregar AJAX a nuestras aplicaciones Web usando el control UpdatePanel, tampoco se debe hacer un uso indiscriminado del mismo. Por ejemplo, dentro de un formulario Web, s&amp;oacute;lo agregar a los controles que se van actualizar dentro de un UpdatePanel, en una p&amp;aacute;gina de mantenimiento s&amp;oacute;lo a los controles principales como un control GridView, formView, y al men&amp;uacute;, pero no a toda la p&amp;aacute;gina, la idea de AJAX es actualizar la p&amp;aacute;gina as&amp;iacute;ncronamente para tener una mejor experiencia del usuario, pero si vamos a actualizar toda la p&amp;aacute;gina no tiene sentido. Una forma de evitar tener que usar un control UpdatePanel en todo, es usar &lt;b&gt;AsyncPosBackTrigger&lt;/b&gt; en un UpdatePanel, &lt;a title="usando ASP.NET AJAX, pero no abusando" href="http://geeks.ms/blogs/sergiotarrillo/archive/2007/02/10/10199.aspx" target="_blank"&gt;un ejemplo&lt;/a&gt;, con esto evitamos colocar todos los controles en UpdatePanels. Recuerden que un UpdatePanel se actualiza, cuando un control dentro del mismo produce un PostBack, entonces se actualiza el UpdatePanel y se produce un PostBack as&amp;iacute;ncrono, o tambi&amp;eacute;n se actualiza cuando otro UpdatePanel se actualiza, es decir, que si una p&amp;aacute;gina tenemos tres UpdatePanels que no est&amp;aacute;n relacionados, si actualizo uno de ellos autom&amp;aacute;ticamente se actualizan los otros dos. Para solucionar este &amp;uacute;ltimo problema, se puede actualizar el UpdatePanel manual, es decir program&amp;aacute;ticamente, &lt;a title="Updating an UpdatePanel Programmatically in C#" href="http://www.ajaxtutorials.com/ajax-tutorials/updating-an-updatepanel-programmatically-in-c/" target="_blank"&gt;un ejemplo&lt;/a&gt;, aunque esta un poco simple el &amp;uacute;ltimo ejemplo un posible escenario es si es que dentro de una p&amp;aacute;gina aspx, tengo 3 UpdatePanels, y s&amp;oacute;lo voy actualizar dos, la forma correcta es asignar a la propiedad UpdateMode el valor de Conditional, as&amp;iacute; solo se actualizar&amp;aacute;n cuando se produzca un evento dentro de ellos, o cuando se llame expl&amp;iacute;citamente al m&amp;eacute;todo Update del control UpdatePanel. &lt;/li&gt;
&lt;li&gt;Cuidado con el &lt;span style="text-decoration:underline;"&gt;dedo compulsivo&lt;/span&gt;. Uno de los detalles de usar AJAX, son que cuando se produce un postback as&amp;iacute;ncrono el usuario (ni el mismo desarrollador) sabe si se ejecuto o no el evento, y entonces vuelven hacer varios clic en el bot&amp;oacute;n para asegurarse que hicieron clic. Es por eso que es necesario &lt;a title="indicadores y los patrones para AJAX" href="http://geeks.ms/blogs/sergiotarrillo/archive/2007/03/22/12137.aspx" target="_blank"&gt;usar indicadores&lt;/a&gt; para indicarle al usuario, que su pedido se esta procesando, con ASP.NET AJAX pueden usar el control &lt;a title="UpdateProgress on Geeks.ms" href="http://geeks.ms/search/SearchResults.aspx?q=UpdateProgress" target="_blank"&gt;UpdateProgress&lt;/a&gt;, pero mucho mejor si lo &lt;a title="Centrar UpdateProgress en un UpdatePanel ( JQuery )" href="http://geeks.ms/blogs/mrubino/archive/2008/10/06/centrar-updateprogress-en-un-updatepanel-jquery.aspx" target="_blank"&gt;hacen centrado&lt;/a&gt; y &lt;a title="ASP.NET Ajax: Utilizando el control ModalPopupExtender como una ventana Splash" href="http://geeks.ms/blogs/imostacero/archive/2006/10/18/ASP.NET-Ajax_3A00_-Utilizando-el-control-ModulPopupExtender-como-una-barra-de-Progreso_2E00_.aspx" target="_blank"&gt;bloquean la pantalla&lt;/a&gt;. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;AjaxControlToolkit (ACT)&lt;/b&gt;, un juego de controles (ajaxcontroltoolkit.dll) liberados junto con ASP.NET AJAX, hay algunos controles &amp;uacute;tiles como el control AutoComplete, y bueno otros que se podr&amp;iacute;an mejorar. Y al igual que ASP.NET AJAX, hay que &lt;a title="Atlas Control Toolkit, &amp;iquest;javascript f&amp;aacute;cil = javascript pesado?" href="http://www.buayacorp.com/archivos/atlas-control-toolkit-%C2%BFjavascript-facil-javascript-pesado/" target="_blank"&gt;tener cuidado con el uso del ACT&lt;/a&gt;, evaluarlo en nuestros escenarios. &lt;a title="ASP.NET AJAX Control Toolkit" href="http://www.asp.net/ajax/ajaxcontroltoolkit/samples/" target="_blank"&gt;Aqu&amp;iacute;&lt;/a&gt; pueden ver los ejemplos de los controles Online, y en algunos controles se aplican la misma regla que el UpdatePanel, primero verifiquen el funcionamiento b&amp;aacute;sico de su p&amp;aacute;gina, antes de usar algunos controles del ACT. Ejemplos del ACT, los pueden descargar de &lt;a title="Welcome to the AJAX Control Toolkit!" href="http://www.codeplex.com/AjaxControlToolkit" target="_blank"&gt;la p&amp;aacute;gina del mismo en CodePlex&lt;/a&gt;, adem&amp;aacute;s de los ejemplos se encuentra el c&amp;oacute;digo fuente del ACT. Nota: los ejemplos son los mismo que est&amp;aacute;n online, y todos los controles tienen un ejemplo, lo pendiente es revisar que &lt;a title="CSS" href="http://geeks.ms/blogs/sergiotarrillo/search.aspx?q=CSS" target="_blank"&gt;CSS&lt;/a&gt; usa el control que vamos a probar, y eso copiarlo a nuestro sitio Web.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Destacado&lt;/b&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="ASP.NET AJAX: posibilidades y escenarios de uso" href="http://geeks.ms/blogs/jfortes/archive/2008/10/29/ASP.NET-AJAX_3A00_-posibilidades-y-escenarios-de-uso.aspx" target="_blank"&gt;ASP.NET AJAX: posibilidades y escenarios de uso&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Evento online ASP.NET AJAX y JQuery SecondNug" href="http://geeks.ms/blogs/mrubino/archive/2008/10/28/evento-online-asp-net-ajax-y-jquery-secondnug.aspx" target="_blank"&gt;Evento online ASP.NET AJAX y JQuery SecondNug&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="UpdatePanel Tips and Tricks" href="http://msdn.microsoft.com/en-us/magazine/cc163413.aspx" target="_blank"&gt;UpdatePanel Tips and Tricks&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Flan AJAX Controls" href="http://www40.brinkster.com/rajbk/FlanControls.html" target="_blank"&gt;Flan AJAX Controls&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="ASP.NET AJAX on Geeks.ms" href="http://geeks.ms/search/SearchResults.aspx?q=ASP.NET+AJAX" target="_blank"&gt;ASP.NET AJAX on Geeks.ms&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="UpdatePanel on Geeks.ms" href="http://geeks.ms/search/SearchResults.aspx?q=UpdatePanel" target="_blank"&gt;UpdatePanel on Geeks.ms&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Art&amp;iacute;culos, Videos, Ejemplos:&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="ASP.NET Ajax Tutorials" href="http://www.asp.net/learn/ajax/" target="_blank"&gt;ASP.NET Ajax Tutorials&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="ASP.NET AJAX Videos" href="http://www.asp.net/learn/ajax-videos/" target="_blank"&gt;ASP.NET AJAX Videos&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="ASP.NET AJAX Control Toolkit" href="http://www.asp.net/Ajax/ajaxcontroltoolkit/" target="_blank"&gt;ASP.NET AJAX Control Toolkit&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=143035" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET+AJAX/default.aspx">ASP.NET AJAX</category></item><item><title>Buenas practicas de programacion y tecnicas para liberar recursos, para tener una aplicacion mas rapida ¿?</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2009/02/06/142102.aspx</link><pubDate>Fri, 06 Feb 2009 07:46:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:142102</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=142102</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2009/02/06/142102.aspx#comments</comments><description>&lt;p&gt;&lt;img alt="http://sergiot2.com/blogimages/2009/02Feb/06-Tortuga-Lenta-o-Liebre-Rapida.jpg" src="http://sergiot2.com/blogimages/2009/02Feb/06-Tortuga-Lenta-o-Liebre-Rapida.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;iquest;La aplicaci&amp;oacute;n web de Geeks.ms es &lt;span style="text-decoration:underline;"&gt;r&amp;aacute;pida&lt;/span&gt;?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;iquest;R&amp;aacute;pida, para qui&amp;eacute;n?. Para el programador?, para el usuario?, o para el jefe de proyectos?. &amp;iquest;Cu&amp;aacute;ntos segundos debe tomar cargar una aplicaci&amp;oacute;n para que sea r&amp;aacute;pida? &amp;ndash;4 segundos, 8 segundos, 15 segundos?&lt;/p&gt;
&lt;p&gt;Y las mismas preguntas podemos hacernos, para considerar una aplicaci&amp;oacute;n lenta.&lt;/p&gt;
&lt;p&gt;Antes de jugar al &lt;a title="El rendimiento, la percepci&amp;oacute;n y el tel&amp;eacute;fono escacharrado..." href="http://geeks.ms/blogs/rcorral/archive/2008/10/20/el-rendimiento-la-percepci-243-n-y-el-tel-233-fono-escacharrado.aspx" target="_blank"&gt;tel&amp;eacute;fono malogrado&lt;/a&gt;, se deber&amp;iacute;a tener un l&amp;iacute;mite para considerar a una aplicaci&amp;oacute;n &amp;ldquo;lenta&amp;rdquo;. Si dentro de los &lt;a title="requerimientos no funcionales" href="http://es.wikipedia.org/wiki/Requerimiento_no_funcional" target="_blank"&gt;requerimientos no funcionales&lt;/a&gt;, se dice que ning&amp;uacute;n formulario debe tomar m&amp;aacute;s de 15 segundos para completar una operaci&amp;oacute;n, ya se sabe que si p&amp;aacute;gina o formulario toma 20 segundos, se podr&amp;iacute;a decir que es lenta. Entonces, para poder definir si una aplicaci&amp;oacute;n es lenta o es r&amp;aacute;pida, el l&amp;iacute;mite deber&amp;iacute;a estar definido en los requerimientos no funcionales, y si no lo esta (en muchos casos), antes de optimizar se deber&amp;iacute;a especificar cual ser&amp;aacute; el tiempo de referencia a tomar, para considerar a una aplicaci&amp;oacute;n r&amp;aacute;pida o lenta. As&amp;iacute; cuando llegue alguna queja del usuario por que quiere una aplicaci&amp;oacute;n sea m&amp;aacute;s r&amp;aacute;pida, se revisa si el formulario esta dentro de los l&amp;iacute;mites, y si a&amp;uacute;n as&amp;iacute; el usuario quiere m&amp;aacute;s r&amp;aacute;pida (nuevos l&amp;iacute;mites) ese es otro precio.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;iquest;Todas los formularios requieren optimizaci&amp;oacute;n?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Normalmente los procesos de mantenimiento, deber&amp;iacute;a ser los m&amp;aacute;s r&amp;aacute;pidos (usamos el t&amp;eacute;rmino r&amp;aacute;pido como comparaci&amp;oacute;n no como medida) a comparaci&amp;oacute;n de los procesos de b&amp;uacute;squedas, cargas masivas, o exportar informaci&amp;oacute;n o procesos de fin de mes.&lt;/p&gt;
&lt;p&gt;Veamos, si una p&amp;aacute;gina de mantenimiento s&amp;oacute;lo requiere hacer operaciones de consulta (muchos registros), inserci&amp;oacute;n (un registro), actualizaci&amp;oacute;n (un registro), y eliminaci&amp;oacute;n (un registro), no deber&amp;iacute;a tomar m&amp;aacute;s tiempo que otras p&amp;aacute;ginas de procesos m&amp;aacute;s complejos. Y para lograr esto debemos tener algunos detalles en cuenta, que son b&amp;aacute;sicos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Administrar correctamente las conexiones a la base de datos, liberar los recursos despu&amp;eacute;s de usarlos. Desde .Net, podemos usar la clausula using, para asegurarnos de liberar los recursos. Revisar esta entrada: &lt;a title="ADO.NET: tu conexion no se cierra?, el poder de using" href="http://geeks.ms/blogs/sergiotarrillo/archive/2008/01/17/64538.aspx" target="_blank"&gt;Ado.Net y Using&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Paginar los resultados desde la base de datos, y no desde el cliente. Hay algunos controles m&amp;aacute;gicos que ofrecen, paginaci&amp;oacute;n, pero a qu&amp;eacute; costo?. Por ejemplo para paginar en Oracle podemos usar &lt;a title="Paging Oracle Results" href="http://www.blahstuff.com/oldstuff/2005/12/08/363/paging-oracle-results/" target="_blank"&gt;ROWNUM&lt;/a&gt;, y en SQL Server podemos usar &lt;a title="Paging Records Using SQL Server 2005 Database - ROW_NUMBER Function" href="http://www.davidhayden.com/blog/dave/archive/2005/12/30/2652.aspx" target="_blank"&gt;ROW_NUMBER&lt;/a&gt;, obviamente que para lograr una paginaci&amp;oacute;n del lado de cliente, involucra que tengamos que pasarle dos par&amp;aacute;metros m&amp;aacute;s como el registro inicial (startRowIndex) y la cantidad de resultados (maximumRows), adem&amp;aacute;s de que tengamos que hacer otro m&amp;eacute;todo y procedure, para &amp;ldquo;contar&amp;rdquo;, ya que necesitamos saber cuantas p&amp;aacute;ginas tiene el resultado. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si seguimos estas dos reglas b&amp;aacute;sicas, los formularios de mantenimiento deben ser los m&amp;aacute;s r&amp;aacute;pidas de toda nuestra aplicaci&amp;oacute;n. Y entonces, p&amp;aacute;ginas o formularios a optimizar son los procesos de b&amp;uacute;squedas, operaciones masivas, generaci&amp;oacute;n de reportes, entre otros procesos complejos (1).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;iquest;Pero qu&amp;eacute; pasa, si toda la aplicaci&amp;oacute;n esta lenta?&lt;/b&gt; Sean de mantenimientos simples o complejos, o procesos, todas demoran mucho a comparaci&amp;oacute;n de otra aplicaci&amp;oacute;n (una aplicaci&amp;oacute;n Web frente a una Windows). Sobre todo en esas &lt;a title="Reinventando la rueda" href="http://geeks.ms/blogs/jorge/archive/2008/09/15/reinventando-la-rueda.aspx" target="_blank"&gt;migraciones por tendencia&lt;/a&gt; o moda de una aplicaci&amp;oacute;n Windows a Web, sobretodo si no se tiene muy claro la &lt;a title="Aplicaciones de Escritorio vs Aplicaciones Web, &amp;iquest;hay diferencia en el desarrollo?" href="http://geeks.ms/blogs/sergiotarrillo/archive/2009/01/14/140214.aspx" target="_blank"&gt;infraestructura de una aplicaci&amp;oacute;n web&lt;/a&gt;, el usuario dir&amp;aacute;: pero en la aplicaci&amp;oacute;n Windows era m&amp;aacute;s r&amp;aacute;pido, como le explicas que el navegador tiene que hacer un viaje al servidor, o lo que se conoce como postback en asp.net,&amp;nbsp; para poder ver los resultados. Y la migraci&amp;oacute;n de una aplicaci&amp;oacute;n se puede vender por dos cosas: por mejoras de procesos, o por que va ser m&amp;aacute;s r&amp;aacute;pido, entonces nuevamente por que la web mas lenta, se preguntar&amp;aacute; el usuario. Entonces, si la mayor&amp;iacute;a de formularios est&amp;aacute;n lentos a comparaci&amp;oacute;n de su previa versi&amp;oacute;n, habr&amp;aacute; que revisar el c&amp;oacute;digo base o c&amp;oacute;digo com&amp;uacute;n (2).&lt;/p&gt;
&lt;p&gt;&amp;iquest;&lt;b&gt;Juego de Herramientas o t&amp;eacute;cnicas del buen optimizador&lt;/b&gt;?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Profiler del motor de base de datos&lt;/b&gt;. En el escenario 1, y el escenario 2, es bueno identificar cuales son las operaciones que se est&amp;aacute;n haciendo contra una base de datos, y el tiempo que est&amp;aacute;n tomando estas operaciones, la cantidad de operaciones que se esta haciendo, quiz&amp;aacute;s es redundante el n&amp;uacute;mero de operaciones. Imaginen, que est&amp;aacute;n haciendo un b&amp;uacute;squeda sobre un cat&amp;aacute;logo de libros, tenemos varios millones de libros en nuestro catalogo, y tenemos que buscar por t&amp;iacute;tulo, descripci&amp;oacute;n, contenidos. Para SQL Server nosotros tenemos &lt;a title="usas SQL Profiler?" href="http://geeks.ms/blogs/sergiotarrillo/archive/2007/07/07/19011.aspx" target="_blank"&gt;SQL Profiler&lt;/a&gt;. Despu&amp;eacute;s de analizar podemos llegar a dos conclusiones, una determina consulta esta tomando un tiempo mayor al esperado, hay que determinar si podemos hacer alguna mejora para &lt;a title="&amp;iquest;Problemas de Performance en un servidor de datos? - Observaciones, recomendaciones, y mejores pr&amp;aacute;cticas" href="http://geeks.ms/blogs/ozonicco/archive/2008/08/23/95681.aspx" target="_blank"&gt;incrementar la performance del servidor de datos&lt;/a&gt;, tambi&amp;eacute;n revisar esta presentaci&amp;oacute;n: &lt;a title="PPTs y Demos del evento de Artalde: SQL Server 2005 - Buenas pr&amp;aacute;cticas para mejorar el rendimiento" href="http://geeks.ms/blogs/rcorral/archive/2007/05/04/ppts-y-demos-del-evento-de-artalde-sql-server-2005-buenas-pr-225-cticas-para-mejorar-el-rendimiento.aspx" target="_blank"&gt;buenas pr&amp;aacute;cticas para mejorar el rendimiento en un servidor SQL Server&lt;/a&gt;. Y si el problema, no esta en la consulta, si no en la recurrencia a la informaci&amp;oacute;n?, en este escenario donde la informaci&amp;oacute;n mostrada cambia pocas veces (una noticia de un diario, las entradas de un blog) se puede hacer el uso de &lt;a title="Uso de la clase Cache de ASP.NET 2.0 fuera de aplicaciones Web." href="http://geeks.ms/blogs/jalarcon/archive/2007/03/28/uso-de-la-clase-cache-de-asp-net-2-0-fuera-de-aplicaciones-web.aspx" target="_blank"&gt;t&amp;eacute;cnicas de Cache&lt;/a&gt;, atenci&amp;oacute;n si la aplicaci&amp;oacute;n tiene alta transaccionalidad es decir se necesita hacer operaciones con la informaci&amp;oacute;n m&amp;aacute;s reciente, imaginad hacer ventas de productos que tienen stock 4 (por que as&amp;iacute; se guardo en la cache) cuando un producto ya no tiene ese stock 4, en este &amp;uacute;ltimo escenario no es aplicable el uso de Cache. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Profiler de nuestro c&amp;oacute;digo&lt;/b&gt;. Es una manera de identificar cuales son los cuellos de botella dentro de nuestro c&amp;oacute;digo, o para optimizar hasta la &amp;uacute;ltima l&amp;iacute;nea de c&amp;oacute;digo. [.Net] &lt;a title="Carlos Walzer" href="http://msmvps.com/blogs/cwalzer/default.aspx" target="_blank"&gt;Carlos Walzer&lt;/a&gt;, por ejemplo nos muestra el uso de la herramienta &lt;a href="http://www.jetbrains.com/profiler/"&gt;dotTrace 3.0&lt;/a&gt;, para analizar el tiempo y la cantidad de cada una de las llamadas dentro de .Net, con la cual podemos llegar a la mejor forma de hacer las cosas, revisar la serie: &lt;a title="Serie de articulos: Cazando mitos en ADO.NET" href="http://geeks.ms/blogs/sergiotarrillo/archive/2007/11/15/50355.aspx" target="_blank"&gt;Cazando mitos en ADO.NET&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Profiler del render del Html (Web)&lt;/b&gt;. En una aplicaci&amp;oacute;n Web, hay otro detalle a tener en cuenta y es el &lt;a title="Aplicaciones de Escritorio vs Aplicaciones Web, &amp;iquest;hay diferencia en el desarrollo?" href="http://geeks.ms/blogs/sergiotarrillo/archive/2009/01/14/140214.aspx" target="_blank"&gt;tama&amp;ntilde;o del html enviado al navegador&lt;/a&gt;. Una excelente herramienta para detectar motivas de lentitud en la carga de una aplicaci&amp;oacute;n web es usar &lt;a title="Localizar motivos de carga lenta en nuestras aplicaciones ASP NET con FireBug &amp;amp; YSloW" href="http://geeks.ms/blogs/cchavez/archive/2008/04/01/localizar-motivos-de-carga-lenta-en-nuestras-aplicaciones-asp-net-con-firebug-y-yslow.aspx" target="_blank"&gt;YSlow&lt;/a&gt;, y si est&amp;aacute;n usando asp.net tambi&amp;eacute;n puede usar la &lt;a title="Understanding Tracing in ASP.NET 2.0" href="http://aspalliance.com/1373_Understanding_Tracing_in_ASPNET_20.all" target="_blank"&gt;caracter&amp;iacute;stica Tracing&lt;/a&gt;, con la cual podemos identificar los m&amp;eacute;todos dentro del ciclo de vida de ejecuci&amp;oacute;n de una p&amp;aacute;gina ASP.NET, adem&amp;aacute;s del tiempo de ejecuci&amp;oacute;n de los mismos, para saber cual demora m&amp;aacute;s; lo otro que podemos identificar el tama&amp;ntilde;o de bytes que ocupa el render de todos los controles de la p&amp;aacute;gina, as&amp;iacute; como el &lt;b&gt;ViewState&lt;/b&gt; &lt;span style="text-decoration:line-through;"&gt;ese monstruito que es bueno pero a la vez es malo&lt;/span&gt; que est&amp;aacute;n ocupando. &lt;a title="decodificando el ViewState... para verle hasta las venas" href="http://geeks.ms/blogs/sergiotarrillo/archive/2008/05/03/84711.aspx" target="_blank"&gt;El ViewState&lt;/a&gt; s&amp;oacute;lo deber&amp;iacute;a ser usado cuando es verdaderamente &amp;uacute;til, todos los controles por defecto tienen habilitado el ViewState. Por ejemplo si ustedes hacen ver c&amp;oacute;digo fuente html de esta p&amp;aacute;gina, encontrar&amp;aacute;n un elemento llamado: __VIEWSTATE, y en este caso de Geeks.ms, y si vamos a un &lt;a title="Online Viewstate Viewer / Decoder for Asp.Net 2.0" href="http://lachlankeown.blogspot.com/2008/05/online-viewstate-viewer-decoder.html" target="_blank"&gt;decoder online&lt;/a&gt;, veremos que s&amp;oacute;lo tiene un valor, que es el c&amp;oacute;digo de la p&amp;aacute;gina, si est&amp;aacute;n desarrollando con ASP.NET, hagan &amp;ldquo;View in Browser&amp;rdquo; y vean el tama&amp;ntilde;o del ViewState, y vean con el decoder que se esta guardando.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Otro detalle a tener es al no liberarse correctamente los recursos y ocupar memoria, &amp;ldquo;fuga de memoria&amp;rdquo;. Dentro de Windows existe una herramienta &lt;a title="Un poco de windbg aplicado..." href="http://geeks.ms/blogs/dsalgado/archive/2008/04/24/reto-i-de-rodrigo-corral-d.aspx" target="_blank"&gt;llamada WinDBG&lt;/a&gt;, que puede ser usado para identificar &lt;a title="Fugando memoria con .Net" href="http://geeks.ms/blogs/rcorral/archive/2008/04/23/fugando-memoria-con-net.aspx" target="_blank"&gt;fugas de memoria dentro de .Net&lt;/a&gt; por ejemplo. Y espec&amp;iacute;ficamente para .Net podemos usar el &lt;b&gt;CLR Profiler&lt;/b&gt;, como en este escenario: &lt;a title="C&amp;oacute;mo cazar una fuga de memoria en .Net" href="http://geeks.ms/blogs/rcorral/archive/2008/05/06/c-243-mo-cazar-una-fuga-de-memoria-en-net-y-ii.aspx" target="_blank"&gt;C&amp;oacute;mo cazar una fuga de memoria en .Net&lt;/a&gt;, tambi&amp;eacute;n podemos &lt;a title="Children of the Damned: Cuidado con vuestras aplicaciones MDI" href="http://geeks.ms/blogs/palvarez/archive/2009/02/02/children-of-the-damned-cuidado-con-vuestras-aplicaciones-mdi.aspx" target="_blank"&gt;usar .NET Memory Profiler&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Resumiendo&lt;/b&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Se debe especificar, el rango para que una aplicaci&amp;oacute;n sea considera r&amp;aacute;pida o lenta.&lt;/li&gt;
&lt;li&gt;Los formularios de mantenimiento deber&amp;iacute;an ser los m&amp;aacute;s r&amp;aacute;pidos dentro de nuestra aplicaci&amp;oacute;n, por que las operaciones son simples, y debemos seguir las reglas b&amp;aacute;sicas, de paginaci&amp;oacute;n del lado del servidor de datos y liberaci&amp;oacute;n de recursos (conexiones).&lt;/li&gt;
&lt;li&gt;Los formularios especiales, necesitan de herramientas especializadas para identificar donde se encuentra el cuello de botella, o los lugares posibles de optimizaci&amp;oacute;n. Para ello disponemos de Profilers, a nivel del servidor de datos, como tambi&amp;eacute;n a nivel del c&amp;oacute;digo de nuestra aplicaci&amp;oacute;n.&lt;/li&gt;
&lt;li&gt;Para aplicaciones Web, asegurarse que el render del html sea el adecuado.&lt;/li&gt;
&lt;li&gt;Tener cuidado con las fugas de memoria.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;P.D.: Espero que esta lista de herramientas, ayuden a mejorar el rendimiento de sus aplicaciones, en alg&amp;uacute;n momento mostrare algunas de ellas en determinados escenarios para ver su utilidad m&amp;aacute;s claramente, quedan en los drafts como constancia.&lt;/p&gt;
&lt;p&gt;Oros art&amp;iacute;culos de inter&amp;eacute;s:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="El profiler es nuestro amigo!" href="http://geeks.ms/blogs/ilanda/archive/2007/11/11/el-profiler-es-nuestro-amigo.aspx" target="_blank"&gt;El profiler es nuestro amigo!&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="SQL Load Test" href="http://geeks.ms/blogs/ilanda/archive/2008/11/24/sql-load-test.aspx" target="_blank"&gt;SQL Load Test&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Hacer pruebas, vale... pero hacerlas pa&amp;#39; na..." href="http://geeks.ms/blogs/rcorral/archive/2008/01/07/hacer-pruebas-vale-pero-hacerlas-pa-na.aspx" target="_blank"&gt;Hacer pruebas, vale... pero hacerlas pa&amp;#39; na...&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Off Road Profiling of ASP.NET Applications" href="https://blogs.msdn.com/graycode/articles/AspNetOffRoadProfilingArticle.aspx" target="_blank"&gt;Off Road Profiling of ASP.NET Applications&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a title="Comparing performance reports with the Visual Studio Team System Profiler" href="http://blogs.msdn.com/ianhu/archive/2007/04/03/comparing-performance-reports-with-the-visual-studio-team-system-profiler.aspx" target="_blank"&gt;Comparing performance reports with the Visual Studio Team System Profiler&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=142102" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Ado.NET/default.aspx">Ado.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/developer_2B002B00_/default.aspx">developer++</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Aplicaciones de Escritorio vs Aplicaciones Web, ¿hay diferencia en el desarrollo?</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2009/01/14/140214.aspx</link><pubDate>Wed, 14 Jan 2009 08:38:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:140214</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>22</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=140214</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2009/01/14/140214.aspx#comments</comments><description>&lt;p&gt;Esto post nace como respuesta a las siguientes preguntas o dudas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Estoy desarrollando una aplicaci&amp;oacute;n Web, en Windows yo usaba el evento KeyPress pero en asp.net, asp, php, jsp, o xsp no se como hacerlo. &lt;/li&gt;
&lt;li&gt;De una p&amp;aacute;gina A env&amp;iacute;o informaci&amp;oacute;n a una p&amp;aacute;gina B, quiero que al cerrar la p&amp;aacute;gina B el foco regrese a la p&amp;aacute;gina A. Esta &amp;uacute;ltima es cl&amp;aacute;sica en los foros, adem&amp;aacute;s de venir con esta nota la final: el c&amp;oacute;digo debe estar con C# 2008 y usando mejores pr&amp;aacute;cticas &lt;/li&gt;
&lt;li&gt;El dise&amp;ntilde;ador de Visual Studio .Net no funciona, arrastre mis controles pero en el navegador se ve todo feo &lt;/li&gt;
&lt;li&gt;Voy a desarrollar una p&amp;aacute;gina, y no se que lenguaje usar JavaScript, C#, JSP, Php, o ASP.Net, &amp;iquest;con cu&amp;aacute;l de estos se ve mejor mi p&amp;aacute;gina? &lt;/li&gt;
&lt;li&gt;Quiero pasar variables usando POST en asp.net, y no se como hacerlo &lt;/li&gt;
&lt;li&gt;&amp;iquest;Cu&amp;aacute;les son los navegadores m&amp;aacute;s usados? Estoy haciendo una web con Php, y no quiero hacer muchas versiones de mi c&amp;oacute;digo, s&amp;oacute;lo para 3 navegadores como m&amp;aacute;ximo &lt;/li&gt;
&lt;li&gt;Estoy haciendo una &lt;a title="Web 2.0" href="http://es.wikipedia.org/wiki/Web_2.0" target="_blank"&gt;Web 2.0&lt;/a&gt;, estoy programando con JavaScript y no puedo conectarme a la base de datos &lt;/li&gt;
&lt;li&gt;-&amp;iquest;Qu&amp;eacute; estas usando para desarrollar tu Web html o xhtml?, &amp;ndash;No uso html, yo estoy usando lo ultimito uso ASP.NET 3.5, dicen que html ya esta desfasado. &lt;/li&gt;
&lt;li&gt;-&amp;iquest;Y ya aprendiste Html y Javascript para tu proyecto Web?, &amp;ndash;No, con Visual Studio .Net ya no se usa eso, s&amp;oacute;lo arrastras controles y programas como en Windows &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para responder a las preguntas vamos a ver una arquitectura simple de dos aplicaciones una Windows (o de escritorio) y una Web&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Aplicaci&amp;oacute;n de Escritorio&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="http://sergiot2.com/blogimages/2009/01Ene/14-Windows.png" src="http://sergiot2.com/blogimages/2009/01Ene/14-Windows.png" /&gt;&lt;/p&gt;
&lt;p&gt;En una aplicaci&amp;oacute;n de escritorio normalmente no iniciamos sesi&amp;oacute;n por cada aplicaci&amp;oacute;n que usemos, s&amp;oacute;lo se inicia sesi&amp;oacute;n una vez cuando prendemos el sistema operativo, asumiendo que vamos a abrir una aplicaci&amp;oacute;n para ver nuestra lista de tareas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El usuario carga la aplicaci&amp;oacute;n. &lt;/li&gt;
&lt;li&gt;La aplicaci&amp;oacute;n (el c&amp;oacute;digo), se conecta a la base de datos y recupera la informaci&amp;oacute;n del usuario. &lt;/li&gt;
&lt;li&gt;La aplicaci&amp;oacute;n muestra al usuario la informaci&amp;oacute;n solicitada. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;b&gt;Aplicaci&amp;oacute;n Web&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="http://sergiot2.com/blogimages/2009/01Ene/14-Web.png" src="http://sergiot2.com/blogimages/2009/01Ene/14-Web.png" /&gt;&lt;/p&gt;
&lt;p&gt;El usuario desde cualquier parte del mundo y desde cualquier dispositivo (PC, laptop, mobile), desea ver donde ser&amp;aacute; el pr&amp;oacute;ximo @BeerTwit.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El usuario tiene que ingresar la URL de la p&amp;aacute;gina en su navegador (*1). El navegador por detr&amp;aacute;s se encargar&amp;aacute; de hacer un request (solicitud) al servidor Web usando el protocolo de comunicaci&amp;oacute;n &lt;a title="Hypertext Transfer Protocol (HTTP)" href="http://en.wikipedia.org/wiki/Http" target="_blank"&gt;HTTP&lt;/a&gt; (*2) (internet), y en este caso usar&amp;aacute; el m&amp;eacute;todo GET, por que s&amp;oacute;lo quiere obtener informaci&amp;oacute;n. &lt;/li&gt;
&lt;li&gt;El servidor Web recibe el request y env&amp;iacute;a un response (s&amp;oacute;lo html) al navegador. Los navegadores no entienden el c&amp;oacute;digo ASP, PHP, o JSP, ellos s&amp;oacute;lo muestran contenido en html (*3), es por eso que todos los servidores Web despu&amp;eacute;s de procesar un request devuelven s&amp;oacute;lo html (que puede incluir Javascript (*4)), el html generado debe ser un formulario en html, para que el usuario pueda enviar su informaci&amp;oacute;n. Por otro lado si el usuario ha iniciado sesi&amp;oacute;n con anterioridad es posible que su sesi&amp;oacute;n este activa, y no tenga que iniciar sesi&amp;oacute;n nuevamente. &lt;/li&gt;
&lt;li&gt;El usuario llena su informaci&amp;oacute;n, user y password, y hace clic en el famoso bot&amp;oacute;n &amp;ldquo;Sign in&amp;rdquo;. El navegador por detr&amp;aacute;s recolectar&amp;aacute; esta informaci&amp;oacute;n, y en este caso que se desea enviar esa informaci&amp;oacute;n al servidor debe estar usando el m&amp;eacute;todo POST. Todos los lenguajes usan POST para enviar informaci&amp;oacute;n a una p&amp;aacute;gina, ya sea ASP.NET, Php, JSP, etc (*5). En el caso especial de ASP.NET cuando est&amp;aacute;n desarrollando por defecto todos los formularios se env&amp;iacute;an usando POST, pueden hacer &amp;ldquo;View Source&amp;rdquo; de una p&amp;aacute;gina en el navegador y ver&amp;aacute;n que el formulario html tiene el m&amp;eacute;todo POST. Pueden ver tambi&amp;eacute;n esto usando la herramienta &lt;a title="Fiddler" href="http://geeks.ms/blogs/sergiotarrillo/archive/2008/02/06/69504.aspx" target="_blank"&gt;Fiddler&lt;/a&gt;. Con GET tambi&amp;eacute;n se puede enviar variables, pero no es t&amp;eacute;cnicamente enviar informaci&amp;oacute;n, es mas bien, un obtener informaci&amp;oacute;n con estos par&amp;aacute;metros. &lt;/li&gt;
&lt;li&gt;El request llega al servidor Web, y se ejecutar&amp;aacute; el c&amp;oacute;digo de servidor Php, Jsp, o ASP, que se conectar&amp;aacute; con la base para verificar si existe el usuario y si el password coincide con el enviado por el usuario. &lt;/li&gt;
&lt;li&gt;Si el usuario y el password son validos, el c&amp;oacute;digo de servidor (login.php, login.jsp, o login.aspx), redireccionar&amp;aacute; el request a otra p&amp;aacute;gina showUpdates.php, la cual se conecta nuevamente a la base de datos para traer todos los updates de los amigos del usuario, despu&amp;eacute;s de procesar la p&amp;aacute;gina, el servidor env&amp;iacute;a el response (s&amp;oacute;lo html) al usuario. &lt;/li&gt;
&lt;li&gt;El usuario ve en una p&amp;aacute;gina las &amp;uacute;ltimas actualizaciones de sus amigos, y parece que esta semana no habr&amp;aacute; @BeerTwit, as&amp;iacute; que tendr&amp;aacute; que inventar alguna excusa para generar uno nuevo. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;iquest;Se nota la diferencia por qu&amp;eacute; es distinto para programar para Windows, que programar para Web? &amp;iquest;Todav&amp;iacute;a no?. Vayamos resumiendo:&lt;/p&gt;
&lt;p&gt;*1. El front-end de toda aplicaci&amp;oacute;n Web, siempre acabar&amp;aacute; en un &amp;ldquo;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;navegador&lt;/span&gt;&lt;/b&gt;&amp;rdquo; y si queremos que se vea bien la mayor&amp;iacute;a de navegadores debemos desarrollar usando est&amp;aacute;ndares, eso evitar&amp;aacute; tener que hacer una versi&amp;oacute;n de Html o Css por cada navegador. Ahora tambi&amp;eacute;n esta de moda tener una versi&amp;oacute;n m&amp;oacute;vil de las aplicaciones: &lt;a title="http://m.elcomercio.com.pe" href="http://m.elcomercio.com.pe"&gt;http://m.elcomercio.com.pe&lt;/a&gt;, &lt;a title="http://m.hi5.com/" href="http://m.hi5.com/"&gt;http://m.hi5.com/&lt;/a&gt;, &lt;a title="http://m.facebook.com" href="http://m.facebook.com"&gt;http://m.facebook.com&lt;/a&gt;, &lt;a title="http://m.twitter.com" href="http://m.twitter.com"&gt;http://m.twitter.com&lt;/a&gt;, &lt;a href="http://m.tuWebAqui.com"&gt;http://m.tuWebAqui.com&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;*2. El protocolo usado para comunicarse con un servidor web es: &amp;ldquo;&lt;a title="Hypertext Transfer Protocol (HTTP)" href="http://en.wikipedia.org/wiki/Http" target="_blank"&gt;&lt;b&gt;HTTP&lt;/b&gt;&lt;/a&gt;&amp;rdquo;, y normalmente usamos HTTP GET o HTTP POST, para cualquier tecnolog&amp;iacute;a de servidor. Revisar este Screencast del genial &lt;a title="David Salgado" href="http://geeks.ms/blogs/dsalgado/" target="_blank"&gt;David Salgado&lt;/a&gt;: &lt;a href="http://channel9.msdn.com/posts/davidsb/Trabajando-con-HTTP-GET-y-HTTP-POST/"&gt;Trabajando con HTTP GET y HTTP POST&lt;/a&gt;, ac&amp;aacute; muestra por ejemplo simular un browser desde .Net haciendo request GET o POST usando la clase &lt;a title="HttpWebRequest class" href="http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx" target="_blank"&gt;HttpWebRequest&lt;/a&gt;, aunque tambi&amp;eacute;n pueden usar la clase &lt;a title="WebClient" href="http://msdn.microsoft.com/en-us/library/system.net.webclient(VS.80).aspx" target="_blank"&gt;WebClient&lt;/a&gt;. Por otro lado existen otros m&amp;eacute;todos de request adem&amp;aacute;s del GET o POST, el uso de estos m&amp;eacute;todos los ver&amp;aacute;n con &lt;a title="Representational state transfer (REST)" href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank"&gt;REST&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;*3. Ya hemos mencionado que todo servidor Web devuelve al cliente s&amp;oacute;lo &amp;ldquo;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;HTML&lt;/span&gt;&lt;/b&gt;&amp;rdquo;, por eso importante trabajar con est&amp;aacute;ndares para que nuestro dise&amp;ntilde;o se pueda ver bien en todos los navegadores. &amp;iquest;Por qu&amp;eacute; el c&amp;oacute;digo de mi p&amp;aacute;gina (php, jps, asp.net) no se ve bien? Pues posiblemente sea por que no sabemos HTML o no sabemos &lt;a title="CSS" href="http://geeks.ms/blogs/sergiotarrillo/search.aspx?q=CSS" target="_blank"&gt;CSS&lt;/a&gt; o el dise&amp;ntilde;o no es nuestro tu tema, si vamos a desarrollar una Web tampoco vamos a centrarnos en aprender html a nivel experto, pero si debemos conocer lo b&amp;aacute;sico sobretodo si nosotros estamos encargados de integrar el dise&amp;ntilde;o con la funcionalidad. &amp;iquest;Si soy developer como dise&amp;ntilde;o mi p&amp;aacute;gina Web?, revisar los comentarios en el &lt;a title="VS2008: CSS for Developer (Dummies Designers)" href="http://geeks.ms/blogs/sergiotarrillo/archive/2008/04/11/82923.aspx" target="_blank"&gt;siguiente art&amp;iacute;culo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;*4. Un gran aliado para hacer m&amp;aacute;s din&amp;aacute;mica la interacci&amp;oacute;n de nuestra aplicaci&amp;oacute;n web con el usuario es usar &amp;ldquo;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;Javascript&lt;/span&gt;&amp;rdquo;&lt;/b&gt;. Recuerden que una aplicaci&amp;oacute;n Web, tiene dos &amp;aacute;mbitos: cuando esta en el cliente (1), y cuando se hace un request y se va al servidor (2) para procesar el request y generar el response. Entonces, o est&amp;aacute; en el navegador del usuario o est&amp;aacute; en el servidor Web, entonces &lt;a title="JavaScript" href="http://en.wikipedia.org/wiki/JavaScript" target="_blank"&gt;JavaScript&lt;/a&gt; es un lenguaje script del lado del cliente, y con el voy poder cambiar elementos dentro de la versi&amp;oacute;n html que este en el cliente. Por ejemplo, puedo con un bot&amp;oacute;n (input: type-button) hacer el llamado a una funci&amp;oacute;n en javascript que cambia el color o contenido a un caja de texto (input: type-text), y para hacer esto en la p&amp;aacute;gina, no es necesario que la p&amp;aacute;gina vaya al servidor, con JavaScript podemos hacer estos cambios del lado del cliente. Si yo hago el cambio de color o contenido de una caja de texto desde un lenguaje de servidor asp o php, la p&amp;aacute;gina tendr&amp;aacute; que viajar al servidor s&amp;oacute;lo para cambiar el color. JavaScript da una mejor interacci&amp;oacute;n con el usuario, pero no todo se puede hacer del lado cliente, por que la data, informaci&amp;oacute;n, el valor, la carnecita, esta en el servidor y hay que viajar para traer esta informaci&amp;oacute;n. Cada vez que se hace un request al servidor Web (sea GET o POST) se refresca toda la p&amp;aacute;gina, lo que da una percepci&amp;oacute;n de lentitud a comparaci&amp;oacute;n de Windows, si quieres mejorar esto una de las opciones es usar &lt;a title="Ajax" href="http://geeks.ms/blogs/sergiotarrillo/search.aspx?q=Ajax" target="_blank"&gt;Ajax&lt;/a&gt;. Siempre es bueno conocer lo b&amp;aacute;sico de JavaScript, sobre todo para cuando estemos trabajando con popUps o cualquier interacci&amp;oacute;n del lado del cliente.&lt;/p&gt;
&lt;p&gt;*5. Y por &amp;uacute;ltimo el &amp;ldquo;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;lenguaje de servidor&lt;/span&gt;&amp;rdquo;&lt;/b&gt;, que puede ser Php, Asp, Jsp, y todos los dem&amp;aacute;s. Obviamente si tu labor es desarrollar p&amp;aacute;ginas web con acceso a datos, debes dominar el lenguaje de programaci&amp;oacute;n, pero como vimos anteriormente tambi&amp;eacute;n es &amp;uacute;til conocer lo b&amp;aacute;sico de JavaScript, Html, Css, y cuando lo vayas necesitando aprendes m&amp;aacute;s de cada uno de ellos.&lt;/p&gt;
&lt;p&gt;Espero que las preguntas propuestas al inicio, hayan quedado resueltas.&lt;/p&gt;
&lt;p&gt;P.D.: Y recuerden, programar una aplicaci&amp;oacute;n Web no es lo mismo que programar una aplicaci&amp;oacute;n de escritorio, pero si va servir nuestros conocimientos de programaci&amp;oacute;n. En .Net por ejemplo todas las librer&amp;iacute;as, a excepci&amp;oacute;n de las propias de Windows, que hayas aprendido programando Windows, te van servir cuando programas en Web, ejemplo: System.IO, System.Xml, System.Data.SqlClient, System.XYZ.&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=140214" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Windows+Forms/default.aspx">Windows Forms</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category></item><item><title>encriptando o cifrando informacion?</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2008/12/19/131910.aspx</link><pubDate>Fri, 19 Dec 2008 07:17:37 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:131910</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>12</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=131910</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2008/12/19/131910.aspx#comments</comments><description>&lt;p&gt;&lt;img alt="http://sergiot2.com/blogimages/2008/12Dic/Criptografia.jpg" src="http://sergiot2.com/blogimages/2008/12Dic/Criptografia.jpg" /&gt;&lt;/p&gt; &lt;p&gt;La necesidad de encriptar (ocultar a simple vista) información no es necesidad propia en los sistemas de información, su inicio y apogeo fue marcado por las diversas guerras que hubo en la historia, se presume desde &lt;a title="Historia de la criptograf&amp;iacute;a" href="http://es.wikipedia.org/wiki/Criptograf%C3%ADa#Historia_de_la_criptograf.C3.ADa" target="_blank"&gt;las campañas militares de los romanos hasta las últimas guerras mundiales&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;¿Qué ha cambiado, en el presente?&lt;/strong&gt; Pues que ahora contamos con computadores más potentes capaces de poder desencriptar (vamos a usar estos neologismos en la entrada, &lt;strike&gt;si prefiere, reemplazar por cifrar/descifrar&lt;/strike&gt;) la información &amp;quot;oculta&amp;quot;, utilizando &lt;a href="http://es.wikipedia.org/wiki/Ataque_de_fuerza_bruta" target="_blank"&gt;fuerza bruta&lt;/a&gt; por ejemplo. Y desde hace décadas se tratado de mejorar y llevar al proceso de estandarización los algoritmos de encriptación.&lt;/p&gt; &lt;p&gt;Veamos, un ejemplo sencillo usando el método de encriptación CCQSMO &lt;strike&gt;cualquier cosa que se me ocurra&lt;/strike&gt;:&lt;/p&gt; &lt;p&gt;La palabra Geeks.ms:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Obtener el código &lt;a title="ASCII" href="http://es.wikipedia.org/wiki/ASCII" target="_blank"&gt;Ascii&lt;/a&gt;: 7110110110711546109115  &lt;li&gt;Le sumamos 10 (clave) a cada código Ascii: 8111111111712556119125  &lt;li&gt;Volvemos a convertir a cadena, y tenemos nuestra cadena encriptada: Qoou}8w}&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Obviamente hay algoritmos de encriptación, y hay &amp;quot;algoritmos&amp;quot;. Vamos a repasar algunos de estos métodos y sus respectivas codificaciones, pero antes vamos diferenciar &lt;a title="criptograf&amp;iacute;a" href="http://es.wikipedia.org/wiki/Criptograf%C3%ADa" target="_blank"&gt;algoritmos de encriptación&lt;/a&gt; y métodos de cifrado &lt;a title="Cryptographic hash function" href="http://en.wikipedia.org/wiki/Cryptographic_hash_function" target="_blank"&gt;Hash&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;¿Se han preguntado porqué cuando se registran en algunos foros, al hacer un &amp;quot;recovery password&amp;quot;, no me devuelve el password que he perdido, el sistema devuelve un nuevo password. ¿Por qué? Es que no esta usando un algoritmo de encriptación para ocultar el password, esta usando una función Hash, y es en un sólo sentido, en otras palabras, no se puede recuperar la cadena original a partir del password. ¿Entonces, cómo hace el match?, pues lo que hace no es desencriptar el password cifrado, para compararlo con el input del usuario, lo que hace es volver a cifrar/encriptar el input, y si el input cifrado coincide con el password cifrado que esta en la base de datos, entonces valida exitosamente tus credenciales. Mas detalles: &lt;a title="Hash vs Encryption" href="http://www.infocellar.com/networks/Security/hash.htm" target="_blank"&gt;Hash vs Encryption&lt;/a&gt; y &lt;a title="Hashing vs. Encryption" href="http://www.chilkatsoft.com/faq/HashVsEncrypt.html" target="_blank"&gt;Hashing vs. Encryption&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Hecho esta aclaraciones vamos a listar los métodos de &lt;a title="criptograf&amp;iacute;a" href="http://es.wikipedia.org/wiki/Criptograf%C3%ADa" target="_blank"&gt;criptografía&lt;/a&gt;, a los cuales podemos encontrar en dos grandes grupos:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1.a) &lt;/strong&gt;&lt;a title="Criptograf&amp;iacute;a sim&amp;eacute;trica" href="http://es.wikipedia.org/wiki/Criptograf%C3%ADa_sim%C3%A9trica" target="_blank"&gt;&lt;strong&gt;Criptografía simétrica&lt;/strong&gt;&lt;/a&gt; (&lt;a title="Symmetric-key algorithm" href="http://en.wikipedia.org/wiki/Symmetric_key_algorithm" target="_blank"&gt;en&lt;/a&gt;):&lt;/p&gt; &lt;p&gt;Estos algoritmos, usan una misma clave para encriptar/desencriptar el mensaje. En .Net tenemos el namespace: &lt;a title="System.Security.Cryptography namespace" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx" target="_blank"&gt;System.Security.Cryptography&lt;/a&gt;, para las operación de encriptación:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="Data Encryption Standard (DES)" href="http://es.wikipedia.org/wiki/Data_Encryption_Standard" target="_blank"&gt;DES&lt;/a&gt;, Data Encryption Standard, se considera inseguro para muchas aplicaciones debido a que su clave es de 56 bits, recientes algoritmos de claves simétricas usan claves de 128 bits. En este artículo: &lt;a title="Encrypt/Decrypt String using DES in C#" href="http://www.codeproject.com/KB/cs/NET_Encrypt_Decrypt.aspx" target="_blank"&gt;Encrypt/Decrypt String using DES in C#&lt;/a&gt;, usa la clase &lt;a title="DESCryptoServiceProvider class" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.descryptoserviceprovider.aspx" target="_blank"&gt;DESCryptoServiceProvider&lt;/a&gt;. También puede revisar este artículo: &lt;a title="Simple Cryptographer - Simple DES/AES Implementation in C#" href="http://www.codeproject.com/KB/recipes/Simple_Cryptographer.aspx" target="_blank"&gt;Simple Cryptographer - Simple DES/AES Implementation in C#&lt;/a&gt;, o este hilo del foro: &lt;a title="Help with DES Encryption &amp;amp; Decryption using C#.Net" href="http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/6cd1aaa4-4bb0-4420-8526-ba8e9f194989/" target="_blank"&gt;Help with DES Encryption &amp;amp; Decryption using C#.Net&lt;/a&gt;, revisar la respuesta final de la primera página.  &lt;li&gt;&lt;a title="Triple DES" href="http://es.wikipedia.org/wiki/3DES" target="_blank"&gt;3DES&lt;/a&gt;, o Triple DES, que hace triple encriptación de &lt;a title="Data Encryption Standard (DES)" href="http://es.wikipedia.org/wiki/Data_Encryption_Standard" target="_blank"&gt;DES&lt;/a&gt;. Se usa a través de la clase: &lt;a title="TripleDESCryptoServiceProvider class" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.tripledescryptoserviceprovider.aspx" target="_blank"&gt;TripleDESCryptoServiceProvider&lt;/a&gt;, puede ver algunos ejemplos en los siguientes artículos: &lt;a title="Encryption/Decryption using RSA, DES, 3DES and Rijindael in VS.Net 2005" href="http://www.vbdotnetheaven.com/UploadFile/chauhan_sonu57/Encryption104192006090933AM/Encryption1.aspx" target="_blank"&gt;Encryption/Decryption using RSA, DES, 3DES and Rijindael in VS.Net 2005&lt;/a&gt; y &lt;a title="Library Encrypt and Decrypt Methods Using TripleDES and MD5" href="http://www.csharper.net/blog/library_encrypt_and_decrypt_methods_using_tripledes_and_md5.aspx" target="_blank"&gt;Library Encrypt and Decrypt Methods Using TripleDES and MD5&lt;/a&gt;.  &lt;li&gt;&lt;a title="AES - Advanced Encryption Standard" href="http://es.wikipedia.org/wiki/AES" target="_blank"&gt;AES&lt;/a&gt;, Advanced Encryption Standard o también conocido como Rijndael, es un esquema de cifrado por bloques y actualmente es el más popular dentro de los algoritmos simétricos, fue creado para reemplazar al &lt;a title="Data Encryption Standard (DES)" href="http://es.wikipedia.org/wiki/Data_Encryption_Standard" target="_blank"&gt;DES&lt;/a&gt;. Este algoritmo es implementado usando la clase &lt;a title="AesCryptoServiceProvider class" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.aescryptoserviceprovider.aspx" target="_blank"&gt;AesCryptoServiceProvider&lt;/a&gt; (only .Net 3.5), aquí algunos ejemplos: &lt;a title="Visual Studio &amp;quot;Orcas&amp;quot;: finally a BigInteger and a lot faster AES" href="http://drazen.dotlic.name/weblog/archive/2007/04/11/926.aspx" target="_blank"&gt;Visual Studio &amp;quot;Orcas&amp;quot;: finally a BigInteger and a lot faster AES&lt;/a&gt; y &lt;a title=".Net Encryption simple AES wrapper" href="http://blog.realcoderscoding.com/index.php/2008/07/dot-net-encryption-simple-aes-wrapper/" target="_blank"&gt;.Net Encryption simple AES wrapper&lt;/a&gt;. Para las versiones anteriores del .Net Framework puede revisar los siguientes artículos: &lt;a title="How To: Encrypt and Decrypt Data Using a Symmetric (Rijndael) Key (C#/VB.NET)" href="http://www.obviex.com/samples/Encryption.aspx" target="_blank"&gt;How To: Encrypt and Decrypt Data Using a Symmetric (Rijndael) Key (C#/VB.NET)&lt;/a&gt; y &lt;a title="Simple Cryptographer - Simple DES/AES Implementation in C#" href="http://www.codeproject.com/KB/recipes/Simple_Cryptographer.aspx" target="_blank"&gt;Simple Cryptographer - Simple DES/AES Implementation in C#&lt;/a&gt;.  &lt;li&gt;&lt;a title="International Data Encryption Algorithm" href="http://es.wikipedia.org/wiki/IDEA" target="_blank"&gt;IDEA&lt;/a&gt;, International Data Encryption Algorithm, también usa el cifrado en bloques y aunque no encontré muchos ejemplos, encontré una implementación en C: &lt;a title="IDEA.c" href="http://www.google.com/search?hl=en&amp;amp;q=IDEA.c&amp;amp;btnG=Search" target="_blank"&gt;IDEA.c&lt;/a&gt;. ¿Será por las &lt;a title="Encryption Algorithms for Developers, OEMs" href="http://products.enterpriseitplanet.com/security/encryption/1115829950.html" target="_blank"&gt;patentes de este algoritmo&lt;/a&gt; lo tiene la empresa MediaCrypt y se necesita licencian para usarlo comercialmente? Por cierto la evolución de IDEA, es: &lt;a title="IDEA NXT" href="http://en.wikipedia.org/wiki/IDEA_NXT" target="_blank"&gt;IDEA NXT&lt;/a&gt;.  &lt;li&gt;&lt;a title="Blowfish" href="http://es.wikipedia.org/wiki/Blowfish" target="_blank"&gt;Blowfish&lt;/a&gt;, usa bloques de 64 &lt;a href="http://es.wikipedia.org/wiki/Bit"&gt;bits&lt;/a&gt; y claves que van desde los 32 bits hasta 448 bits. Hay una implementación: Markus Hahn, &lt;a title="Blowfish.NET" href="http://www.hotpixel.net/software.html" target="_blank"&gt;Blowfish.NET&lt;/a&gt; (según el autor del algoritmo &lt;a href="http://es.wikipedia.org/wiki/Bruce_Schneier"&gt;Bruce Schneier&lt;/a&gt;, es una de las &lt;a href="http://www.schneier.com/blowfish-download.html" target="_blank"&gt;implementaciones más rápidas&lt;/a&gt;) y la otra implementación fue desarrollado por Russ Young: &lt;a title="Blowfish.cs" href="http://www.koders.com/csharp/fidD5E0D7AC50858EA8F7131E8CD2746F3471A1B953.aspx" target="_blank"&gt;Blowfish.cs&lt;/a&gt;.  &lt;li&gt;Series RC, de &lt;a title="Ron Rivest" href="http://en.wikipedia.org/wiki/Ron_Rivest" target="_blank"&gt;Ron Rivest&lt;/a&gt;: , y aunque &lt;a title="System.Security.Cryptography namespace" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx" target="_blank"&gt;System.Security.Cryptography&lt;/a&gt; tiene una clase para &lt;a title="RC2" href="http://en.wikipedia.org/wiki/RC2" target="_blank"&gt;RC2&lt;/a&gt;: &lt;a title="RC2CryptoServiceProvider" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.rc2cryptoserviceprovider.aspx" target="_blank"&gt;RC2CryptoServiceProvider&lt;/a&gt;, no tiene una clase para la versión &lt;a title="RC4" href="http://en.wikipedia.org/wiki/RC4" target="_blank"&gt;RC4&lt;/a&gt;, pero en &lt;a title="SourceForge" href="http://en.wikipedia.org/wiki/Sourceforge" target="_blank"&gt;SourceForge&lt;/a&gt; hay una librería: &lt;a title="RC4.NET" href="http://sourceforge.net/projects/rc4dotnet/" target="_blank"&gt;RC4.NET&lt;/a&gt;, también puede revisar estos artículos: &lt;a title="RC4 Encryption Algorithm: C# Version" href="http://www.codeproject.com/KB/recipes/rc4csharp.aspx" target="_blank"&gt;RC4 Encryption Algorithm: C# Version&lt;/a&gt; y &lt;a title="RC4 Encryption" href="http://dotnet-snippets.com/dns/rc4-encryption-SID577.aspx" target="_blank"&gt;RC4 Encryption&lt;/a&gt;.  &lt;li&gt;Hay otros algoritmos que se quedaron en la cola (también de las referencias) en el proceso de creación del &lt;a title="AES" href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard" target="_blank"&gt;AES&lt;/a&gt;, sucesor del &lt;a title="Data Encryption Standard (DES)" href="http://es.wikipedia.org/wiki/Data_Encryption_Standard" target="_blank"&gt;DES&lt;/a&gt;: &lt;a href="http://en.wikipedia.org/wiki/CAST-256"&gt;CAST-256&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/CRYPTON"&gt;CRYPTON&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/DEAL"&gt;DEAL&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/DFC_%28cipher%29"&gt;DFC&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/E2_%28cipher%29"&gt;E2&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/FROG"&gt;FROG&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Hasty_Pudding_cipher"&gt;HPC&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/LOKI97"&gt;LOKI97&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/MAGENTA"&gt;MAGENTA&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/MARS_%28cryptography%29"&gt;MARS&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/RC6"&gt;RC6&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Rijndael"&gt;Rijndael&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/SAFER"&gt;SAFER+&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Serpent_%28cipher%29"&gt;Serpent&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/Twofish"&gt;Twofish&lt;/a&gt;. Leer más: &lt;a title="Advanced Encryption Standard process" href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard_process" target="_blank"&gt;Advanced Encryption Standard process&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;strong&gt;1.b) &lt;/strong&gt;&lt;strong&gt;Criptografía asimétrica&lt;/strong&gt; (&lt;a title="Public key cryptography" href="http://en.wikipedia.org/wiki/Public_key_cryptography" target="_blank"&gt;en&lt;/a&gt;): &lt;/p&gt; &lt;p&gt;Usa dos claves para el envió de mensajes, una clave pública y una clave privada. El destinatario del mensaje es el que posee estas dos claves, y envía la clave pública al remitente, y sólo con la clave privada (que tiene sólo el destinatario) puede desencriptar el mensaje.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="RSA" href="http://es.wikipedia.org/wiki/RSA" target="_blank"&gt;RSA&lt;/a&gt;, es uno de los más conocidos en criptografía asimétrica. En .Net podemos usar la clase &lt;a title="RSACryptoServiceProvider class" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.aspx" target="_blank"&gt;RSACryptoServiceProvider&lt;/a&gt;, aquí un ejemplo: &lt;a title="Public Key RSA Encryption in C# .NET" href="http://www.codeproject.com/KB/security/RSACryptoPad.aspx" target="_blank"&gt;Public Key RSA Encryption in C# .NET&lt;/a&gt;, y &lt;a title="RSA Encryption in C#" href="http://www.dotnetspider.com/resources/692-RSA-Encryption-C.aspx" target="_blank"&gt;RSA Encryption in C#&lt;/a&gt;.  &lt;li&gt;&lt;a title="Digital Signature Algorithm" href="http://en.wikipedia.org/wiki/Digital_Signature_Algorithm" target="_blank"&gt;DSA&lt;/a&gt;, Digital Signature Algorithm, es un estándar para firmas digitales. En .Net podemos usar la clase &lt;a title="DSACryptoServiceProvider class" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.dsacryptoserviceprovider.aspx" target="_blank"&gt;DSACryptoServiceProvider&lt;/a&gt;, artículos: &lt;a title="Hashing, MACs, and Digital Signatures in .NET" href="http://dotnetslackers.com/articles/security/Hashing_MACs_and_Digital_Signatures_in_NET.aspx" target="_blank"&gt;Hashing, MACs, and Digital Signatures in .NET&lt;/a&gt;.  &lt;li&gt;También revisar el algoritmo &lt;a title="ElGamal" href="http://es.wikipedia.org/wiki/ElGamal" target="_blank"&gt;ElGamal&lt;/a&gt;, basado en el protocolo &lt;a title="Diffie-Hellman" href="http://es.wikipedia.org/wiki/Diffie-Hellman" target="_blank"&gt;Diffie-Hellman&lt;/a&gt;. Y también revisar &lt;a title="PKCS" href="http://es.wikipedia.org/wiki/PKCS" target="_blank"&gt;PKCS&lt;/a&gt;, &lt;a title="Public Key Cryptography Standards" href="http://en.wikipedia.org/wiki/PKCS" target="_blank"&gt;Public Key Cryptography Standards&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;2) &lt;/strong&gt;&lt;a title="Cryptographic hash function" href="http://en.wikipedia.org/wiki/Cryptographic_hash_function" target="_blank"&gt;&lt;strong&gt;Funciones de encriptación hash&lt;/strong&gt;&lt;/a&gt;: &lt;/p&gt; &lt;p&gt;Como comenté al inicio, es encriptación (o cifrado) en &lt;a href="http://www.cs.rit.edu/~ark/lectures/onewayhash/onewayhash.shtml" target="_blank"&gt;un sólo sentido&lt;/a&gt;, no se puede recuperar el texto original a parte del texto encriptado. Además de tener la particularidad de generar un texto de un tamaño específico, siendo único cada contenido generado.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a title="Message-Digest algorithm 5" href="http://en.wikipedia.org/wiki/MD5" target="_blank"&gt;MD5&lt;/a&gt;, Message-Digest algorithm 5, es ampliamente usado y dicen que parcialmente inseguro (ver detalles en wikipedia). En .Net tenemos la clase &lt;a title="MD5CryptoServiceProvider class" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.md5cryptoserviceprovider.aspx" target="_blank"&gt;MD5CryptoServiceProvider&lt;/a&gt;, algunos artículos: &lt;a title="HOWTO: Encode a password using MD5 in C# (or: howto calculate the MD5 hash for a string)" href="http://bloggingabout.net/blogs/rick/archive/2005/05/18/4118.aspx" target="_blank"&gt;HOWTO: Encode a password using MD5 in C# (or: howto calculate the MD5 hash for a string)&lt;/a&gt; y &lt;a title="How to get MD5 hash in C# . NET" href="http://blog.brezovsky.net/en-text-2.html" target="_blank"&gt;How to get MD5 hash in C# . NET&lt;/a&gt;, y como dicen en este último es similar a la &lt;a title="funci&amp;oacute;n MD5 de Php" href="http://www.php.net/md5" target="_blank"&gt;función MD5 de Php&lt;/a&gt;.  &lt;li&gt;&lt;a title="SHA hash functions" href="http://en.wikipedia.org/wiki/SHA_hash_functions" target="_blank"&gt;Serie SHA&lt;/a&gt;, Secure Hash Algorithm, existen varias series SHA-1, y en la familia SHA-2: SHA-224, SHA-256, SHA-384, y SHA-512. Donde la principal diferencia es el tamaño generado para el mensaje cifrado, como se puede ver en los resultados del siguiente artículo: NetSHA&lt;a title=": a Complete SHA implementation for the .NET Framework using C#" href="http://islab.oregonstate.edu/koc/ece575/04Project1/Nelson/NetSHA.htm" target="_blank"&gt;: a Complete SHA implementation for the .NET Framework using C#&lt;/a&gt;, .Net soporta los siguientes SHA-*: &lt;a title="SHA1CryptoServiceProvider class" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha1cryptoserviceprovider.aspx" target="_blank"&gt;SHA1CryptoServiceProvider&lt;/a&gt;, &lt;a title="SHA256CryptoServiceProvider class" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256cryptoserviceprovider.aspx" target="_blank"&gt;SHA256CryptoServiceProvider&lt;/a&gt;, &lt;a title="SHA384CryptoServiceProvider class" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha384cryptoserviceprovider.aspx" target="_blank"&gt;SHA384CryptoServiceProvider&lt;/a&gt;, y &lt;a title="SHA512CryptoServiceProvider" href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha512cryptoserviceprovider.aspx" target="_blank"&gt;SHA512CryptoServiceProvider&lt;/a&gt;. Aquí un ejemplo de como usar SHA-1: &lt;a title="SHA1 hash calculation in C#" href="http://dotnetpulse.blogspot.com/2007/12/sha1-hash-calculation-in-c.html" target="_blank"&gt;SHA1 hash calculation in C#&lt;/a&gt;, también puede revisar el siguiente artículo: &lt;a title="How To: Hash Data with Salt (C#/VB.NET)" href="http://www.obviex.com/samples/hash.aspx" target="_blank"&gt;How To: Hash Data with Salt (C#/VB.NET)&lt;/a&gt;.  &lt;li&gt;Si desea ver otras funciones Hash, las puede ver la siguiente lista: &lt;a title="List of cryptographic hash functions" href="http://en.wikipedia.org/wiki/Cryptographic_hash_function#List_of_cryptographic_hash_functions" target="_blank"&gt;List of cryptographic hash functions&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Ahora que ya vimos, los algoritmos de encriptación y funciones hash. Vayamos con algunos ejemplos, y su aplicabilidad dentro del entorno .Net&lt;/p&gt; &lt;p&gt;&lt;strong&gt;a)&lt;/strong&gt; Encriptando secciones del web.config, con estos artículos queda clarísimo: &lt;a title="Cifrado de informaci&amp;oacute;n en los archivos de configuraci&amp;oacute;n de ASP.NET" href="http://geeks.ms/blogs/jalarcon/archive/2008/04/28/cifrado-de-informaci-243-n-en-los-archivos-de-configuraci-243-n-de-asp-net.aspx" target="_blank"&gt;Cifrado de información en los archivos de configuración de ASP.NET&lt;/a&gt; y &lt;a title="Encrypting Configuration Information in ASP.NET 2.0 Applications" href="http://aspnet.4guysfromrolla.com/articles/021506-1.aspx" target="_blank"&gt;Encrypting Configuration Information in ASP.NET 2.0 Applications&lt;/a&gt;. Podemos usar dos providers: &lt;a title="How To: Encrypt Configuration Sections in ASP.NET 2.0 Using RSA" href="http://msdn.microsoft.com/en-us/library/ms998283.aspx" target="_blank"&gt;RSA&lt;/a&gt; o &lt;a title="How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI" href="http://msdn.microsoft.com/en-us/library/ms998280.aspx" target="_blank"&gt;DPAPI&lt;/a&gt;, básicamente DPAPI es más segura por que esta atada a la máquina donde se realiza la encriptación (leer &lt;a title="Cifrado de informaci&amp;oacute;n en los archivos de configuraci&amp;oacute;n de ASP.NET" href="http://geeks.ms/blogs/jalarcon/archive/2008/04/28/cifrado-de-informaci-243-n-en-los-archivos-de-configuraci-243-n-de-asp-net.aspx" target="_blank"&gt;los comentarios de José M.A.&lt;/a&gt;). Pero el proveedor &lt;a title="Data protection API" href="http://en.wikipedia.org/wiki/Data_protection_API" target="_blank"&gt;DPAPI&lt;/a&gt; (&lt;a title="DpapiProtectedConfigurationProvider" href="http://msdn.microsoft.com/en-us/library/system.configuration.dpapiprotectedconfigurationprovider(VS.80).aspx" target="_blank"&gt;DpapiProtectedConfigurationProvider&lt;/a&gt;), qué algoritmo usa? Utiliza una API del sistema operativo llamada &lt;a title="Windows Data Protection" href="http://msdn.microsoft.com/en-us/library/ms995355.aspx" target="_blank"&gt;Windows Data Protection&lt;/a&gt;, y es expuesta a través de: &lt;a title="Crypt32.dll" href="http://msdn.microsoft.com/en-us/library/aa379884(VS.85).aspx" target="_blank"&gt;Crypt32.dll&lt;/a&gt; (Win32).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;b)&lt;/strong&gt; ¿Que algoritmo de encriptación usa el servicio de membership de ASP.NET 2.0+? Si estamos usando el &lt;a title="How To: Use Membership in ASP.NET 2.0" href="http://msdn.microsoft.com/en-us/library/ms998347.aspx" target="_blank"&gt;servicio de Membership de ASP.NET 2.0+&lt;/a&gt;, dentro del web.config, en el elemento &lt;a title="membership element" href="http://msdn.microsoft.com/en-us/library/1b9hw62f.aspx" target="_blank"&gt;membership&lt;/a&gt;, nosotros podemos definir el formato del password a almacenar en la base de datos, y puede ser de tres tipos: Clear, Encrypted, and Hashed. &lt;strong&gt;Clear&lt;/strong&gt;, almacena el password en texto plano (&lt;strike&gt;por si me olvidó, o me gusta modificar el password directamente en la base de datos con un Open Table&lt;/strike&gt;), &lt;strong&gt;Hashed&lt;/strong&gt; para usar una función hash (en un sólo sentido), y &lt;strong&gt;Encrypted&lt;/strong&gt;, para poder encriptar/desencriptar un password. ¿Qué implicancia tiene, usar Hashed o Encrypted?, pues que si estamos usando el control &lt;a title="PasswordRecovery" href="http://quickstarts.asp.net/QuickStartv20/aspnet/doc/ctrlref/login/passwordrecovery.aspx" target="_blank"&gt;PasswordRecovery&lt;/a&gt;, con el formato Hashed no vamos a poder recuperar el password, lo que hará el control es generar un nuevo password, recuerden que Hash es un sólo sentido. ¿Qué algoritmos usa, y donde lo configuro? La configuración se hace en el elemento &lt;a title="machineKey element" href="http://msdn.microsoft.com/en-us/library/w8h3skw9.aspx" target="_blank"&gt;machineKey&lt;/a&gt;, y puedo usar las funciones hash MD5 y SHA1, y los algoritmos de encriptación simétrica 3DES y AES.&lt;/p&gt; &lt;p&gt;P.D.: Esto es el fruto &lt;strike&gt;de dos amanecidas hasta las 2:00 a.m.&lt;/strike&gt;, una rápida revisión a los algoritmos de encriptación, y sus respectivas implementaciones en .NET, que lo disfruten!&lt;/p&gt; &lt;p&gt;Saludos,&lt;a title="http://www.15seconds.com/Issue/021210.htm" href="http://www.15seconds.com/Issue/021210.htm"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=131910" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Sesiones del PDC 2008, filtradas para no enloquecer con tanta informacion</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2008/11/10/112782.aspx</link><pubDate>Mon, 10 Nov 2008 19:11:42 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:112782</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=112782</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2008/11/10/112782.aspx#comments</comments><description>&lt;p&gt;&lt;img alt="http://sergiot2.com/blogimages/2008/11Nov/10_SmileyPDC.jpg" src="http://sergiot2.com/blogimages/2008/11Nov/10_SmileyPDC.jpg" /&gt;&lt;/p&gt; &lt;p&gt;El &lt;a title="PDC" href="http://microsoftpdc.com" target="_blank"&gt;PDC&lt;/a&gt; (Professional Developers Conference), es un evento donde podemos ver las nuevas tecnologías propuestas por Microsoft, como dice en su about: &lt;a title="El futuro del plataforma Microsoft" href="http://microsoftpdc.com/About/" target="_blank"&gt;El futuro de la plataforma Microsoft&lt;/a&gt;, como VS2010, &amp;quot;ASP.NET 4.0&amp;quot;, C# 4.0, Oslo, Ado.Net EF 2.0, Azure, etc. En Geeks.ms, pueden encontrar algunos reportajes y análisis que hicieron los geeks que estuvieron por allá: &lt;a title="PDC on Geeks.ms" href="http://geeks.ms/search/SearchResults.aspx?q=pdc" target="_blank"&gt;PDC on Geeks.ms&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a title="PDC 2008: Todos los v&amp;iacute;deos y presentaciones!" href="http://geeks.ms/blogs/ciin/archive/2008/11/04/pdc-2008-todos-los-v-237-deos-y-presentaciones.aspx" target="_blank"&gt;JC González Marín nos aviso&lt;/a&gt; (a una semana del PDC) de la descarga de todos los vídeos y presentaciones, para los que todavía no podemos ir a un PDC, pero queremos darle una ojeada a todos estos nuevos chiches que liberara Microsoft en unos años. En esta entrada esta toda la lista de sesiones: &lt;a title="PDC2008 Quick Video Link List (Updated: Now with Keynotes)" href="http://coolthingoftheday.blogspot.com/2008/10/pdc2008-quick-video-link-list.html" target="_blank"&gt;PDC2008 Quick Video Link List (Updated: Now with Keynotes)&lt;/a&gt;, el problema de tener tanta en información es que a veces sólo nos quedamos en la descarga de todos los vídeos, presentaciones, demos, y nunca las llegamos a revisar. &lt;/p&gt; &lt;p&gt;Así que la mejor forma de asimilar tanta información es filtrar y seleccionar, sólo la que nos interesa. Desde esta página podemos ver y descargar todas las sesiones (y sus recursos): &lt;a title="https://sessions.microsoftpdc.com/public/timeline.aspx" href="https://sessions.microsoftpdc.com/public/timeline.aspx"&gt;https://sessions.microsoftpdc.com/public/timeline.aspx&lt;/a&gt;, además de disponer filtrado en la misma página.&lt;/p&gt; &lt;p&gt;Pero la mejor forma (y más rápida) de buscar y filtrar las sesiones del PDC 2008, esta en Channel9: &lt;a title="http://channel9.msdn.com/pdc2008/" href="http://channel9.msdn.com/pdc2008/"&gt;http://channel9.msdn.com/pdc2008/&lt;/a&gt;. A continuación dejo los links (enlace directo) filtrados por tag para ver las sesiones disponibles:&lt;/p&gt; &lt;p&gt;&lt;a title=".NET Framework (16)" href="http://channel9.msdn.com/tags/.NET+Framework/" target="_blank"&gt;.NET Framework (16)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.ad+platform/"&gt;Ad Platform (2)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/ADO.NET/"&gt;ADO.NET (3)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/ASP.NET/"&gt;ASP.NET (10)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.azure/"&gt;Azure (39)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.ccr/"&gt;CCR (1)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.dynamics/"&gt;Dynamics (5)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.entity+framework/"&gt;Entity Framework (3)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.expression/"&gt;Expression (4)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.hpc/"&gt;HPC (1)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.identity/"&gt;Identity (8)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.iis/"&gt;IIS (2)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.internet+explorer/"&gt;Internet Explorer (3)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.languages/"&gt;Languages (10)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.linq/"&gt;LINQ (4)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.live+framework/"&gt;Live Framework (10)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.live+mesh/"&gt;Live Mesh (10)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.live+services/"&gt;Live Services (14)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.office/"&gt;Office (2)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.oslo/"&gt;Oslo (5)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.parallelism/"&gt;Parallelism (9)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.powershell/"&gt;PowerShell (1)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.research/"&gt;research (4)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.sharepoint/"&gt;Sharepoint (5)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.silverlight/"&gt;Silverlight (11)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.sql+server/"&gt;SQL Server (16)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.sql+server+data+services/"&gt;SQL Server Data Services (8)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.surface/"&gt;Surface (0)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.sync+framework/"&gt;Sync Framework (3)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.tfs/"&gt;TFS (3)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.unified+communications/"&gt;Unified Communications (3)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.velocity/"&gt;Velocity (2)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.virtual+earth/"&gt;Virtual Earth (1)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.visual+studio/"&gt;Visual Studio (19)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.vsts/"&gt;VSTS (8)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.wcf/"&gt;WCF (6)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.wf/"&gt;WF (8)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.windows+7/"&gt;Windows 7 (24)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.windows+embedded/"&gt;Windows Embedded (1)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.windows+home+server/"&gt;Windows Home Server (2)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.windows+server/"&gt;Windows Server (12)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.wmi/"&gt;WMI (1)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.wpf/"&gt;WPF (9)&lt;/a&gt; - &lt;a href="http://channel9.msdn.com/tags/pdc2008.xna/"&gt;XNA (1)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;A disfrutar!&lt;/p&gt; &lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=112782" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Eventos/default.aspx">Eventos</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Que estas usando GET o POST? -no, yo uso ASP.Net</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2008/08/25/95868.aspx</link><pubDate>Mon, 25 Aug 2008 07:40:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:95868</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>14</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=95868</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2008/08/25/95868.aspx#comments</comments><description>&lt;p&gt;Normalmente, cuando alguién esta aprendiendo a desarrollar en Php, Jsp, o el ASP clásico (hasta el final del post lo voy a usar como ASP3), siempre hay una breve introducción al Html, y ves las diferencia de usar los métodos GET y el método POST, del protocolo &lt;a href="http://en.wikipedia.org/wiki/Htpp" title="http://en.wikipedia.org/wiki/Htpp" target="_blank"&gt;HTTP&lt;/a&gt; ( si eres desarrollador Asp.Net, tienes aplicaciones en producción, y no sabes que es GET ni POST, y menos sus diferencias, hombre, que nunca es tarde para aprender), es más en el dictado de los cursos sobre estos lenguajes se incluian estos dos temas. Recuerdo en los primeros ciclos de la universidad primero me meti a un curso, fuera de la unviersidad, de JSP (dictado por un cubano, Guillermo Sanchez &lt;strike&gt;hasta ahora creo que es el mejor curso de programación que tuve&lt;/strike&gt;) debido a que quería aprender Java, pero no sabía que no era programación en Java, era programación Web con Java, por suerte hacía unas semanas estaba aprendiendo por mi cuenta html y no me fue extranio el curso. Al siguiente ciclo me metí a un curso de Php (con Cesár Bustamente, muy bueno el curso), y comienzas a notar que todos son html, métodos Post, get, base de datos, y como que le agarras onda al asunto. Y después me metí a un Curso de ASP.Net (VS2003), (todos fuera de la Universidad) que lo enseñaba un certificado Microsoft MSCD.Net, la visión del curso era buena: introducción a .Net, Visual Studio .Net, Web Forms, uso de controles, controles de usuario, controles de datos, controles de validación, Web Services, y bueno más tarde me di cuenta que eran los &lt;a href="http://www.microsoft.com/learning/en/us/syllabi/2310Bfinal.mspx" target="_blank"&gt;temas del 2310&lt;/a&gt;, &lt;strike&gt;y no voy a decir que usaba los mismos slides y los mismos ejemplos&lt;/strike&gt;. Y bueno el curso estuvo bien enfocado, a lo que se necesita en toda aplicación Web de mantenimientos o interacción con base de datos, ¿pero y si en el curso habían personas que no sabían html, o no sabían la diferencia entre Get y Post?, no recuerdo que haya hecho esa pregunta.&lt;/p&gt; &lt;p&gt;Y este patrón se sigue repitiendo en la actualidad, por ejemplo alguién que aprendio a programar con C++, o con Visual Basic, y nunca vieron nada Web, no saben que existe el html, ni Get, ni Post, ni nada Web. Y deciden aprender desarrollo Web con ASP.Net, &lt;strike&gt;por eso de que la Web es la voz&lt;/strike&gt;, descargan tutoriales, abren Visual Studio, y comienzan a arrastrar controles indiscriminadamente, hacen doble clic en un botón, se agrega el evento botón, programan llenar un GridView, hacen View in Browser, y ya se podría decir que son desarrolladores Web, y si les preguntas que método usaste Get o Post?, la respuesta es: -&amp;quot;no, yo uso ASP.Net&amp;quot;...&lt;/p&gt; &lt;p&gt;¿&lt;b&gt;Cuál es el problema&lt;/b&gt;? Con respecto al html, va desde problemas en diseño, hasta problemas en programación. En diseño, por ejemplo arrastras un control Repeater, y lo vas a rellenar con tablas, para poner un ejemplo:&lt;/p&gt; &lt;div&gt; &lt;div style="border-style:none;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   1:&lt;/span&gt; &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;asp:Repeater&lt;/span&gt; &lt;span&gt;ID&lt;/span&gt;&lt;span&gt;=&amp;quot;repData&amp;quot;&lt;/span&gt; &lt;span&gt;runat&lt;/span&gt;&lt;span&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   2:&lt;/span&gt;    &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;HeaderTemplate&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   3:&lt;/span&gt;        &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt; &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   4:&lt;/span&gt;           &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   5:&lt;/span&gt;    &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;HeaderTemplate&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   6:&lt;/span&gt;    &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;ItemTemplate&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   7:&lt;/span&gt;           &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;lt;%&lt;/span&gt;# Eval(&amp;quot;nombre&amp;quot;) % &lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;td&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;   8:&lt;/span&gt;    &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;ItemTemplate&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;   9:&lt;/span&gt;    &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;FooterTemplate&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  10:&lt;/span&gt;           &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;tr&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;           &lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  11:&lt;/span&gt;        &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;table&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;"&gt;&lt;span&gt;  12:&lt;/span&gt;    &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;FooterTemplate&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="border-style:none;margin:0em;padding:0px;overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,&amp;#39;Courier New&amp;#39;,courier,monospace;background-color:white;"&gt;&lt;span&gt;  13:&lt;/span&gt; &lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;asp:Repeater&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Y el colmo, el jefe les pregunta, por que se ve mal página: - &amp;quot;He revisado varios foros, y dicen que Visual Studio no generá bien el Html, que tiene muchos errores, debe ser por que es Microsoft&amp;quot;.&lt;/p&gt;
&lt;p&gt;Y en programación también genera problemas, una vez vi un código que había divs sin cerrar, no estaba ordenado, el cerrar un UpdatePanel no estaba donde debería estar, eso si erá un código espagueti, y todo eso hacía que no funcione ASP.Net Ajax, cuál es la salida del programador: &amp;quot;Asp.Net Ajax no funciona con proyectos existentes, tiene que ser con proyecto nuevos&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Atención&lt;/b&gt;, tampoco se trata de que seas un experto en Html, ni mucho menos, y ya hemos comentado las diferencias que debería haber entre el designer y el developer, y como &lt;a href="http://geeks.ms/blogs/sergiotarrillo/archive/2008/04/11/82923.aspx" title="VS2008: CSS for Developer (Dummies Designers)" target="_blank"&gt;Visual Studio 2008 te da una ayudita&lt;/a&gt;, para eso están los designers, y si no eres designer te bajas algún Starter Kit.&lt;/p&gt;
&lt;p&gt;¿Pero que tengas problemas de programación porque no sabes cerrar un elemento html, y si sabes lo haces mal? Pues como que hay un pequeño problema. Si en un proyecto Web te vas a dedicar a crear los componentes de acceso a datos, te vas a meter unas fumadas con patrones, con WCF, con EF, pero no vas hacer las aspx, no hay problema si no sabes html, por que tu tarea es otra. Pero si tu eres el que vas desarrollar las aspx, eres el que va integrar el html que te envíe el designer, o eres el que va modificar el html de un starter kit, no saber nada html, ni la diferencia entre Get y Post... no se si imperdonable sea la palabra, pero de que te va traer algún problema en algún momento, lo va hacer.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Conclusión&lt;/b&gt;, no pretendo cambiar la forma de dictar, enseñar o aprender ASP.Net, pero si pienso que deberíamos (me incluyo por que creo hasta ahora no le puse el enfasis que merece) tratar de orientar mejor los objetivos y pre-requisitos de los mismos. Si vas a dictar un curso de ASP.NET 3.5 &lt;strike&gt;porque ASP.NET 2.0 es el pasado&lt;/strike&gt; que los temas vayan: 1) Visual Studio 2008 2) Master Pages &amp;amp; Themes 3) Controles Web 4) Controles de datos 5)Linq 6) y los que siguen... son excelente, pero debes asegurarte que sean pre-requisitos tener conocimientos básicos de html y programación... y si el curso ya esta marcha, pues tratar de algunas clases explicar los métodos Get, Post, tener un html válido, etiquetas básicas de html, entre otros... &lt;/p&gt;
&lt;p&gt;Por útlimo dejar esta serie de WebCast, de &lt;b&gt;&lt;/b&gt;&lt;a href="http://www.jstawski.com/" title="Jonas Stawski" target="_blank"&gt;Jonas Stawski&lt;/a&gt;, y que realmente es programación Web para principiantes, para aquellos que recién van aprender desarrollo Web, y para aquellos que ya desarrollan en ASP.Net, pero se saltaron el aprender Html, Get, Post, y eso...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032336422&amp;amp;culture=es-ES" title="Programando Web para principiantes I" target="_blank"&gt;Programando Web para principiantes I&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032336425&amp;amp;culture=es-ES" title="Programando Web para principiantes II" target="_blank"&gt;Programando Web para principiantes II&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032346608&amp;amp;culture=es-ES" title="Programando Web para principiantes III" target="_blank"&gt;Programando Web para principiantes III&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;P.D.: El título orginal de la entrada era: Enviar variables desde ASP3 por POST a una página ASP.Net, pero el comentario introductorio de unas líneas, se hizo una entrada :$.&lt;/p&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=95868" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Elementos html Flash validos por la W3C</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2008/06/16/89000.aspx</link><pubDate>Mon, 16 Jun 2008 18:07:33 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:89000</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=89000</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2008/06/16/89000.aspx#comments</comments><description>&lt;p&gt;Hay que tener algunas consideraciones a la hora de embeber el html de flash en nuestras páginas web y que este sea un código válido por la &lt;a title="World Wide Web Consortium (W3C)" href="http://www.w3.org/" target="_blank"&gt;W3C&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Lo primero que tenemos que tener en cuenta es no usar el objeto embed, que lo encontramos por ejemplo en las referencias de &lt;a title="YouTube - Broadcast Yourself" href="http://www.youtube.com/" target="_blank"&gt;YouTube&lt;/a&gt;:&lt;/p&gt; &lt;div&gt; &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;object&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;425&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;344&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;movie&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.youtube.com/v/MrMNHwmd9Hc&amp;amp;hl=en&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;embed&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;src&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.youtube.com/v/MrMNHwmd9Hc&amp;amp;hl=en&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;           &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;application/x-shockwave-flash&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;425&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;344&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;embed&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;object&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Este objeto embed, no es parte de la especificación &lt;a title="XHTML - eXtensible Hypertext Markup Language" href="http://es.wikipedia.org/wiki/XHTML" target="_blank"&gt;XHTML&lt;/a&gt;, y por ende no pasara la validación. El ajuste consiste en no usar el objeto embed, y en su lugar sólo usar el objeto param:&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;object&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;425&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;344&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.youtube.com/v/42znqcedrX0&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;application/x-shockwave-flash&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;movie&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.youtube.com/v/42znqcedrX0&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;            &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;object&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Veamos el caso por ejemplo de un MP3 Player:&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;object&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;application/x-shockwave-flash&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;data&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://sergiot2.com/audio/player.swf&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;      &lt;span style="color:#ff0000;"&gt;width&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;290&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;24&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;audioplayer1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;movie&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://sergiot2.com/audio/player.swf&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FlashVars&amp;quot;&lt;/span&gt; &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;          &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;playerID=1&amp;amp;amp;autostart=yes&amp;amp;amp;loop=yes&amp;amp;amp;&amp;quot;&lt;/span&gt; +&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;quot;bg=0xf8f8f8&amp;amp;amp;leftbg=0xeeeeee&amp;amp;amp;lefticon=0x666666&amp;amp;amp;&amp;quot;&lt;/span&gt; + &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;quot;rightbg=0xcccccc&amp;amp;amp;rightbghover=0x999999&amp;amp;amp;&amp;quot;&lt;/span&gt; + &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;quot;righticon=0x666666&amp;amp;amp;righticonhover=0xFFFFFF&amp;amp;amp;&amp;quot;&lt;/span&gt; +&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;quot;text=0x666666&amp;amp;amp;slider=0x666666&amp;amp;amp;track=0xFFFFFF&amp;amp;amp;&amp;quot;&lt;/span&gt; +&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;quot;border=0x666666&amp;amp;amp;loader=0x9FFFB8&amp;amp;amp;&amp;quot;&lt;/span&gt; + &lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;                 &lt;span style="color:#0000ff;"&gt;&amp;quot;soundFile=http%3A%2F%2Fsergiot2.com%2Faudio%2FGeorgeMichael-Faith.mp3&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;quality&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;high&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;menu&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;param&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;bgcolor&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;value&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;#FFFFFF&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;object&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;NOTA&lt;/strong&gt;: En el atributo &lt;strong&gt;value&lt;/strong&gt; use &amp;quot;+&amp;quot; para concatenar por cuestión de espacio en el blog se debería colocar todo junto sin concatenar. Notar además como a través de la parámetro &lt;strong&gt;FlashVars&lt;/strong&gt;, podemos pasar variables al objeto &lt;strong&gt;flash&lt;/strong&gt;, si es que lo necesitará. Si desea MP3 Audio Player en su sitio web:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="MP3 Player for BlogEngine.NET" href="http://rtur.net/blog/page/MP3-Player.aspx" target="_blank"&gt;MP3 Player&lt;/a&gt; for &lt;a title="BlogEngine.NET - Open Source .NET blogging" href="http://geeks.ms/blogs/sergiotarrillo/archive/2008/05/02/84673.aspx" target="_blank"&gt;BlogEngine.NET&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a title="MP3 Player for WordPress" href="http://www.1pixelout.net/code/audio-player-wordpress-plugin/" target="_blank"&gt;MP3 Player&lt;/a&gt; for &lt;a title="WordPress" href="http://es.wikipedia.org/wiki/Wordpress" target="_blank"&gt;WordPress&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a title="MP3Player for static html" href="http://www.macloo.com/examples/audio_player/" target="_blank"&gt;MP3Player for static html&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Si desean verificar la validación, pueden hacerlo en la siguiente página: &lt;a title="http://sergiot2.com/blog/validW3C.aspx" href="http://sergiot2.com/blog/validW3C.aspx"&gt;http://sergiot2.com/blog/validW3C.aspx&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Mas sobre el tema de Flash, y la validación:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Flash Satay: Embedding Flash While Supporting Standards" href="http://www.alistapart.com/articles/flashsatay" target="_blank"&gt;Flash Satay: Embedding Flash While Supporting Standards&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a title="Bye Bye Embed" href="http://www.alistapart.com/articles/byebyeembed" target="_blank"&gt;Bye Bye Embed&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=89000" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/Web/default.aspx">Web</category></item><item><title>Moviendo Aplicaciones Web ASP.NET 2.0 a IIS 7.0?</title><link>http://geeks.ms/blogs/sergiotarrillo/archive/2008/06/05/87945.aspx</link><pubDate>Thu, 05 Jun 2008 04:39:23 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:87945</guid><dc:creator>Sergio Tarrillo</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/sergiotarrillo/rsscomments.aspx?PostID=87945</wfw:commentRss><comments>http://geeks.ms/blogs/sergiotarrillo/archive/2008/06/05/87945.aspx#comments</comments><description>&lt;p&gt;A ver veamos, nosotros tenemos dos modos de correr una Aplicación Web en IIS 7.0, en modo clásico o en modo integrado, y esto lo configuramos a nivel de un &lt;strong&gt;Application Pool&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;El modo clásico, es como conocemos al trabajo de ASP.NET con IIS 6.0, el modo integrado es nuevo modelo de trabajo de IIS 7.0, que entre una de las features, me van permitir extender mi servidor, y usar funcionalidades propias que sólo tenia en ASP.NET, con otros lenguajes como Php, ASP clásico, o en páginas estáticas. Revisar el siguiente enlace para mayores detalles: &lt;a href="http://www.iis.net/default.aspx?i=928&amp;amp;subtabid=25&amp;amp;tabid=2" target="_blank"&gt;ASP.NET Integration with IIS7&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ahora, estoy moviendo una Aplicación Web ASP.NET que funciona de lujo en IIS 6.0, a trabajar con IIS 7.0, ¿qué recomendaciones debemos tener?&lt;/p&gt; &lt;p&gt;Primero, si estamos presionados y debemos hacer el cambio de aplicaciones Web a IIS 7.0, para ayer, la opción altamente recomendable es usar el modo clásico (configurar el Application pool). Tenemos que tener permiso para administrar el servidor, nos vamos a Application Pools, y verificamos que por lo menos uno de ellos o creamos uno nuevo, tenga la propiedad Managed Pipeline Mode, en Classic. Con esta configuración si nuestra aplicación Web funcionaba bien en un servidor IIS 6.0, debería funcionar bien en un servidor IIS 7.0.&lt;/p&gt; &lt;p&gt;&lt;img alt="Application Pool - Advanced Settings" src="http://sergiot2.com/blogimages/2008/06Jun/04_AppPool.jpg" /&gt;&lt;/p&gt; &lt;p&gt;¿Qué pasa si a nivel de un Web Site, solo tengo un Application Pool?, y para no perjudicar a otras aplicaciones Web, debo mantener el modo integrado, que será para todas las Aplicaciones Web dentro del Web Site. Hay algunos cambios que debemos hacer, si estamos usando determinas features.&lt;/p&gt; &lt;p&gt;Por ejemplo si estamos usando modules o handlers, que están agregados en el web.config, al ejecutar la aplicación Web, obtendremos el siguiente error: &lt;strong&gt;HTTP Error 500.22 - Internal Server Error&lt;/strong&gt;, &amp;quot;&lt;em&gt;An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode&lt;/em&gt;&amp;quot;.&lt;/p&gt; &lt;p&gt;Y el problema es que en el modo integrado, los modules y handlres, deben ser colocados dentro de las secciones &amp;lt;modules&amp;gt;, y &amp;lt;handlres&amp;gt;, de la sección &amp;lt;system.webServer&amp;gt;. Este último nos permite hacer configuraciones a nivel de IIS, y llevárnosla en la aplicación dentro del web.config, y no tener que replicarlas en un nuevo servidor.&lt;/p&gt; &lt;p&gt;La solución para este escenario es sencilla, podemos usar el siguiente comando, &lt;a href="http://learn.iis.net/page.aspx/114/getting-started-with-appcmdexe/" target="_blank"&gt;AppCmd.Exe&lt;/a&gt;, que hará la migración de las secciones en el web.config:&lt;/p&gt; &lt;p&gt;&amp;gt; %windir%\system32\inetsrv\Appcmd migrate config &amp;quot;&amp;lt;ApplicationPath&amp;gt;&amp;quot;&lt;/p&gt; &lt;p&gt;Donde:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&amp;quot;&amp;lt;ApplicationPath&amp;gt;&amp;quot; = &amp;quot;Default Web Site/&amp;quot;&amp;nbsp; o&lt;/li&gt; &lt;li&gt;&amp;quot;&amp;lt;ApplicationPath&amp;gt;&amp;quot; = &amp;quot;Default Web Site/WebApplication/&amp;quot;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Si todo salió bien, nos deberá salir un mensaje: Successfully migrate section &amp;quot;system.web./httpModules&amp;quot; | &amp;quot;system.web/httpHandlers&amp;quot;.&lt;/p&gt; &lt;p&gt;Para mayores detalles sobre los cambios o features, en las cuales debemos tener cuidado, revisar: &lt;a href="http://learn.iis.net/page.aspx/381/aspnet-20-breaking-changes-on-iis-70/" target="_blank"&gt;ASP.NET 2.0 Breaking Changes on IIS 7.0&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Atención, si la migración al modo Integrado les esta dando mucha lata y necesitan la Aplicación Web, lo mejor será usar el modo clásico. Lo ideal debe ser probarlo localmente (no producción), si todas las features de nuestra Aplicación funcionan correctamente en el modo integrado, antes de subirla a producción.&lt;/p&gt; &lt;p&gt;Saludos,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=87945" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/sergiotarrillo/archive/tags/IIS/default.aspx">IIS</category></item></channel></rss>