<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkMESHo6eyp7ImA9WhdaGEg.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235</id><updated>2011-10-28T20:06:49.413-05:00</updated><category term="Personal" /><category term="Windows Mobile" /><category term="Framework 3.5" /><category term="jQuery" /><category term="Microsoft" /><category term="Programacion" /><category term="SQL" /><category term="SQL Reporting Services" /><category term="Web Services" /><category term="SharePoint" /><category term="Windows Server 2008" /><category term="ASP" /><category term="Hyper-V" /><category term="Interoperabilidad" /><category term="ASP.NET" /><category term="C#" /><category term="virtualizacion" /><category term="Visual Studio 2008" /><category term="Noticias" /><category term="Linq" /><category term="Linux" /><category term="Seguridad" /><category term="Windows Azure" /><category term="JavaScript" /><category term="e-learning" /><category term="TechNet" /><title>Programacion, Visual Studio, C#, SQL, ASP.NET</title><subtitle type="html">Net, IT, Desarrollo Web, Cursos, Noticias y mas......</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://gogoframework.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>56</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/GoGoFramework" /><feedburner:info uri="gogoframework" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C04NQn8_eip7ImA9Wx5aFUU.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-2433029375012002821</id><published>2010-11-12T11:13:00.001-06:00</published><updated>2010-11-12T11:13:13.142-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-12T11:13:13.142-06:00</app:edited><title>Little Wonders</title><content type="html">Check out this SlideShare Presentation: &lt;div style="width:425px" id="__ss_5747749"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/BlackRabbitCoder/little-wonders-5747749" title="Little Wonders"&gt;Little Wonders&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse5747749" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=littlewonders-101111185611-phpapp01&amp;stripped_title=little-wonders-5747749&amp;userName=BlackRabbitCoder" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse5747749" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=littlewonders-101111185611-phpapp01&amp;stripped_title=little-wonders-5747749&amp;userName=BlackRabbitCoder" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/BlackRabbitCoder"&gt;BlackRabbitCoder&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-2433029375012002821?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/40oWvXR_ugjdXxoCQk5kw0HUkpI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/40oWvXR_ugjdXxoCQk5kw0HUkpI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/40oWvXR_ugjdXxoCQk5kw0HUkpI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/40oWvXR_ugjdXxoCQk5kw0HUkpI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/DOaDASuQ0xQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/2433029375012002821/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2010/11/little-wonders.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/2433029375012002821?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/2433029375012002821?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/DOaDASuQ0xQ/little-wonders.html" title="Little Wonders" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2010/11/little-wonders.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cCQXoyeCp7ImA9WxFaFUg.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-6698515699747871224</id><published>2010-07-19T09:49:00.001-05:00</published><updated>2010-07-19T09:51:00.490-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-19T09:51:00.490-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><title>Microsoft CaféTV</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.microsoft.com/latam/technet/envios/mai_MCA_microsoftCafeTV/mai_MCA_microsoftCafeTV.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 585px; height: 405px;" src="http://www.microsoft.com/latam/technet/envios/mai_MCA_microsoftCafeTV/mai_MCA_microsoftCafeTV.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-6698515699747871224?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zxAt98GzCF1DIsyOrm1MfS4fDmk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zxAt98GzCF1DIsyOrm1MfS4fDmk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zxAt98GzCF1DIsyOrm1MfS4fDmk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zxAt98GzCF1DIsyOrm1MfS4fDmk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/dWI-RtXSxTY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/6698515699747871224/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2010/07/microsoft-cafetv.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/6698515699747871224?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/6698515699747871224?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/dWI-RtXSxTY/microsoft-cafetv.html" title="Microsoft CaféTV" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2010/07/microsoft-cafetv.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MARHw7cSp7ImA9WxFSFkU.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-5462156034722697566</id><published>2010-04-19T10:01:00.002-05:00</published><updated>2010-04-19T10:04:05.209-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-19T10:04:05.209-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>Comentarios en paginas aspx</title><content type="html">Cuando queremos utilizar un comentario en nuestras paginas aspx, puede ocurrir un error durante la compilacion. El cual nos indica que no existe una definicion para ese control.&lt;br /&gt;&lt;br /&gt;
Esto ocurre por que el comentario lo realizamos de la forma clasica:&lt;br /&gt;
&lt;code&gt;
&amp;lt;!-- &amp;lt;asp:ImageButton ID="z_btnDetallesPagos" runat="server" ImageUrl="~/Images/detail.png" OnCommand="z_btnDetallesPagos_Command" /&amp;gt; --&amp;gt;
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Para corregir esto, debemos utilizar los comentarios del lado del servidor:&lt;br /&gt;
&lt;code&gt;
&amp;lt;%-- &amp;lt;asp:ImageButton ID="z_btnDetallesPagos" runat="server" ImageUrl="~/Images/detail.png" OnCommand="z_btnDetallesPagos_Command" /&amp;gt; --%&amp;gt;
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
Ailas....&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-5462156034722697566?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ef4-CztfxWedNIaSkc9WKagHzZY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ef4-CztfxWedNIaSkc9WKagHzZY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ef4-CztfxWedNIaSkc9WKagHzZY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ef4-CztfxWedNIaSkc9WKagHzZY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/lFLnsr5Z8TA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/5462156034722697566/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2010/04/comentarios-en-paginas-aspx.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/5462156034722697566?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/5462156034722697566?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/lFLnsr5Z8TA/comentarios-en-paginas-aspx.html" title="Comentarios en paginas aspx" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2010/04/comentarios-en-paginas-aspx.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYBQn4ycCp7ImA9WxNaF04.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-7052947775858387689</id><published>2009-12-01T23:53:00.006-06:00</published><updated>2009-12-02T00:59:13.098-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-02T00:59:13.098-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Invocar evento C# desde Javascript</title><content type="html">Hace mucho que no posteo nada, pero ahora les comparto una opción para poder invocar un evento que se encuentre en nuestro CodeBehind desde una funcion de Javascript.
&lt;br /&gt;&lt;br /&gt;
Por ejemplo, si queremos invocar un Evento click que esta asociado a un Boton ASP.NET, desde alguna funcion Javascript haremos lo siguiente:
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
&amp;lt;%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns="http://www.w3.org/1999/xhtml" &amp;gt;&lt;br /&gt;
&amp;lt;head runat="server"&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;function z_metjsClick() {&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;var boton = document.getElementById('z_btnAceptar');&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;boton.click();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;form id="z_FormPrincipal" runat="server"&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;asp:Button ID="z_btnAceptar" runat="server" Text="Aceptar" onclick="z_btnAceptar_Click" /&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;div onclick="z_metjsClick()" style="cursor:pointer;"&amp;gt;Click aqui para invocar el CodeBehind&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;asp:Label ID="z_lblMensaje" runat="server"&amp;gt;&amp;lt;/asp:Label&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gMklo8dzA6M/SxYPspG5k9I/AAAAAAAAAFM/BdIEhXIKs9w/s1600-h/click1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 123px;" src="http://4.bp.blogspot.com/_gMklo8dzA6M/SxYPspG5k9I/AAAAAAAAAFM/BdIEhXIKs9w/s320/click1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5410529261955683282" /&gt;&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;span id="fullpost"&gt;
Donde: 
&lt;br /&gt;&lt;br /&gt;
Tenemos una funcion JavaScript "z_metjsClick()" que obtiene el botón a través de su ID, una vez que es asignado, ejecutamos el evento click.
&lt;br /&gt;&lt;br /&gt;
El formulario contiene un control asp:Button con un evento onclick="z_btnAceptar_Click", que es el evento del codebehind. Un DIV como ejemplo (aqui dependiendo de lo que requieran, el caso es invocar a la funcion javascript), con el evento onclick="z_metjsClick()" que ejecuta a esa función. Y por último un control asp:Label, donde se mostrara un texto.
&lt;br /&gt;&lt;br /&gt;
El Evento del asp:Button en el codebehind:
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
protected void z_btnAceptar_Click(object sender, EventArgs e)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_lblMensaje.Text = "Usted hizo Click";&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Cuando hacemos clic sobre el div, será invocado el evento Click del asp:Button, mostrando el resultado en el asp:Label
&lt;br /&gt;&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gMklo8dzA6M/SxYO1Nk6WxI/AAAAAAAAAFE/ahhMrhVTCnU/s1600-h/click.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 140px;" src="http://3.bp.blogspot.com/_gMklo8dzA6M/SxYO1Nk6WxI/AAAAAAAAAFE/ahhMrhVTCnU/s320/click.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5410528309672565522" /&gt;&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
Bueno eso es todo, es algo sencillo, posteriormente profundizaremos un poco mas en el tema. haciendo uso de los WebMethods.
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
Ailas...
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-7052947775858387689?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MzB5hFVsLFZ8GCb8uRVJqR1GZbw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MzB5hFVsLFZ8GCb8uRVJqR1GZbw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MzB5hFVsLFZ8GCb8uRVJqR1GZbw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MzB5hFVsLFZ8GCb8uRVJqR1GZbw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/a4ewQDmkoNQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/7052947775858387689/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/12/invocar-evento-c-desde-javascript.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/7052947775858387689?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/7052947775858387689?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/a4ewQDmkoNQ/invocar-evento-c-desde-javascript.html" title="Invocar evento C# desde Javascript" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_gMklo8dzA6M/SxYPspG5k9I/AAAAAAAAAFM/BdIEhXIKs9w/s72-c/click1.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/12/invocar-evento-c-desde-javascript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YAQn87eCp7ImA9WxNQFUQ.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-7372219912780638296</id><published>2009-09-22T00:40:00.002-05:00</published><updated>2009-09-22T00:59:03.100-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-22T00:59:03.100-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><title>Handlers personalizados en ASP.NET (Parte II)</title><content type="html">El crear el Handler personalizado es mas sencillo de lo parece, ademas de ser sumamente potente, un ejemplo podria ser el crear un Handler para generar thumbnails de imagenes y que devuelva las imagenes en un tamaño reducido. Ademas, esto se puede mejorar utilizando el cache a ASP.NET para guardar los ya generados en el y ganar tiempo de respuesta cuando llega un request.&lt;br /&gt;&lt;br /&gt;

Vamos a ver un ejemplo que nos servira para mostrar la libertad que se tiene con el ProcessRequest y como crealos.&lt;br /&gt;&lt;br /&gt;

En una aplicacion Web, agregaremos un proyecto de libreria de clases, donde agregaremos una clase (PrimerCustomHandler), aqui el codigo:&lt;br /&gt;&lt;br /&gt;
&lt;span id="fullpost"&gt;
&lt;code&gt;
using System;&lt;br /&gt;
using System.Web;&lt;br /&gt;
public class PrimerCustomHandler : IHttpHandler&lt;br /&gt;
{&lt;br /&gt;

&lt;/code&gt;

&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-7372219912780638296?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/O1NqYclBJEkFbgXNMBB3BJYBCQ0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O1NqYclBJEkFbgXNMBB3BJYBCQ0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/O1NqYclBJEkFbgXNMBB3BJYBCQ0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O1NqYclBJEkFbgXNMBB3BJYBCQ0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/ulUmuvHTIrs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/7372219912780638296/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/09/handlers-personalizados-en-aspnet-parte_22.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/7372219912780638296?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/7372219912780638296?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/ulUmuvHTIrs/handlers-personalizados-en-aspnet-parte_22.html" title="Handlers personalizados en ASP.NET (Parte II)" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/09/handlers-personalizados-en-aspnet-parte_22.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4CR3Y6fip7ImA9WxNQFUQ.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-5369154594826962083</id><published>2009-09-21T23:57:00.004-05:00</published><updated>2009-09-22T00:39:26.816-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-22T00:39:26.816-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><title>Handlers personalizados en ASP.NET (Parte I)</title><content type="html">Vamos a empezar viendo rapidamente a lo que son los HTTP request. El mecanismo de comunicacion que usan los Navegadores es el HTTP (HyperText Transfer Protocol).
Cada vez que el navegador realiza una peticion de un sitio, este realiza un Request y cuando el sitio responde realiza un Response.&lt;br /&gt;&lt;br /&gt;
Existen varios tipos de request, entre los mas conocidos estan: GET, HEAD, POST.
GET, utiliza la linea de direcciones para enviar la informacion al sitio.&lt;br /&gt;
HEAD, solicita al sitio que le envie solamente la informacion del header de lo que esta especificado en la direccion.&lt;br /&gt;
POST, es muy parecido al get, son la diferencia, que los datos no son enviados en la direccion, y es enviada en el cuerpo del mensaje.&lt;br /&gt;&lt;br /&gt;
En ASP.NET, utilizamos la clase Page, responsable de manejar la interfaz de usuario de una aplicacion. Esta clase se encarga de interpretar los HTTP request que recibe y de manejarlo de una forma transparente para los desarrolladores.&lt;br /&gt;&lt;br /&gt;
Para que una clase pueda manejar los request entrantes, debe implementar la interfaz IHttpHandler.&lt;br /&gt;&lt;br /&gt;
&lt;span id="fullpost"&gt;
La interfaz IHttpHandler es una interfaz simple. Las clases que la implementan solo deben implementar un metodo (ProcessRequest) y una propiedad(IsReusable).&lt;br /&gt;&lt;br /&gt;
En ASP.NET, los handlers que utilice una aplicacion deben estar listados en el web.config. La definicion de un handler incluye cuatro partes. La primera es el nombre del archivo o extension que sera manejada por el handler. La segunda, la lista de verbos a los que se aplica el handler (por ejemplo, que la aplicacion aplique solo GET o POST). La tercera es la clase del handler, que sera la encargada de manejar el request. Por ultimo, la cuarta, especifica si ASP.NET cargara la clase, se levanta la aplicacion o espera a que se reciba un request para ello.
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
&lt;httpHandlers&gt;&lt;br /&gt;
   &lt;add path="*.aspx" verb="*" type="System.web.UI.PageHandlerFactory" validate="True" /&gt;&lt;br /&gt;
&lt;/httpHandlers&gt;
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Cuando llega un request al handler, se ejecuta el metodo ProcessRequest, el cual puede hacer cualquier cosa que se desee con el, para luego devolver el response correspondiente; por ejemplo una pagina aspx que se encarga de generar el HTML de la pagina para el navegador o un Web Service que se encarga de genarar el XML de la respuesta de la solicitud.
&lt;br /&gt;&lt;br /&gt;
Mas adelante veremos como generar nuestro handler personalizado. Siempre es bueno tener algo de teoria.....
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
Ailas...
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-5369154594826962083?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MEPqm_qeE2Krfw6PnWLSFE9WJtw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MEPqm_qeE2Krfw6PnWLSFE9WJtw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MEPqm_qeE2Krfw6PnWLSFE9WJtw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MEPqm_qeE2Krfw6PnWLSFE9WJtw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/yQApEbtNo_s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/5369154594826962083/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/09/handlers-personalizados-en-aspnet-parte.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/5369154594826962083?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/5369154594826962083?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/yQApEbtNo_s/handlers-personalizados-en-aspnet-parte.html" title="Handlers personalizados en ASP.NET (Parte I)" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/09/handlers-personalizados-en-aspnet-parte.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQESXsyeyp7ImA9WxNSF0U.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-2277103628090936685</id><published>2009-08-31T23:27:00.006-05:00</published><updated>2009-08-31T23:45:08.593-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T23:45:08.593-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>¿Por que usar StringBuilder para concatenar cadenas de caracteres?</title><content type="html">Hace poco un amigo me preguntaba el porque utilizaba la clase StringBuilder.
&lt;br /&gt;
Basicamente, es por que al concatenar cadenas de texto es mas eficiente, a comparacion con la concatenacion de una variable de tipo string.
&lt;br /&gt;
La clase StringBuilder, pertenece al Namespace System.Text. Seguna la msdn: Esta clase representa una cadena como un objeto, cuyo valor es una secuencia de caracteres modificable. Se dice que el valor es modificable porque puede cambiarse una vez se ha creado mediante la adición, sustracción, sustitución o inserción de caracteres.
&lt;br /&gt;
&lt;span id="fullpost"&gt;
Ahora, una variable de tipo string, que no es modificable o tambien le llaman rigida; cada vez que la variable se concatena, esta es destruida y se crea una nueva instancia de la misma para almacenar el nuevo valor, esto representa una carga extra en el procesamiento.
&lt;br /&gt;
Como siempre vamos a verlo con un ejemplo:
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
static void Main(string[] args)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;DateTime z_varodatInicio;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;DateTime z_varodatFin;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;TimeSpan z_varodatDiferencia;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrConcatenarString;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;StringBuilder z_varostrConcatenarBuilder;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Concatenando varaible de tipo String&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varodatInicio = DateTime.Now;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varostrConcatenarString = string.Empty;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;for (int i = 0; i &amp;lt; 50000; i++)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varostrConcatenarString += i.ToString();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varodatFin = DateTime.Now;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varodatDiferencia = z_varodatFin - z_varodatInicio;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine(string.Format("{0} Segundos con string", z_varodatDiferencia.Seconds.ToString()));&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varodatInicio = DateTime.Now;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varostrConcatenarBuilder = new StringBuilder();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;for (int i = 0; i &amp;lt; 50000; i++)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varostrConcatenarBuilder.Append(i.ToString());&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varodatFin = DateTime.Now;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varodatDiferencia = z_varodatFin - z_varodatInicio;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine(string.Format("{0} Segundos con StringBuilder", z_varodatDiferencia.Seconds.ToString()));&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.ReadLine();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
El resultado:
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_gMklo8dzA6M/SpyleOQnqzI/AAAAAAAAAE8/E3qCxpwT1cA/s1600-h/string.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 162px;" src="http://2.bp.blogspot.com/_gMklo8dzA6M/SpyleOQnqzI/AAAAAAAAAE8/E3qCxpwT1cA/s320/string.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5376353993815993138" /&gt;&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
Como podemos ver la diferencia es muy grande, concatenando 50000 veces, la diferencia es de 17 segundos.
&lt;br /&gt;&lt;br /&gt;
Espero les sirva, auque este tema esta muy visto y googleando podran encontrar mucha mas informacion.
&lt;br /&gt;&lt;br /&gt;
Ailas....
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-2277103628090936685?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/umBQDE_X29oQw072nQR9iYdNS8M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/umBQDE_X29oQw072nQR9iYdNS8M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/umBQDE_X29oQw072nQR9iYdNS8M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/umBQDE_X29oQw072nQR9iYdNS8M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/brAwqcPU1kk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/2277103628090936685/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/08/por-que-usar-stringbuilder-para.html#comment-form" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/2277103628090936685?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/2277103628090936685?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/brAwqcPU1kk/por-que-usar-stringbuilder-para.html" title="¿Por que usar StringBuilder para concatenar cadenas de caracteres?" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_gMklo8dzA6M/SpyleOQnqzI/AAAAAAAAAE8/E3qCxpwT1cA/s72-c/string.JPG" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/08/por-que-usar-stringbuilder-para.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4GRn0-eSp7ImA9WxNSF0o.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-384009889457433186</id><published>2009-08-31T20:50:00.001-05:00</published><updated>2009-08-31T22:48:47.351-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T22:48:47.351-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Persistir variables de sesion ASP.NET</title><content type="html">En el ciclo de vida de una aplicacion ASP.NET las variables de sesion nos permiten almacenar valores que persisten a traves de las distintas paginas.
&lt;br /&gt;
Hay ocasiones en las que resulta necesario persistir valores de un modo seguro para recuperarlos en futuras visitas. A diferencia del uso de cookies, que son guardadas del lado del cliente, nuestro objetivo es que persistan del lado del servidor, por ejemplo en una base de datos, en un archivo, etc.
&lt;br /&gt;
&lt;span id="fullpost"&gt;
&lt;br /&gt;
El siguiente ejemplo, recorreremos las variables de sesion que existen, y se creara un archivo xml donde se almacenaran los valores que se requieren. En el ejemplo unicamente se almacenan valores de tipo texto.
&lt;br /&gt;
Ahora el codigo:
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Session.Add("Usuario", "GoGo");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Session.Add("Tipo", "Administrador");&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.IO.MemoryStream z_varocioStream = new System.IO.MemoryStream();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.IO.StreamWriter z_varocioWriter = new System.IO.StreamWriter(z_varocioStream);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.Text.StringBuilder z_varocioText = new System.Text.StringBuilder();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append("&amp;lt;sessionkeys&amp;gt;");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.AppendLine();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;for (int i = 0; i &amp;lt; Session.Keys.Count; i++)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append("\t&amp;lt;");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append(Session.Keys[i]);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append(" type=\"");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append(Session[i].GetType().Name);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append("\"&amp;gt;");&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (Session[i].GetType().Name == "String")&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.AppendLine();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append("\t\t&amp;lt;value&amp;gt;");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append(Session[i].ToString());&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append("&amp;lt;/value&amp;gt;");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.AppendLine();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append("\t&amp;lt;/");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append(Session.Keys[i]);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append("&amp;gt;");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.AppendLine();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioText.Append("&amp;lt;/sessionkeys&amp;gt;");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Como podemos ver, existen 2 variables de sesion, y en el metodo Load de la pagina es donde creamos el archivo xml.
&lt;br /&gt;&lt;br /&gt;
Ailas.....
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-384009889457433186?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FQMcrFDCIg8W5widgM5wnZ4Y12A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FQMcrFDCIg8W5widgM5wnZ4Y12A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FQMcrFDCIg8W5widgM5wnZ4Y12A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FQMcrFDCIg8W5widgM5wnZ4Y12A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/7rxW21fDsN0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/384009889457433186/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/08/persistir-variables-de-sesion-aspnet.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/384009889457433186?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/384009889457433186?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/7rxW21fDsN0/persistir-variables-de-sesion-aspnet.html" title="Persistir variables de sesion ASP.NET" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/08/persistir-variables-de-sesion-aspnet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EGR3c6fip7ImA9WxNSF0s.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-5585004938762976997</id><published>2009-08-31T20:26:00.002-05:00</published><updated>2009-08-31T20:47:06.916-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T20:47:06.916-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>De texto a bytes</title><content type="html">Vamos a ver como podemos pasar uns cadena de texto a un arreglo de byes, en un solo paso.
&lt;br /&gt;
La utilidad es muy variada, ya que podemos utrilizar esta opcion para encriptar datos, guardarlos en una base de datos, etc.
&lt;br /&gt;
&lt;span id="fullpost"&gt;
&lt;br /&gt;
Ahora el codigo:
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
string z_varostrTexto;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byte[] z_varobytBytes;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varostrTexto = "GoGo Framework";&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varobytBytes = System.Text.Encoding.Unicode.GetBytes(z_varostrTexto);
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Vamos a completar el ejemplo haciendo la inversa, de un arreglo de bytes a cadena de texto, aqui el codigo:
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
string z_varostrTexto;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byte[] z_varobytBytes;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varostrTexto = "GoGo Framework";&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varobytBytes = System.Text.Encoding.Unicode.GetBytes(z_varostrTexto);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varostrTexto = "";&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varostrTexto = System.Text.Encoding.Unicode.GetString(z_varobytBytes);
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Ailas.....
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-5585004938762976997?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jjAZyUkn0mmzZQfqyRqAAn2xZGQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jjAZyUkn0mmzZQfqyRqAAn2xZGQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jjAZyUkn0mmzZQfqyRqAAn2xZGQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jjAZyUkn0mmzZQfqyRqAAn2xZGQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/9wSkhv-qsCQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/5585004938762976997/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/08/de-texto-bytes.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/5585004938762976997?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/5585004938762976997?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/9wSkhv-qsCQ/de-texto-bytes.html" title="De texto a bytes" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/08/de-texto-bytes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAARn44fip7ImA9WxJaEU0.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-3738751859976296965</id><published>2009-07-31T23:44:00.002-05:00</published><updated>2009-08-01T00:15:47.036-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-01T00:15:47.036-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Exportar datos de un DataSet a Excel</title><content type="html">El siguiente ejemplo muestra como podemos exportar a excel los datos que contiene un DataSet, aprovechando que el DataSet puede exportar directamente a un XML y Microsoft Excel soporta el formato XML.&lt;br /&gt;&lt;br /&gt;

El codigo esta en una aplicacion Web, la idea es llenar un DataSet desde una Base de Datos, guardarlo en un XML y posteriormente abrirlo en el explorador con Excel.&lt;br /&gt;&lt;br /&gt;

&lt;span id="fullpost"&gt;
Ahora el codigo:&lt;br /&gt;&lt;br /&gt;

&lt;code&gt;
using System;&lt;br /&gt;
using System.Configuration;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Data.SqlClient;&lt;br /&gt;
using System.Web;&lt;br /&gt;
using System.Web.UI;&lt;br /&gt;
using System.Web.UI.HtmlControls;&lt;br /&gt;
using System.Web.UI.WebControls;&lt;br /&gt;
using System.Web.UI.WebControls.WebParts;&lt;br /&gt;
&lt;br /&gt;
namespace DataSet_To_Excel&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;public partial class _Default : System.Web.UI.Page&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;SqlConnection z_varocioConexion = new SqlConnection("Data Source=MyServer;Initial Catalog=MyDB;User Id=User;Password=Password;");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;SqlDataAdapter z_varocioAdaptador = new SqlDataAdapter("SELECT * FROM MyTable", z_varocioConexion);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;DataSet z_varodtsDataSet = new DataSet();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioConexion.Open();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioAdaptador.Fill(z_varodtsDataSet);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varodtsDataSet.WriteXml("D:\\archivo.xls");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Response.Clear();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Response.ClearContent();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Response.ClearHeaders();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Response.ContentType = "application/octet-stream";&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Response.AddHeader("Content-Disposition", "attachment; filename=\"archivo.xls\"");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Response.WriteFile("D:\\archivo.xls");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Response.Flush();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Response.Close();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
Existen otras formas de poder exportar datos a Excel, posteriormente veremos otras opciones..... Ailas
&lt;br /&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-3738751859976296965?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iQASigXac4DEJUfDA9DWKB9c-2w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iQASigXac4DEJUfDA9DWKB9c-2w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iQASigXac4DEJUfDA9DWKB9c-2w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iQASigXac4DEJUfDA9DWKB9c-2w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/Gma44keIYkw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/3738751859976296965/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/07/exportar-datos-de-un-dataset-excel.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/3738751859976296965?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/3738751859976296965?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/Gma44keIYkw/exportar-datos-de-un-dataset-excel.html" title="Exportar datos de un DataSet a Excel" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/07/exportar-datos-de-un-dataset-excel.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cBQXg-fyp7ImA9WxJaEU0.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-8133697713172091779</id><published>2009-07-31T23:36:00.001-05:00</published><updated>2009-08-01T00:37:30.657-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-01T00:37:30.657-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Crear y escribir archivos desde ASP.NET</title><content type="html">Si requerimos crear y guardar algun archivo en nuestro servidor Web a traves de nuestra aplicacion web, tenemos algunas opciones como AppendAllText dentro del namespace System.IO.File, pero existe un pequeño problema si es que necesitamos que un proceso externo tenga acceso a este archivo (texto o binario), ya que ASP.NET por su mecanismo nos impide que otro proceso lo pueda utilizar.&lt;br /&gt;&lt;br /&gt;

&lt;span id="fullpost"&gt;
Para resolver esta situacion, utilizaremos la clase StreamWriter, que se encuentra en el namespace System.IO, al igual que la primera opcion, podremos crear el archivo, pero a diferencia podremos cerrarlo y asi liberarlo del proceso de ASP.NET.&lt;br /&gt;&lt;br /&gt;

El codigo:&lt;br /&gt;&lt;br /&gt;

&lt;code&gt;
System.IO.File.AppendAllText("D:\\prueba.txt", "Hola Mundo");&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.IO.StreamWriter z_varocioStreamWriter = new System.IO.StreamWriter("D:\\prueba1.txt", false, System.Text.Encoding.UTF8);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioStreamWriter.Write("Hola Mundo");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioStreamWriter.Close();
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Como podemos ver AppendAllText es un método a diferencia de StreamWriter que es una clase y es necesario instanciarla.&lt;br /&gt;&lt;br /&gt;

Ailas........&lt;br /&gt;&lt;br /&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-8133697713172091779?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/L5Vix-7ir2r_J1gBeb55MXWAMPc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L5Vix-7ir2r_J1gBeb55MXWAMPc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/L5Vix-7ir2r_J1gBeb55MXWAMPc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L5Vix-7ir2r_J1gBeb55MXWAMPc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/Km1l3xmpipU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/8133697713172091779/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/07/crear-y-escribir-archivos-desde-aspnet.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/8133697713172091779?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/8133697713172091779?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/Km1l3xmpipU/crear-y-escribir-archivos-desde-aspnet.html" title="Crear y escribir archivos desde ASP.NET" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/07/crear-y-escribir-archivos-desde-aspnet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcGQ30_fyp7ImA9WxJaEU0.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-2302527875356462576</id><published>2009-07-31T23:34:00.002-05:00</published><updated>2009-08-01T01:10:22.347-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-01T01:10:22.347-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Framework 3.5" /><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>SmallBasic V0.5</title><content type="html">Recurdas como aprendiste a programar???..... en lo personal mis primeros programas fueron realizados con C++.. como olvidar mi primer HOLA MUNDO, compilar y ejecutarlo en mi linea de comando.... Los clasicos programas para aprender a utilizar las variables, constantes y las instrucciones de desicion el if, el switch..... los ciclos con su FOR... la utilizacion de metodos, etc etc etc.....&lt;br /&gt;&lt;br /&gt;

Despues de todo eso... mis primeras aplicaciones utilizando Basic... y asi hasta llegar a C#....&lt;br /&gt;&lt;br /&gt;
&lt;span id="fullpost"&gt;
Pero hablemos de SmallBasic, este es un proyecto de &lt;a href="http://msdn.microsoft.com/es-es/devlabs/default(en-us).aspx"&gt;DevLabs&lt;/a&gt; que requiere del .NET Framework 3.5, su principal objetivo es ser un lenguaje para aprender a programar. Tiene lo basico, variables, funciones estructuras de control, 15 palabras reservadas, arreglos y todo lo necesario para cumplir con su objetivo.&lt;br /&gt;&lt;br /&gt;

Lo puedes descargar de &lt;a href="http://msdn.microsoft.com/en-us/devlabs/cc950524.aspx"&gt;aqui&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i.msdn.microsoft.com/cc950524.SmallBasic_logo(en-us).png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 464px; height: 126px;" src="http://i.msdn.microsoft.com/cc950524.SmallBasic_logo(en-us).png" border="0" alt="SmallBasic" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Me agrada la idea de tener un lenguaje que permita aprender a programar de una manera mas divertida......&lt;br /&gt;&lt;br /&gt;

&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-2302527875356462576?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/E8_EgrZ8_OfYryHmBwHTn5N37uA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/E8_EgrZ8_OfYryHmBwHTn5N37uA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/E8_EgrZ8_OfYryHmBwHTn5N37uA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/E8_EgrZ8_OfYryHmBwHTn5N37uA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/tX8cIv_KQbo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/2302527875356462576/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/07/smallbasic-v05.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/2302527875356462576?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/2302527875356462576?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/tX8cIv_KQbo/smallbasic-v05.html" title="SmallBasic V0.5" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/07/smallbasic-v05.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4CRH4-fyp7ImA9WxJaEEw.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-6002944659725361802</id><published>2009-07-30T22:08:00.006-05:00</published><updated>2009-07-30T23:36:05.057-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-30T23:36:05.057-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Manejo de datos en Excel con C#</title><content type="html">En esta ocasión veremos como podemos manipular datos en un archivo de Excel utilizando OleDB.&lt;br /&gt;&lt;br /&gt;

OleDb se encuentra en el namespace System.Data.OleDb, con esta clase podremos tener acceso a un origen de dato Ole Db, con el cual podremos realizar operaciones de selección, inserción y actualización. Lo que no podemos realizar es una eliminación, ya que el Jet OLE DB Provider no lo permite.&lt;br /&gt;&lt;br /&gt;

La cadena de conexion que utilizaremos quedara asi:&lt;br /&gt;&lt;br /&gt;

&lt;code&gt;
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Libro1.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=0
&lt;/code&gt;

&lt;br /&gt;&lt;br /&gt;
&lt;span  id="fullpost"&gt;
El Data Source debera de contener la ruta completa donde se ecuentra el archivo de Excel, asi como su nombre y extensión.&lt;br /&gt;
Extended Properties, El proveedor OLEDB, admite los siguientes tipos de bases de datos Microsoft Excel: &lt;br /&gt;
Excel 3.0&lt;br /&gt;
Excel 4.0&lt;br /&gt;
Excel 5.0&lt;br /&gt;
Excel 8.0&lt;br /&gt;
HDR, con esta propiedad indicamos si nuestro archivo contiene encabezados.&lt;br /&gt;
IMEX, indica si respeta los tipos de datos de las columnas en el archivo.&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
El ejemplo del archivo de Excel sería algo asi como:&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gMklo8dzA6M/SnJzWatCl9I/AAAAAAAAAE0/VoQrZhPOuOM/s1600-h/excel.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 150px; height: 138px;" src="http://4.bp.blogspot.com/_gMklo8dzA6M/SnJzWatCl9I/AAAAAAAAAE0/VoQrZhPOuOM/s320/excel.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5364476935114233810" /&gt;&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
Ahora el codigo de ejemplo:
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
using System;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Data.OleDb;&lt;br /&gt;
using System.Text;&lt;br /&gt;
&lt;br /&gt;
namespace OleDB_Excel&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;class Program&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;static void Main(string[] args)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;DataSet z_varodtsNombres = new DataSet(); //DataSet donde almacenamos el resultado del Select&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;DO_Excel z_varocioConexionExcel = new DO_Excel(); //Clase para la conexion al archivo de Excel&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Ejemplo de Select&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varodtsNombres = z_varocioConexionExcel.z_metuExecQuery("SELECT NOMBRE, EDAD FROM [Hoja1$]");&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Ejemplo de Insert&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioConexionExcel.z_metuExecNonQuery("INSERT INTO [Hoja1$] (NOMBRE, EDAD) VALUES (\"LAU\", \"30\")");&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Ejemplo de Update&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioConexionExcel.z_metuExecNonQuery("UPDATE [Hoja1$] SET EDAD = \"15\" WHERE NOMBRE = \"LAU\"");&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;public class DO_Excel&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public DataSet z_metuExecQuery(string z_parstrQueryString)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrConnectionString;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;DataSet z_varodtsSetDeDatos;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varodtsSetDeDatos = new DataSet();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varostrConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Libro1.xls;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=0\"";&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;try&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;using (OleDbConnection z_varocioSqlConnection = new OleDbConnection(z_varostrConnectionString))&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (z_varocioSqlConnection != null)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;OleDbCommand z_varocioSqlCommand = new OleDbCommand();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioSqlCommand.CommandTimeout = 0;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioSqlCommand.CommandText = z_parstrQueryString;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioSqlCommand.Connection = z_varocioSqlConnection;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;using (OleDbDataAdapter z_varocioSqlDataAdapter = new OleDbDataAdapter(z_varocioSqlCommand))&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioSqlDataAdapter.Fill(z_varodtsSetDeDatos);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;catch&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;throw;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return z_varodtsSetDeDatos;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public void z_metuExecNonQuery(string z_parstrNoQueryString)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrConnectionString;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varostrConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\Libro1.xls;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=0\"";&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;try&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;using (OleDbConnection z_varocioSqlConnection = new OleDbConnection(z_varostrConnectionString))&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (z_varocioSqlConnection != null)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;OleDbCommand z_varocioSqlCommand = new OleDbCommand();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioSqlConnection.Open();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioSqlCommand.CommandTimeout = 0;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioSqlCommand.CommandText = z_parstrNoQueryString;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioSqlCommand.Connection = z_varocioSqlConnection;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioSqlCommand.ExecuteNonQuery();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioSqlConnection.Close();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;catch&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;throw;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
Espero que les sirva...... Ailas......
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-6002944659725361802?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RCC7TKy6TBPdo7fu5h4y6NMukus/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RCC7TKy6TBPdo7fu5h4y6NMukus/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RCC7TKy6TBPdo7fu5h4y6NMukus/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RCC7TKy6TBPdo7fu5h4y6NMukus/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/LaO8sRXZfVo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/6002944659725361802/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/07/manejo-de-datos-en-excel-con-c.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/6002944659725361802?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/6002944659725361802?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/LaO8sRXZfVo/manejo-de-datos-en-excel-con-c.html" title="Manejo de datos en Excel con C#" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_gMklo8dzA6M/SnJzWatCl9I/AAAAAAAAAE0/VoQrZhPOuOM/s72-c/excel.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/07/manejo-de-datos-en-excel-con-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ECRno7eip7ImA9WxJVFE8.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-9074236749840488578</id><published>2009-06-30T22:22:00.003-05:00</published><updated>2009-06-30T23:14:27.402-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-30T23:14:27.402-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Llenando un DropDownList con un HashTable</title><content type="html">Una duda que me comentaba un amigo era: como llenar un objeto DropDownList con una coleccion HashTable.&lt;br /&gt;&lt;br /&gt;

El DropDownList es un control que permite seleccionar un elemento de una lista, que se encuentra en el Namespace &lt;em&gt;System.Web.UI.WebControls&lt;/em&gt;. &lt;br /&gt;
Un HashTable es una coleccion que esta formada en pares de claves y esta se encuentra en el Namespace &lt;em&gt;System.Collections&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;

&lt;span id="fullpost"&gt;
Para llenar el DropDownlist, se puede utilizar un objeto ListItem por cada Item que se desee mostrar. Estas etiquetas se pondran despues de las etiquetas de apertura y antes de las de cierre. El control tambien nos permite enlazarnos a un DataSource, que es la forma que utilizaremos para nuestro ejemplo.&lt;br /&gt;
La coleccion HashTable se compone de 2 elementos: una cleve (key) y un valor (value)
&lt;br /&gt;&lt;br /&gt;

&lt;code&gt;
//Creamos un HastTable y agregamos elementos a la coleccion&lt;br /&gt;
Hashtable z_varocioHashTable = new Hashtable();&lt;br /&gt;
z_varocioHashTable.Add("001", "Halo 3");&lt;br /&gt;
z_varocioHashTable.Add("002", "Guitar Hero");&lt;br /&gt;
z_varocioHashTable.Add("003", "Gears of Wars");&lt;br /&gt;
z_varocioHashTable.Add("004", "Straight Fighter V");&lt;br /&gt;
z_varocioHashTable.Add("005", "Pacman");&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
//Enlazamos el origen de datos al control DropDownList&lt;br /&gt;
z_ddlMiDropDownList.DataSource = z_varocioHashTable;&lt;br /&gt;
z_ddlMiDropDownList.DataValueField = "key";&lt;br /&gt;
z_ddlMiDropDownList.DataTextField = "value";&lt;br /&gt;
z_ddlMiDropDownList.DataBind();&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Lo importante aqui es mencionar que para enlazar el origen de datos hay que indicar que los valores seran tomados de la llave de la HashTable y que los Textos seran mostrados a partir de los valores.
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
Espero les sea de utilidad. Si requieren el codigo, pidanlo que despues lo subo......
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
Ailas.......
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-9074236749840488578?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/p490WH2wfWOiTkUJKyYXogECAfs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p490WH2wfWOiTkUJKyYXogECAfs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/p490WH2wfWOiTkUJKyYXogECAfs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/p490WH2wfWOiTkUJKyYXogECAfs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/70TGpiOrUQQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/9074236749840488578/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/06/llenando-un-dropdownlist-con-un.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/9074236749840488578?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/9074236749840488578?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/70TGpiOrUQQ/llenando-un-dropdownlist-con-un.html" title="Llenando un DropDownList con un HashTable" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/06/llenando-un-dropdownlist-con-un.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUGQHw7fyp7ImA9WxJVEkU.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-6674586380057799469</id><published>2009-06-28T23:23:00.004-05:00</published><updated>2009-06-29T09:37:01.207-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-29T09:37:01.207-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Compartir Sesiones ASP con ASP.NET</title><content type="html">En algunas ocaciones, tenemos la necesidad de comenzar con alguna migracion de una aplicacion ASP Clasica a ASP.NET. Si la aplicación es grande, seguramente sera necesario realizar la migracion paulatinamente; existe un problema con el manejo de sesiones entre ASP y ASP.NET, ya que se son diferentes. Existen soluciones, como pasar los valores por la URL, en campos ocultos, y otros mas, pero estos no so seguros, debemos de considerar principalmente este este punto.&lt;br /&gt;&lt;br /&gt;

El estado de la sesión es administrada por ASP a través del uso de una cookie que es enviada desde el servidor hacia el cliente. Si nos fijamos en la respuesta HTTP, verás algo como esto:&lt;br /&gt;
&lt;span id="fullpost"&gt;
&lt;br /&gt;

&lt;code&gt;
HTTP/1.1 200 OK&lt;br /&gt;
Server: Microsoft-IIS/5.0 Date: Mon,07 Apr 2003 12:52:26GMT&lt;br /&gt;
Content-Length: 10225&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
Cache-control: private&lt;br /&gt;
Set-Cookie: ASPSESSIONIDCSCRRCBS=GODPKFJDPJNMHGGJDOEIDDMK;
&lt;/code&gt;

&lt;br /&gt;
Todas las solicitudes enviadas desde el cliente al servidor incluirá la cookie de sesión ASP junto con la solicitud. Este cookie permite que IIS asociar la solicitud con una sesión concreta que se almacena en el servidor.&lt;br /&gt;&lt;br /&gt;

ASP.NET utiliza la misma técnica para mantener el estado de la sesión, salvo que una cookie se visualiza en el nombre. En el caso de que un par de sesiones de ASP y ASP.NET se han establecido en el mismo servidor, el navegador enviará las cookies de ASP y ASP.NET por cada solicitud. La solicitud se verá como esto:&lt;br /&gt;&lt;br /&gt;

&lt;code&gt;
GET /MixedSessions/ASPSession.aspx HTTP/1.0&lt;br /&gt;
...headers removed to simplify example...&lt;br /&gt;
Cookie: ASPSESSIONIDAAR=NGHNLJKBBJG;&lt;br /&gt;
ASP.NET_SessionId=q5ydd3t45....
&lt;/code&gt;


&lt;br /&gt;&lt;br /&gt;
La solución es permitir que una aplicación ASP.NET pueda recuperar variables de una Session de ASP. El proceso seria el siguiente:&lt;br /&gt;&lt;br /&gt;

1. El navegador envía una solicitud al servidor. Esta solicitud contendrá la ASP y ASPX ("cookies").&lt;br /&gt;
2. Una ASPX (que necesita información de una Session de ASP), creará una petición HTTP y envían una página ASP que está diseñado específicamente para regresar las variables objeto Session de ASP de manera segura.&lt;br /&gt;
3. La página ASP auntentica que la petición es de una página ASP.NET local. Entonces la variable de Session es retornada en la respuesta HTTP.&lt;br /&gt;
4. La página ASP.NET hará todo lo que se necesita y generará la respuesta.&lt;br /&gt;
5. La respuesta se devuelve al usuario.&lt;br /&gt;&lt;br /&gt;

La página ASP contendrá el siguiente código (VariablesSession.asp):&lt;br /&gt;&lt;br /&gt;

&lt;code&gt;
&amp;lt;%@ Language=VBScript %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;%&lt;br /&gt;
dim sT&lt;br /&gt;
if Request.ServerVariables("REMOTE_ADDR") = Request.ServerVariables("LOCAL_ADDR") then&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;sT = Request("VariablesSession")&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;if trim(sT) &amp;lt;&amp;gt; "" then&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Response.Write Session(sT)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;end if&lt;br /&gt;
end if&lt;br /&gt;
%&amp;gt;
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
La clase .NET que solicita al ASP quedaría de la siguiente manera:
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
using System;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Configuration;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Net;&lt;br /&gt;
using System.Web;&lt;br /&gt;
using System.Web.Security;&lt;br /&gt;
using System.Web.UI;&lt;br /&gt;
using System.Web.UI.HtmlControls;&lt;br /&gt;
using System.Web.UI.WebControls;&lt;br /&gt;
using System.Web.UI.WebControls.WebParts;&lt;br /&gt;
&lt;br /&gt;
namespace IntercambioSesiones&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;public class BO_ASPtoNET&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public HttpContext z_varacioContext;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public string z_varastrSessionVarASP;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public BO_ASPtoNET(HttpContext z_parcioInContext)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varacioContext = z_parcioInContext;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varastrSessionVarASP = "VariablesSession.asp";&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;/* Construimos el objeto System.Uri para obtener la &lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; URL para enviar la solicitud HTTP . que contiene el &lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objeto System.Uri que representa cada URL ASPXs.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;*/&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.Uri z_varocioURL = z_varacioContext.Request.Url;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varastrSessionVarASP = z_varocioURL.Scheme + "://" + z_varocioURL.Host + ":" + z_varocioURL.Port.ToString() + "/" + z_varastrSessionVarASP;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public string z_metuGetSessionVar(string z_parstrSessionVar)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// En primer lugar obtienen la cookie de la sesión&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrASPCookieName = "";&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrASPCookieValue = "";&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (!z_metuGetSessionCookie (out z_varostrASPCookieName, out z_varostrASPCookieValue))&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return "";&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Inicializar el WebRequest.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;HttpWebRequest z_varocioMyRequest = (HttpWebRequest)WebRequest.Create(z_varastrSessionVarASP + "?VariablesSession=" + z_parstrSessionVar);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioMyRequest.Headers.Add("Cookie: " + z_varostrASPCookieName + "=" + z_varostrASPCookieValue);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Enviar la solicitud y obtener una respuesta.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;HttpWebResponse z_varocioMyResponse = (HttpWebResponse)z_varocioMyRequest.GetResponse();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Stream z_varocioReceiveStream = z_varocioMyResponse.GetResponseStream();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;System.Text.Encoding z_varocioEncode = System.Text.Encoding.GetEncoding("utf-8");&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;StreamReader z_varocioReadStream = new StreamReader(z_varocioReceiveStream, z_varocioEncode);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrResponse = z_varocioReadStream.ReadToEnd();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioMyResponse.Close();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioReadStream.Close();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return z_varostrResponse;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private bool z_metuGetSessionCookie(out string z_parstrASPCookieName, out string z_parstrASPCookieValue)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;HttpCookie z_varocioMyCookie;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_parstrASPCookieName = "";&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_parstrASPCookieValue = "";&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Capturar todos los nombres de cookies de una cadena en la matriz.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;String[] z_varostrCookieArray = z_varacioContext.Request.Cookies.AllKeys;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Recorrer el objeto cookie por su nombre:&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;for (int i = 0; i &amp;lt; z_varostrCookieArray.Length; i++)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioMyCookie = z_varacioContext.Request.Cookies[z_varostrCookieArray[i]];&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (z_varocioMyCookie.Name.StartsWith("ASPSESSION"))&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_parstrASPCookieName = z_varocioMyCookie.Name;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_parstrASPCookieValue = z_varocioMyCookie.Value;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return true;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return false;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Ahora instanciado la clase BO_ASPtoNET para utilizar el metodo z_metuGetSessionCookie y asi obtenr la variable de sesion que requerimos.&lt;br /&gt;&lt;br /&gt;

&lt;code&gt;
BO_ASPtoNET z_varocioSesion = new BO_ASPtoNET(Context);&lt;br /&gt;
string z_varostrIdUsuario = z_varocioSesion.z_metuGetSessionVar("Id_User");&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;


Listo...... Espero que les sea de utilidad.
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;


Ailas......

&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-6674586380057799469?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4eCtqpHqUQuTKr1ZarnIRMDYCEc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4eCtqpHqUQuTKr1ZarnIRMDYCEc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4eCtqpHqUQuTKr1ZarnIRMDYCEc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4eCtqpHqUQuTKr1ZarnIRMDYCEc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/ADrEk9hvJls" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/6674586380057799469/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/06/compartir-sesiones-asp-con-aspnet.html#comment-form" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/6674586380057799469?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/6674586380057799469?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/ADrEk9hvJls/compartir-sesiones-asp-con-aspnet.html" title="Compartir Sesiones ASP con ASP.NET" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/06/compartir-sesiones-asp-con-aspnet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYNRH0yfCp7ImA9WxJQGUQ.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-2180762181573489107</id><published>2009-06-02T19:41:00.005-05:00</published><updated>2009-06-02T19:49:55.394-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-02T19:49:55.394-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Noticias" /><category scheme="http://www.blogger.com/atom/ns#" term="TechNet" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>3° Concurso BlogIt</title><content type="html">Nuevamente Microsoft México ha iniciado el Concurso BlogIt, en el cual puede participar cualquier pesona que cuente con un Blog, en el que hablen temas referentes a tecnologias Microsoft.
&lt;br /&gt;&lt;br /&gt;
Y no espere en incribir nuevamente mi blog, ahora en la categoria &lt;span style="font-weight:bold;"&gt;Desarrolladores de Software&lt;/span&gt; (ahora si encontre la categoría correcta ).
&lt;br /&gt;&lt;br /&gt;
Espero contar nuevamente con sus votos. Y seguir posteando articulos como anteriormente lo venia haciendo (a veces el trabajo absorve mucho de mi tiempo )......
&lt;br /&gt;&lt;br /&gt;
AILAS......
&lt;br /&gt;&lt;br /&gt;
&lt;object data='data:application/x-silverlight,' type='application/x-silverlight-2'                                     width='234' height='90'&gt;                                     &lt;param name='source' value='http://www.blogit.ms/BlogIT.xap' /&gt;                                     &lt;param name='onerror' value='onSilverlightError' /&gt;                                     &lt;param name='background' value='white' /&gt;                                     &lt;param name='minRuntimeVersion' value='2.0.31005.0' /&gt;                                     &lt;param name='autoUpgrade' value='true' /&gt;                                     &lt;a href='http://go.microsoft.com/fwlink/?LinkID=124807' style='text-decoration: none;'&gt;                                         &lt;img src='http://go.microsoft.com/fwlink/?LinkId=108181' alt='Get Microsoft Silverlight'                                             style='border-style: none' /&gt;                                     &lt;/a&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-2180762181573489107?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TL-1_BgWCyg1rVafwEwZ1yDyNMk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TL-1_BgWCyg1rVafwEwZ1yDyNMk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TL-1_BgWCyg1rVafwEwZ1yDyNMk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TL-1_BgWCyg1rVafwEwZ1yDyNMk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/pA0A05TwkMI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/2180762181573489107/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/06/3-concurso-blogit.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/2180762181573489107?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/2180762181573489107?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/pA0A05TwkMI/3-concurso-blogit.html" title="3° Concurso BlogIt" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/06/3-concurso-blogit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8BSHc6eSp7ImA9WxVbEE8.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-4682292624472464455</id><published>2009-03-25T18:47:00.003-06:00</published><updated>2009-03-25T18:54:19.911-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-25T18:54:19.911-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>Entrenamiento online gratuito para desarrolladores en tecnologías Microsoft SharePoint</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blogs.technet.com/blogfiles/guillermotaylor/WindowsLiveWriter/YavieronSharepointDeveloper.com_62F8/image_3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 534px; height: 417px;" src="http://blogs.technet.com/blogfiles/guillermotaylor/WindowsLiveWriter/YavieronSharepointDeveloper.com_62F8/image_3.png" border="0" alt="" /&gt;&lt;/a&gt;
Les recomiendo este recurso online y gratuito para aquellos que quieren aprender a desarrollar sobre esta plataforma de Microsoft.
&lt;br /&gt;&lt;br /&gt;
Para ingresar &lt;a href="http://www.microsoft.com/click/SharePointDeveloper/"&gt;Clic Aqui&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-4682292624472464455?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5q-0_KwSlFUe08xamZytQQGHVx8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5q-0_KwSlFUe08xamZytQQGHVx8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5q-0_KwSlFUe08xamZytQQGHVx8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5q-0_KwSlFUe08xamZytQQGHVx8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/1K7W71SW9H8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/4682292624472464455/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/03/entrenamiento-online-gratuito-para.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/4682292624472464455?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/4682292624472464455?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/1K7W71SW9H8/entrenamiento-online-gratuito-para.html" title="Entrenamiento online gratuito para desarrolladores en tecnologías Microsoft SharePoint" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/03/entrenamiento-online-gratuito-para.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUAQHwzfyp7ImA9WxVbEE8.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-8892591180571603543</id><published>2009-03-25T18:37:00.003-06:00</published><updated>2009-03-25T18:44:01.287-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-25T18:44:01.287-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>Liberación de Windows Internet Explorer 8</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blogs.technet.com/blogfiles/seguridaddigitalmexico/WindowsLiveWriter/LiberacinyDisponibilidaddeWindowsInterne_C093/clip_image002_2.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 152px; height: 59px;" src="http://blogs.technet.com/blogfiles/seguridaddigitalmexico/WindowsLiveWriter/LiberacinyDisponibilidaddeWindowsInterne_C093/clip_image002_2.jpg" border="0" alt="" /&gt;&lt;/a&gt;
Microsoft libero el día 19 de marzo de 2009 la nueva versión del Internet Explorer 8. Esta nueva versión esta alineada a las normas y estándares internacionales con la finalidad de garantizar una mejor experiencia del usuario y apoyar a las organizaciones presentes en el  Internet a apoyar sus estrategias de seguridad, productividad y rendimiento.
&lt;br /&gt;&lt;br /&gt;
&lt;span id="fullpost"&gt;
&lt;span style="font-weight:bold;"&gt;Centrado en la empresa.&lt;/span&gt;
&lt;br /&gt;&lt;br /&gt;
Internet Explorer 8 se ha desarrollado expresamente pensando en los entornos empresariales. Por ello, ayuda a la implementación de manera simplificada y eficaz, a través de la compatibilidad incorporada con la infraestructura Microsoft actual de tal forma que la implementación se rápida y sencilla con los diversos sistemas existentes, de este modo, puede controlar a qué características y opciones tienen acceso sus empleados, y también el momento y la forma de efectuar la implementación.
&lt;br /&gt;&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;Seguridad mejorada.&lt;/span&gt;
&lt;br /&gt;&lt;br /&gt;
Internet Explorer 8 también se ha creado para proteger su entorno de TI contra las amenazas cambiantes de la web, tanto si se trata de intentos de aprovechar las vulnerabilidades de seguridad de los usuarios a través de la ingeniería social o incluso de ataques al propio sitio web.
&lt;br /&gt;&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;Mayor rendimiento.&lt;/span&gt;
&lt;br /&gt;&lt;br /&gt;
Desde el principio, Internet Explorer 8 se ha creado para ayudar a sus empleados a aumentar su productividad y a usted a mantener el control sobre sus sistemas. Podrá realizar con más rapidez tareas comunes, como consultar un mapa o actualizar la información de clientes, gracias a los aceleradores. Y realizar el seguimiento de la información crítica de la empresa con un solo clic gracias a Web Slices. Todo ello con un tiempo de inicio más breve y carga más rápida de las páginas.
&lt;br /&gt;&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;Máxima compatibilidad significa un control más eficaz de su empresa.&lt;/span&gt;
&lt;br /&gt;&lt;br /&gt;
Ustedes la han pedido; nosotros lo proporcionamos compatibilidad retroactiva, Hay que tener en cuenta que son muchos los usuarios, las aplicaciones de línea de negocio, las directivas y las herramientas del sistema que hay que administrar y su trabajo consiste en asegurarse de que todos los usuarios y los elementos se interrelacionen correctamente. Por ello, se alegrará de saber que Windows® Internet Explorer® 8 proporciona un modo de compatibilidad con Internet Explorer 7, para que no tenga que sustituir ni repetir las aplicaciones basadas en explorador. En cambio, puede usar las mismas aplicaciones y los mismos sitios que utiliza actualmente.
Acciones recomendadas para nuestros clientes y socios
&lt;br /&gt;&lt;br /&gt;
Internet Explorer 8 esta basado en los estándares web de la industria bajo las especificaciones HTML 4.01 y CSS 2.1, adicionalmente soporta varias de las especificaciones de HTML 5 y CSS 3.0, nuestra intención es ayudar e impulsar un web compatible por lo que invitamos a revisar el estado actual de sus sitios web y verificar el estado en que sus sitios web cumplen estos estándares web, lo que le garantizara que es compatible.
&lt;br /&gt;&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;Consideraciones&lt;/span&gt;
&lt;br /&gt;&lt;br /&gt;
Entendemos que en el corto plazo, web sites que eran compatibles con versiones anteriores de Internet Explorer o que no cumplen con los estándares de la industria web, podrían no mostrarse adecuadamente, sabemos que las organizaciones en esta situación, necesitan tiempo para la actualización o revisión de les estándares web de sus sitios. Para esta transición y proporcionar tiempo para esta actualización y pruebas de sus sitios web, ofrecemos una solución de corto plazo, la incursión de su sitio en la lista de compatibilidad de Internet Explorer 8, lo que permitirá que cualquier navegador al entrar en su sitio lo visualice en la como si se tratase de la versión 7.
&lt;br /&gt;&lt;br /&gt;
&lt;a href="http://blogs.msdn.com/ie/archive/2008/12/03/compatibility-view-improvements-to-come-in-ie8.aspx."&gt;Para más información&lt;/a&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-8892591180571603543?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Q8i2V_bFFDyHn5gy685L5Ho5agc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q8i2V_bFFDyHn5gy685L5Ho5agc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Q8i2V_bFFDyHn5gy685L5Ho5agc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q8i2V_bFFDyHn5gy685L5Ho5agc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/UxlaKgvnvXo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/8892591180571603543/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/03/liberacion-de-windows-internet-explorer.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/8892591180571603543?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/8892591180571603543?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/UxlaKgvnvXo/liberacion-de-windows-internet-explorer.html" title="Liberación de Windows Internet Explorer 8" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/03/liberacion-de-windows-internet-explorer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQFR3s8eyp7ImA9WxVUE0U.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-8881265456422028093</id><published>2009-03-17T09:34:00.005-06:00</published><updated>2009-03-18T08:58:36.573-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-18T08:58:36.573-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Novedades C# 4.0</title><content type="html">Desde que Anders Hejlsberg dio la conferencia a cerca de la nueva version de este version 4.0 de C#, he estado estudiando cuales son sus nuevas caracteristicas, ha sufrido muchos cambios, nuevas cosas, y vamos a platicar un poco de cada una de ellas.&lt;br /&gt;&lt;br /&gt;

&lt;ol&gt;
&lt;li&gt;Parametros opcionales y nombrados&lt;/li&gt;
&lt;li&gt;Covarianza y contravarianza en interfaces y delegados&lt;/li&gt;
&lt;li&gt;Mejoras en la interoperabilidad con COM&lt;/li&gt;
&lt;li&gt;Tipado dinámico&lt;/li&gt;
&lt;li&gt;Programación concurrente&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;span id="fullpost"&gt;
&lt;h1&gt;Parametros opcionales y nombrados&lt;/h1&gt;
&lt;br /&gt;&lt;br /&gt;
Veamos un ejemplo, el siguiente codigo muestra la sobrecarga principal.
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
public StreamReader OpenTextFile(&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;string path,&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Encoding encoding,&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;bool detectEncoding,&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;int bufferSize);
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Ahora vemos las sobrecargas secundarias
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
public StreamReader OpenTextFile(&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;string path,&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Encoding encoding,&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;bool detectEncoding);&lt;br /&gt;
&lt;br /&gt;
public StreamReader OpenTextFile(&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;string path,&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Encoding encoding);&lt;br /&gt;
&lt;br /&gt;
public StreamReader OpenTextFile(&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;string path);
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
El siguiente código muestra como definir los parametros opcionales (estos siempre deberán ir al final):
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
public StreamReader OpenTextFile(&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;string path,&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;Encoding encoding = null,&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;bool detectEncoding = true,&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;int bufferSize = 1024);&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Utilizamdo los parametros opcionales de la siguiente manera:
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
OpenTextFile("foo.txt", Encoding.UTF8);
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Y asi se utilizarian los parametros nombrados (los parametros nombrados deberan ir al final):
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
OpenTextFile("foo.txt", Encoding.UTF8, bufferSize: 4096);
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Los argumento nombrados pueden ir en cualquier orden siempre y cuando no falten los obligatorios:
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
OpenTextFile(&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;bufferSize: 4096,&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;path: "foo.txt",&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;detectEncoding: false);
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Covarianza y contravarianza en interfaces y delegados&lt;/h1&gt;
&lt;br /&gt;&lt;br /&gt;
La covarianza y contravarianza proporcionan cierta flexibilidad al confrontar las firmas de métodos con tipos de delegado. La covarianza permite que un método tenga un tipo de valor devuelto más derivado que lo que se define en el delegado. La contravarianza permite un método con tipos de parámetro que se deriven menos que en el tipo de delegado. Caracteristicas:
&lt;br /&gt;&lt;br /&gt;
Para interfaces y delegados:&lt;br /&gt;
&lt;dl&gt;
 &lt;dt&gt;Se comprueba estáticamente en el punto de definición&lt;/dt&gt;
 &lt;dt&gt;Los tipos valor siempre son invariantes&lt;/dt&gt;
  &lt;dl&gt;
   &lt;dt&gt;IEnumerable&amp;lt;int&amp;gt; no es IEnumerable&amp;lt;object&amp;gt;&lt;/dt&gt;
   &lt;dt&gt;Reglas similares a las existentes para arrays &lt;/dt&gt;
  &lt;/dl&gt;
 &lt;dt&gt;Los parámetros ref y out necesitan un tipo invariante &lt;/dt&gt;
&lt;/dl&gt;
&lt;br /&gt;&lt;br /&gt;
Los arrays de .NET  son covariantes, pero de manera no segura
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
string[] strings = GetStringArray();&lt;br /&gt;
Process(strings);&lt;br /&gt;
&lt;br /&gt;
void Process(object[] objects) {&lt;br /&gt;
&amp;#160;&amp;#160; objects[0] = "Hello";&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Ok&lt;br /&gt;
&amp;#160;&amp;#160; objects[1] = new Button();&amp;#160;&amp;#160;// ¡Excepción!&lt;br /&gt;
}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Hasta ahora los genéricos de C# han sido invariantes, C# 4.0 soporta covarianza y contravarianza seguras
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
List&amp;lt;string&amp;gt; strings = GetStringList();&lt;br /&gt;
Process(strings);&lt;br /&gt;
&lt;br /&gt;
void Process(IEnumerable&amp;lt;object&amp;gt; objects) {&lt;br /&gt;
&amp;#160;&amp;#160; // IEnumerable&amp;lt;T&amp;gt; es de solo lectura&lt;br /&gt;
&amp;#160;&amp;#160; // y por tanto covariante de manera segura&lt;br /&gt;
}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
En el siguiente codigo:
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
public interface IEnumerable&amp;lt;out T&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160; IEnumerator&amp;lt;T&amp;gt; GetEnumerator();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
out = CovarianteSolo posiciones de salida&lt;br /&gt;
&lt;br /&gt;
public interface IEnumerator&amp;lt;out T&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160; T Current { get; }&lt;br /&gt;
&amp;#160;&amp;#160; bool MoveNext();&lt;br /&gt;
}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Puede ser tratada como menos derivada
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
IEnumerable&amp;lt;string&amp;gt; strings = GetStrings();&lt;br /&gt;
IEnumerable&amp;lt;object&amp;gt; objects = strings;
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
En este otro ejemplo:
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
public interface IComparer&amp;lt;in T&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160; int Compare(T x, T y);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
in = ContravarianteSolo posiciones de entrada&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Puede ser tratada como más derivada
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
IComparer&amp;lt;object&amp;gt; objComp = GetComparer();&lt;br /&gt;
IComparer&amp;lt;string&amp;gt; strComp = objComp;
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Mejoras en la interoperabilidad con COM
&lt;br /&gt;&lt;br /&gt;
Objeto automático -&gt; mapeo dinámico&lt;br /&gt;
Parámetros opcionales y nombrados&lt;br /&gt;
Propiedades indexadas&lt;br /&gt;
Modificador "ref" opcional&lt;br /&gt;
Posibilidad de embeber tipos de interoperabilidad ("No PIA")&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;h1&gt;Tipado dinámico&lt;/h1&gt;
&lt;br /&gt;&lt;br /&gt;
El tipado dinamico permite que una variable puede tomar valores de distinto tipo en distintos momentos. Ejemplo:
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
dynamic calc = GetCalculator();&lt;br /&gt;
int sum = calc.Add(10, 20);
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Donde, Su tipo estático es dynamic, es convertido de forma dinamica al momento de la asignacion de la llamada dinámica.
&lt;br /&gt;&lt;br /&gt;
De la forma Tipado estatico quedaria:
&lt;br /&gt;&lt;br /&gt;
&lt;code&gt;
ScriptObject calc = GetCalculator();&lt;br /&gt;
object res = calc.Invoke("Add", 10, 20);&lt;br /&gt;
int sum = Convert.ToInt32(res);
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
Cuando los operandos son dynamic:&lt;br /&gt;
&lt;dl&gt;
 &lt;dt&gt;La selección de miembros se difiere a tiempo de ejecución&lt;/dt&gt;
 &lt;dt&gt;En ejecución, se sustituye dynamic por el tipo real&lt;/dt&gt;
 &lt;dt&gt;El tipo estático del resultado de la operación es dynamic&lt;/dt&gt;
&lt;/dl&gt;
&lt;br /&gt;&lt;br /&gt;
Programación concurrente (multicore), ya que la tendencia es añadir más y más procesadores.
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-8881265456422028093?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_3sYU3sjVtDydKUuOMyVD7fitAM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_3sYU3sjVtDydKUuOMyVD7fitAM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_3sYU3sjVtDydKUuOMyVD7fitAM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_3sYU3sjVtDydKUuOMyVD7fitAM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/uyrsNbhWiZU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/8881265456422028093/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/03/novedades-c-40.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/8881265456422028093?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/8881265456422028093?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/uyrsNbhWiZU/novedades-c-40.html" title="Novedades C# 4.0" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/03/novedades-c-40.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MEQHk5cCp7ImA9WxVVF04.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-6522976735770308120</id><published>2009-03-10T17:04:00.020-06:00</published><updated>2009-03-10T18:30:01.728-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-10T18:30:01.728-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TechNet" /><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>Simplified TechNet te invita a ganar un Xbox 360</title><content type="html">&lt;DIV style="width:500;"&gt;
&lt;IMG alt="" src="http://www.microsoft.com/latam/technet/camp/nosuerte/maillan/images/trans.gif" width=1 height=1&gt;&lt;BR /&gt;
        &lt;IMG alt="la suerte tiene mala suerte .caza de mitos" src="http://www.microsoft.com/latam/technet/camp/nosuerte/maillan/images/mail-lanzamiento-concurso_0.jpg" width=486 height=161 border=0&gt;&lt;BR /&gt;
        &lt;IMG alt="el concurso en el que para ganar debes eliminar la suerte" src="http://www.microsoft.com/latam/technet/camp/nosuerte/maillan/images/mail-lanzamiento-concurs-03.jpg" width=486 height=78 border=0&gt;&lt;BR /&gt;
        &lt;IMG src="http://www.microsoft.com/latam/technet/camp/nosuerte/maillan/images/mail-lanzamiento-concurs-04.gif" width=124 height=62 border=0&gt;&lt;A href="http://co1piltwb.partners.extranet.microsoft.com/mcoeredir/mcoeredirect.aspx?linkId=11517356&amp;amp;s1=04116c5b-4055-021a-2a88-92bda94be586" target=_blank&gt;&lt;IMG border=0 alt="participa ahora" src="http://www.microsoft.com/latam/technet/camp/nosuerte/maillan/images/mail-lanzamiento-concurs-05.gif" width=144 height=62&gt;&lt;/A&gt;&lt;IMG src="http://www.microsoft.com/latam/technet/camp/nosuerte/maillan/images/mail-lanzamiento-concurs-06.gif" width=218 height=62&gt;&lt;BR /&gt;
        &lt;IMG alt="2 xbox elite" src="http://www.microsoft.com/latam/technet/camp/nosuerte/maillan/images/mail-lanzamiento-concurs-07.jpg" width=486 height=57 border=0&gt;&lt;BR /&gt;
       &lt;IMG alt="packs de suscripciones a technet plus por 1 año" src="http://www.microsoft.com/latam/technet/camp/nosuerte/maillan/images/mail-lanzamiento-concurs-08.jpg" width=486 height=84 border=0&gt;&lt;BR /&gt;
       &lt;IMG alt="dscuentos en renovacion de suscripciones por 2 años" src="http://www.microsoft.com/latam/technet/camp/nosuerte/maillan/images/mail-lanzamiento-concurs-09.jpg" width=486 height=81 border=0&gt;&lt;BR /&gt;
       &lt;IMG alt="y muchos premios mas" src="http://www.microsoft.com/latam/technet/camp/nosuerte/maillan/images/mail-lanzamiento-concurso_1.jpg" width=486 height=55 border=0&gt;&lt;IMG src="http://go.microsoft.com/?linkid=9655299" width=1 height=1 border=0&gt;   
&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-6522976735770308120?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Vd3-TgUhJ61dpTlLeWRbmyfg7s8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Vd3-TgUhJ61dpTlLeWRbmyfg7s8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Vd3-TgUhJ61dpTlLeWRbmyfg7s8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Vd3-TgUhJ61dpTlLeWRbmyfg7s8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/f-a7ROzjhFQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/6522976735770308120/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/03/simplified-technet-te-invita-ganar-un.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/6522976735770308120?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/6522976735770308120?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/f-a7ROzjhFQ/simplified-technet-te-invita-ganar-un.html" title="Simplified TechNet te invita a ganar un Xbox 360" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/03/simplified-technet-te-invita-ganar-un.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04FQH45eyp7ImA9WxVVFkg.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-1045972864776867122</id><published>2009-03-09T21:31:00.001-06:00</published><updated>2009-03-09T21:31:51.023-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-09T21:31:51.023-06:00</app:edited><title>Microsoft Beta Day</title><content type="html">&lt;table width="500" cellspacing="0" border="0" align="center"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;table width="100%" cellspacing="0" border="0" align="center"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;table width="100%" cellspacing="0" cellpadding="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img height="1" width="1" src="http://www.microsoft.com/mexico/emails/09/office_windows/02-26_windows7/trans.gif" alt=""/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img height="229" width="486" src="http://www.microsoft.com/mexico/emails/09/office_windows/02-26_windows7/mai_mx_windows7.jpg" alt=""/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;table width="100%" cellspacing="0" cellpadding="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="31"/&gt;
&lt;td&gt;
&lt;table width="100%" cellspacing="0" cellpadding="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;El compromiso de &lt;strong&gt;Microsoft&lt;/strong&gt; en el sistema operativo de escritorio, es liberar un nuevo sistema cada 3 años, en esta ocasión esta próxima la llegada de &lt;strong&gt;Windows 7&lt;/strong&gt;, te invitamos a conocer la versión beta en el "&lt;strong&gt;Microsoft Beta Day&lt;/strong&gt;" donde platicaremos las nuevas ventajas de Windows 7 sobre los sistemas operativos existentes, también es una buena oportunidad para conocer el &lt;strong&gt;nuevo Internet Explorer 8&lt;/strong&gt;. &lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;table width="100%" cellspacing="0" cellpadding="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;table width="100%" cellspacing="0" cellpadding="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;table width="100%" cellspacing="0" cellpadding="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;&lt;img height="54" width="263" src="http://www.microsoft.com/mexico/emails/09/office_windows/02-26_windows7/titu_agenda.jpg" alt=""/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Un vistazo al Nuevo Windows 7&lt;br/&gt;Administración en Windows 7&lt;br/&gt;Receso&lt;br/&gt;Search en Windows 7&lt;br/&gt;Internet Explorer 8 con todo!&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;
&lt;td&gt;&lt;img height="129" width="161" src="http://www.microsoft.com/mexico/emails/09/office_windows/02-26_windows7/imag3.jpg" alt=""/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span&gt;Fecha:&lt;/span&gt; 24 de Marzo&lt;br/&gt;&lt;span&gt;Lugar:&lt;/span&gt; Auditorio de Microsoft México. Paseo de Tamarindos 400 A Piso 22. Bosques de las Lomas.&lt;br/&gt;&lt;br/&gt;Tendremos dos horarios disponibles con la misma agenda para que elijas el que mejor te acomode, de 9 a 1.20 y de 3 a 7.20.&lt;br/&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;table width="100%" cellspacing="0" cellpadding="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a target="_blank" href="http://microsoft.researchexpress.net/tracking/mail_tracking.asp?id_usuario=1389637&amp;amp;id_evento=2&amp;amp;id_envio=15833&amp;amp;id_shot=57687&amp;amp;desc=&amp;amp;url=http://msevents.microsoft.com/CUI/InviteOnly.aspx?EventID=90-41-35-B2-81-3E-93-7C-11-B5-7C-5D-AC-AD-CF-51&amp;amp;Culture=es-MX"&gt;&lt;img height="27" width="253" border="0" src="http://www.microsoft.com/mexico/emails/09/office_windows/02-26_windows7/btn_1.gif" alt=""/&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img height="10" width="10" src="http://www.microsoft.com/mexico/emails/09/office_windows/02-26_windows7/trans.gif" alt=""/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a target="_blank" href="http://microsoft.researchexpress.net/tracking/mail_tracking.asp?id_usuario=1389637&amp;amp;id_evento=2&amp;amp;id_envio=15833&amp;amp;id_shot=57687&amp;amp;desc=&amp;amp;url=http://msevents.microsoft.com/CUI/InviteOnly.aspx?EventID=90-41-35-B2-81-3E-93-7C-E6-22-65-C7-84-40-3B-14&amp;amp;Culture=es-MX"&gt;&lt;img height="27" width="253" border="0" src="http://www.microsoft.com/mexico/emails/09/office_windows/02-26_windows7/btn_2.gif" alt=""/&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img height="10" width="10" src="http://www.microsoft.com/mexico/emails/09/office_windows/02-26_windows7/trans.gif" alt=""/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mantente informado de todas las actividades TechNet en Mexico en nuestro blog:&lt;br/&gt;&lt;a target="_blank" href="http://microsoft.researchexpress.net/tracking/mail_tracking.asp?id_usuario=1389637&amp;amp;id_evento=2&amp;amp;id_envio=15833&amp;amp;id_shot=57687&amp;amp;desc=&amp;amp;url=http://blogs.technet.com/technetmexico"&gt;http://blogs.technet.com/&lt;wbr/&gt;technetmexico&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Obtén los betas hoy mismo&lt;br/&gt;&lt;span&gt;Windows 7:&lt;/span&gt;&lt;br/&gt;&lt;a target="_blank" href="http://microsoft.researchexpress.net/tracking/mail_tracking.asp?id_usuario=1389637&amp;amp;id_evento=2&amp;amp;id_envio=15833&amp;amp;id_shot=57687&amp;amp;desc=&amp;amp;url=http://technet.microsoft.com/es-mx/dd353205.aspx"&gt;http://technet.microsoft.com/&lt;wbr/&gt;es-mx/dd353205.aspx&lt;/a&gt;&lt;br/&gt;&lt;span&gt;Ie8:&lt;/span&gt;&lt;br/&gt;&lt;a target="_blank" href="http://microsoft.researchexpress.net/tracking/mail_tracking.asp?id_usuario=1389637&amp;amp;id_evento=2&amp;amp;id_envio=15833&amp;amp;id_shot=57687&amp;amp;desc=&amp;amp;url=http://www.microsoft.com/latam/windows/ie"&gt;http://www.microsoft.com/&lt;wbr/&gt;latam/windows/ie&lt;/a&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Notas sobre el evento&lt;br/&gt;1. El día del evento trae tu USB con al menos 4 gb y llévate la imagen ISO de &lt;br/&gt;    Windows 7 y el ejecutable de IE8.&lt;br/&gt;2. Cupo limitado&lt;br/&gt;3. Debido al cambio de administración del estacionamiento del edificio donde se &lt;br/&gt;    encuentra ubicado Microsoft Mexico, el costo del estacionamiento por medio día &lt;br/&gt;    es un aproximado de $150 pesos&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;
&lt;td width="31" align="right"/&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img height="141" width="486" src="http://www.microsoft.com/mexico/emails/09/office_windows/02-26_windows7/imag4.jpg" alt=""/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td/&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-1045972864776867122?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mjKY53QP8NvRrxtKL4qlXPj4lFI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mjKY53QP8NvRrxtKL4qlXPj4lFI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mjKY53QP8NvRrxtKL4qlXPj4lFI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mjKY53QP8NvRrxtKL4qlXPj4lFI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/DcJTxsMEB1E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/1045972864776867122/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/03/microsoft-beta-day.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/1045972864776867122?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/1045972864776867122?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/DcJTxsMEB1E/microsoft-beta-day.html" title="Microsoft Beta Day" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/03/microsoft-beta-day.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcHSXY8eCp7ImA9WxVWGUs.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-2706436758899991087</id><published>2009-03-01T20:57:00.005-06:00</published><updated>2009-03-01T21:53:58.870-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-01T21:53:58.870-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Encriptacion Rijndael con C#</title><content type="html">La encriptación es el proceso para volver ilegible información considera importante. La información una vez encriptada sólo puede leerse aplicándole una clave.&lt;br /&gt;&lt;br /&gt;
El Instituto Nacional de Estándares y Tecnología (NIST) anunció oficialmente Rijndael, diseñado por Joan Daemen y Vincent Rijmen, sería el nuevo estándar de cifrado avanzado.
&lt;br /&gt;&lt;br /&gt;
AES (Advanced Encryption Standard) es el estándar actual de encriptación, destinados a ser utilizados por el Gobierno de los EE.UU. para proteger la información de las organizaciones (e incluso secreta y de alto secreto) . Que también se está convirtiendo en un estándar global para las comunicaciones de software y hardware que utilizan cifrado. Se trata de un sistema de cifrado de bloque que utiliza 128-bit, 192-bits o 256 bits. Rijndael es muy seguro y no tiene puntos débiles.
&lt;br /&gt;&lt;br /&gt;
Framework .NET pensando en la seguridad, ofrece el namespace System.Security.Cryptography, que proporciona clases para el cifrado simétrico, asimétrico, hash, firmas digitales, certificados digitales y firmas XML.
&lt;br /&gt;&lt;br /&gt;
Con el framework .Net, tenemos 4 opciones de algritmos de encriptación simétricos:&lt;br /&gt;
    ° DES&lt;br /&gt;
    ° Triple DES&lt;br /&gt;
    ° RC2&lt;br /&gt;
    ° Rijndael
&lt;br /&gt;
&lt;span id="fullpost"&gt;
&lt;br /&gt;
Vamos con el código, tenemos principalmente 2 métodos, uno encripta y otro desencripta.
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;Los namespace que requerimos:&lt;/strong&gt;
&lt;code&gt;
using System;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Security.Cryptography;&lt;br /&gt;
&lt;/code&gt;
&lt;br /&gt;
&lt;strong&gt;El metodo principal:&lt;/strong&gt;
&lt;code&gt;
static void Main(string[] args)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrTexto = "";&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrPassPhrase&amp;#160;&amp;#160;&amp;#160;&amp;#160;= "AquivaMiPassword";&amp;#160;&amp;#160; // Puede ser cualquier texto&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrSaltValue&amp;#160;&amp;#160;&amp;#160;&amp;#160; = "ValorDeSalto";&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Puede ser cualquier texto&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrHashAlgorithm = "SHA1";&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Puede ser "MD5"&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrInitVector&amp;#160;&amp;#160;&amp;#160;&amp;#160;= "0123456789ABCDEF";&amp;#160;&amp;#160; // Debe ser de 16 bytes&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;int&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varointKeySize&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 256;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Puede ser 128, 192 o 256&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;int&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varointPassIteration = 2;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Puede ser cualquier numero&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Encriptamos cualquier texto&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varostrTexto = z_metuEncrypt("Hola Mundo", z_varostrPassPhrase, z_varostrSaltValue, z_varostrHashAlgorithm, z_varointPassIteration , z_varostrInitVector, z_varointKeySize);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine(z_varostrTexto);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Desencriptamos el texto encriptado anterior&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Console.WriteLine(z_metuDecrypt(z_varostrTexto, z_varostrPassPhrase, z_varostrSaltValue, z_varostrHashAlgorithm, z_varointPassIteration, z_varostrInitVector, z_varointKeySize));&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
El metodo que encripta:
&lt;code&gt;
public static string z_metuEncrypt(string z_parstrPlainText, string z_parstrPassPhrase, string z_parstrSaltValue, string z_parstrHashAlgorithm, int z_parintPassIterations, string z_parstrInitVector, int z_parintKeySize)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Convertir la cadena en un arreglo de bytes&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Suponiendo que las cadenas solo contienen codigo ASCII.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Si las cadenas incluyen caracteres Unicode, el uso de Unicode, UTF7, o codificación UTF8.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byte[] z_varobytInitVectorBytes = Encoding.ASCII.GetBytes(z_parstrInitVector);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byte[] z_varobytSaltValueBytes = Encoding.ASCII.GetBytes(z_parstrSaltValue);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Convertir el texto en un arreglo de bytes.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Suponiendo que el texto contiene caracteres codificados en UTF8.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byte[] z_varobytPlainTextBytes = Encoding.UTF8.GetBytes(z_parstrPlainText);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// En primer lugar, debemos crear una contraseña, la clave a partir de la cual se derivan.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Esta contraseña se generarán a partir de la contraseña que se especifica y el salt value.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// La contraseña será creada utilizando el algoritmo hash especificado.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// La creación de la contraseña se puede hacer de varias iteraciones.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;PasswordDeriveBytes z_varocioPassword = new PasswordDeriveBytes(z_parstrPassPhrase, z_varobytSaltValueBytes, z_parstrHashAlgorithm, z_parintPassIterations);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Utilice la contraseña para generar bytes para la clave de cifrado pseudo aleatorias.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Especificar el tamaño de la clave en bytes (en lugar de bits).&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byte[] z_varobytKeyBytes = z_varocioPassword.GetBytes(z_parintKeySize / 8);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Instanciar el objeto Rijndael&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;RijndaelManaged z_varocioSymmetricKey = new RijndaelManaged();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Es razonable para establecer el modo de cifrado Cipher Block Chaining (CBC).&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Utilice las opciones por defecto para los demás parámetros de claves simétricas.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioSymmetricKey.Mode = CipherMode.CBC;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Generar el encryptor para la llave de bytes existente e inicizlizar el vector.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Tamaño de clave se definirá en función del número de la clave de bytes.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;ICryptoTransform z_varocioEncryptor = z_varocioSymmetricKey.CreateEncryptor(z_varobytKeyBytes, z_varobytInitVectorBytes);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Instancia el stream de memoria que se utiliza para mantener los datos cifrados.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;MemoryStream z_varocioMemoryStream = new MemoryStream();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Instancia el cryptographic stream (utilizar siempre el modo de escritura para el cifrado).&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;CryptoStream z_varocioCryptoStream = new CryptoStream(z_varocioMemoryStream, z_varocioEncryptor, CryptoStreamMode.Write);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Inicia la encriptacion&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioCryptoStream.Write(z_varobytPlainTextBytes, 0, z_varobytPlainTextBytes.Length);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Termina la encriptacion&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioCryptoStream.FlushFinalBlock();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Convertir los datos cifrados del stream de memoria en un array de bytes.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byte[] z_varobytCipherTextBytes = z_varocioMemoryStream.ToArray();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Cierre de ambos streams.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioMemoryStream.Close();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioCryptoStream.Close();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Convertir datos codificados en una cadena codificada en base64.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrCipherText = Convert.ToBase64String(z_varobytCipherTextBytes);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Retorno del texto cifrado&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return z_varostrCipherText;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;El metodo que desencripta:&lt;/strong&gt;
&lt;code&gt;
public static string z_metuDecrypt(string z_parstrCipherText, string z_parstrPassPhrase, string z_parstrSaltValue, string z_parstrHashAlgorithm, int z_parintPassIterations, string z_parstrInitVector, int z_parintKeySize)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Convertir la cadena en arreglo de bytes. &lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Vamos a suponer que las cadenas que sólo contienen código ASCII.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byte[] z_varobytInitVectorBytes = Encoding.ASCII.GetBytes(z_parstrInitVector);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byte[] z_varobytSaltValueBytes = Encoding.ASCII.GetBytes(z_parstrSaltValue);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Convertir el texto cifrado en un arreglo de bytes&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byte[] z_varobytCipherTextBytes = Convert.FromBase64String(z_parstrCipherText);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Primero, debemos crear una contraseña, y la clave a partir de la cual se derivan.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// La contraseña se generarán a partir del passphrase y el salt value. &lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// La contraseña será creada utilizando el algoritmo hash especificado.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// La creación de la contraseña se puede hacer de varias iteraciones.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;PasswordDeriveBytes z_varocioPassword = new PasswordDeriveBytes(z_parstrPassPhrase, z_varobytSaltValueBytes, z_parstrHashAlgorithm, z_parintPassIterations);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Usa el password para generar bytes pseudo aleatorios&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Indica el tamaño de la llave de bytes (en lugar de bits).&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byte[] z_varobytKeyBytes = z_varocioPassword.GetBytes(z_parintKeySize / 8);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Instancia del objeto Rijndael.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;RijndaelManaged z_varocioSymmetricKey = new RijndaelManaged();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Es razonable para establecer el modo de cifrado Cipher Block Chaining (CBC).&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Utilice las opciones por defecto para los demás parámetros de claves simétricas.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioSymmetricKey.Mode = CipherMode.CBC;&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Generar el encryptor para la llave de bytes existente e inicizlizar el vector.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Tamaño de clave se definirá en función del número de la clave de bytes.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;ICryptoTransform z_varocioDecryptor = z_varocioSymmetricKey.CreateDecryptor(z_varobytKeyBytes, z_varobytInitVectorBytes);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Instancia el stream de memoria que se utiliza para mantener los datos cifrados.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;MemoryStream z_varocioMemoryStream = new MemoryStream(z_varobytCipherTextBytes);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Instancia el cryptographic stream (utilizar siempre el modo de lectura para el descifrado).&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;CryptoStream z_varocioCryptoStream = new CryptoStream(z_varocioMemoryStream, z_varocioDecryptor, CryptoStreamMode.Read);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Dado que en este momento no sabemos cuál es el tamaño del texto descifrado,&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;byte[] z_varobytPlainTextBytes = new byte[z_varobytCipherTextBytes.Length];&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Inicia desencriptacion.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;int z_varointDecryptedByteCount = z_varocioCryptoStream.Read(z_varobytPlainTextBytes, 0, z_varobytPlainTextBytes.Length);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Cierre de ambos streams.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioMemoryStream.Close();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varocioCryptoStream.Close();&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Convierte el dato desencriptado a un string.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Suponemos que el texto original se encuentra en UTF8.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;string z_varostrPlainText = Encoding.UTF8.GetString(z_varobytPlainTextBytes, 0, z_varointDecryptedByteCount);&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// Regreso del texto descifrado.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return z_varostrPlainText;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
El código: &lt;a href="http://cid-c913b3553e2452e3.skydrive.live.com/self.aspx/Rijndael/Encriptacion.rar"&gt;Click Aqui&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
Ailas........
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-2706436758899991087?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GrKnBkX54KVSmwEIDQLa9rDl3qk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GrKnBkX54KVSmwEIDQLa9rDl3qk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GrKnBkX54KVSmwEIDQLa9rDl3qk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GrKnBkX54KVSmwEIDQLa9rDl3qk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/GssvVFPbgPA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/2706436758899991087/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/03/encriptacion-rijndael-con-c.html#comment-form" title="3 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/2706436758899991087?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/2706436758899991087?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/GssvVFPbgPA/encriptacion-rijndael-con-c.html" title="Encriptacion Rijndael con C#" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/03/encriptacion-rijndael-con-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYFQHs-eCp7ImA9WxVWGUs.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-8393385757759051164</id><published>2009-03-01T19:57:00.005-06:00</published><updated>2009-03-01T21:55:11.550-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-01T21:55:11.550-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Metodos Anonimos con C# Part III</title><content type="html">En esta tercera (y última) entrega de los métodos anónimos veremos un ejemplo en C#, utilizando Windows Form, dónde se actualizará una barra de progreso.&lt;br /&gt;Ésta indica el estado interno de una clase interna (&lt;span style="font-style:italic;"&gt;BO_Object.cs&lt;/span&gt;). Dentro de esta clase se realiza un proceso que modifica repetidas veces el valor de una variable. Para avisar al usuario acerca del progreso, esta clase otorga un mecanismo basado en delegados, a fin de que los clientes puedan suscribirse al evento en cuestion.&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_gMklo8dzA6M/SatAZlsTWbI/AAAAAAAAAEs/b7R-gB45eHs/s1600-h/Form1.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 300px; height: 223px;" src="http://3.bp.blogspot.com/_gMklo8dzA6M/SatAZlsTWbI/AAAAAAAAAEs/b7R-gB45eHs/s320/Form1.jpg" border="0" alt="Metodos Anonimos"id="BLOGGER_PHOTO_ID_5308407394145098162" /&gt;&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;BO_Object.cs&lt;/span&gt;
&lt;code&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
namespace ProgressBar&lt;br /&gt;
{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;delegate void z_delTipoDelegado();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;class BO_Object&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Declaracion de las propiedades.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;static protected int z_varointValor = 0;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;static public int z_prouintValor&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;get { return z_varointValor; }&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;set { z_varointValor = value; }&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Este metodo incrementa el valor de la propiedad z_prouintValor&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//a traves de un delegado implementando un metodo anonimo.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//El tipo devuelto por el metodo anonimo es inferior&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//de la firma del delegado&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;static protected void z_metaCambiarValor()&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;if (z_varointValor == 100)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varointValor = 0;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_varointValor++;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Este metodo simula un proceso que ocurre dentro de la clase&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;// y cambia el estado interno de la misma, representado por el &lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//valor de la variable protegida z_varointValor.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;static public void z_metaProcesar(z_delTipoDelegado z_parcioDelegado)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;for (int i = 0; i &amp;lt; 100; i++)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_metaCambiarValor();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_parcioDelegado(); //envia aviso&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;for (int j = 0; j &amp;lt; 10000000; j++) ; // delay&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;span id="fullpost"&gt;
Esta clase utiliza delegados como método de aviso. Asi dentro del método z_metaProcesar se cambia el valor llamando al método z_metaCambiarValor y avisa mediante z_parcioDelegado.
&lt;br /&gt;&lt;br /&gt;
A continuación se muestra el código agregado a cada uno de los manejadores de eventos de los controles.
&lt;code&gt;
public partial class Form1 : Form&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;public Form1()&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;InitializeComponent();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private void z_metaAviso()&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_pgbProgress.Value = BO_Object.z_prouintValor;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private void z_btnInicio_Click(object sender, EventArgs e)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Instancia del delagado&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_delTipoDelegado z_varocioDelegado = new z_delTipoDelegado(z_metaAviso);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Actualiza el ProgressBar utilizando delegados con Metodos NOMBRADOS.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Dentro del metodo z_metaProcesar se llama repetidas veces al metodo&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//z_metaAviso.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//De esta manera, se debe instanciar un delegado, pasarlo como parametro&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//de un metodo y escribr el metodo.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;BO_Object.z_metaProcesar(z_varocioDelegado);&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private void z_btnAnonimo_Click(object sender, EventArgs e)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Este metodo realilza lo mismo el mismo trabajo que el codigo z_btnInicio_Click&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//Aqui no es necesario instanciar un delegado, tampoco es necesario crear un metodo&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;//para proveer la funcionalidad deseada.&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;BO_Object.z_metaProcesar(delegate { z_pgbProgress.Value = BO_Object.z_prouintValor; });&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private void z_btnSalir_Click(object sender, EventArgs e)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Close();&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;private void z_btnRestablecer_Click(object sender, EventArgs e)&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;BO_Object.z_prouintValor = 0;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;z_pgbProgress.Value = 0;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}
&lt;/code&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
Los delegados proveen de metodos y operadores para agregar o remover métodos. Son utilizados frecuentemente para eventos, funciones callback y llamadas asincrónicas. En ocaciones, uno está forzado a crear clases o métodos sólo para adr soporte a delegados, en cuyo caso no existe la necesidad o el concepto de múltiples targets. Entonces, el código suele ser sencillo y corto. Tales características definen código que puede ser implementado con el uso de métodos anónimos.
&lt;br /&gt;&lt;br /&gt;
Espero que estos ejemplo les sirvan para mejorar y enriqueces de manera notable su código.
&lt;br /&gt;&lt;br /&gt;
Aqui les dejo el codigo.&lt;a href="http://cid-c913b3553e2452e3.skydrive.live.com/self.aspx/MetodosAnonimosI/ProgressBar.rar"&gt;Click Aqui&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
Ailas.....
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-8393385757759051164?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hY9irTcTg77QTPQeei6VhlIjnWU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hY9irTcTg77QTPQeei6VhlIjnWU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hY9irTcTg77QTPQeei6VhlIjnWU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hY9irTcTg77QTPQeei6VhlIjnWU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/WmwlvLqU_FQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/8393385757759051164/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/03/metodos-anonimos-con-c-part-iii.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/8393385757759051164?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/8393385757759051164?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/WmwlvLqU_FQ/metodos-anonimos-con-c-part-iii.html" title="Metodos Anonimos con C# Part III" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_gMklo8dzA6M/SatAZlsTWbI/AAAAAAAAAEs/b7R-gB45eHs/s72-c/Form1.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/03/metodos-anonimos-con-c-part-iii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YCRHg7eSp7ImA9WxVWEUk.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-7952494658125232892</id><published>2009-02-20T09:43:00.004-06:00</published><updated>2009-02-20T09:52:45.601-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-20T09:52:45.601-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Noticias" /><title>Moonlight 1.0</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img171.imageshack.us/img171/7025/moonlightlogovs8.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 100px; height: 125px;" src="http://img171.imageshack.us/img171/7025/moonlightlogovs8.png" border="0" alt="" /&gt;&lt;/a&gt;
Novell ha publicado la versión 1.0 de Moonlight, y la ha puesto disponible con soporte para la mayoría de distribuciones de Linux (incluidas openSUSE, SUSE Linux Enterprise, Fedora, Red Hat, y Ubuntu).
&lt;br /&gt;&lt;br /&gt;
Para los que no ubiquen Moonlight, es una implementación Open-Source de Silverlight para Linux. Desarrollada por el equipo de Proyecto Mono (Novell) y con la colaboración de Miguel de Icaza.
&lt;br /&gt;&lt;br /&gt;
Para más informacion la Web Oficial: 
&lt;a href="http://www.go-mono.com/moonlight/"&gt;http://www.go-mono.com/moonlight/&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
Ailas..............&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-7952494658125232892?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qrG2a98MTKjL1D0lxRcql_--1Ik/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qrG2a98MTKjL1D0lxRcql_--1Ik/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qrG2a98MTKjL1D0lxRcql_--1Ik/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qrG2a98MTKjL1D0lxRcql_--1Ik/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/uFyTDl9U0h4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/7952494658125232892/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/02/moonlight-10.html#comment-form" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/7952494658125232892?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/7952494658125232892?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/uFyTDl9U0h4/moonlight-10.html" title="Moonlight 1.0" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/02/moonlight-10.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMDQ3Y_eSp7ImA9WxVXGE4.&quot;"><id>tag:blogger.com,1999:blog-2226042418738368235.post-1275518172446395787</id><published>2009-02-16T19:23:00.002-06:00</published><updated>2009-02-16T19:34:32.841-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-16T19:34:32.841-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft" /><title>Windows Day 03/03/2009</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img134.imageshack.us/img134/9692/windowsdaysm9.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 177px;" src="http://img134.imageshack.us/img134/9692/windowsdaysm9.png" border="0" alt="" /&gt;&lt;/a&gt;
Esta vez los quiero invitar a el Windows Day, que se llevará a cabo este 03 de marzo de 2009. Este evento es online, donde se mostrarán las novedades en cuestion de windows, virtualizacion, seguridad y lo que mas me interesa, desarrollo. 
&lt;br /&gt;&lt;br /&gt;
Descubre novedades acerca de las tecnologías de implementación, administración y de desarrollo de aplicaciones en desktops con Windows Vista y con Windows 7: cómo mejorar el rendimiento, cuándo virtualizar, cómo optimizar los escritorios, incrementar la seguridad, resolver el acceso a datos y cómo crear las mejores interfaces de usuario. Demos y expertos en vivo respondiendo tus preguntas.
&lt;br /&gt;&lt;br /&gt;
Para inscribirse visita &lt;a href="http://www.microsoft.com/latam/windowsday/"&gt;La pagina del evento&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2226042418738368235-1275518172446395787?l=gogoframework.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ac5tbPWZ0i9Ehu2ZpkP6S1rapYs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ac5tbPWZ0i9Ehu2ZpkP6S1rapYs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ac5tbPWZ0i9Ehu2ZpkP6S1rapYs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ac5tbPWZ0i9Ehu2ZpkP6S1rapYs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/GoGoFramework/~4/p7AhmoMiFvs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://gogoframework.blogspot.com/feeds/1275518172446395787/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://gogoframework.blogspot.com/2009/02/windows-day-03032009.html#comment-form" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/1275518172446395787?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2226042418738368235/posts/default/1275518172446395787?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/GoGoFramework/~3/p7AhmoMiFvs/windows-day-03032009.html" title="Windows Day 03/03/2009" /><author><name>GoGo.NET</name><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://gogoframework.blogspot.com/2009/02/windows-day-03032009.html</feedburner:origLink></entry></feed>

