<?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;AkADQns_fCp7ImA9WhRVFE4.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102</id><updated>2012-01-12T23:12:53.544-08:00</updated><category term="visual studio" /><category term="c#" /><category term="firefox" /><category term="jquery" /><category term="css" /><category term="javascript" /><category term="inicio" /><category term="Cache" /><category term="Linq" /><category term="rowcreated" /><category term="ajax" /><category term="mapper" /><category term="biztalk server 2010" /><category term="Sharepoint" /><category term="visual studio 2010" /><category term="gridview" /><category term="asp.net" /><category term=".net" /><category term="validadores" /><category term="event" /><category term="DropDownList" /><category term="Applications Block" /><category term="entity framework" /><category term="enumerados" /><title>dOt NeT WorLd</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://irokhes.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>33</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/blogspot/MeOJy" /><feedburner:info uri="blogspot/meojy" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CkADSHs8eip7ImA9Wx9TFU8.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-5680074599612147847</id><published>2010-11-23T00:09:00.000-08:00</published><updated>2010-11-23T05:59:39.572-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T05:59:39.572-08:00</app:edited><title>Programadores Web vs Diseñadores Web</title><content type="html">Divertida comparativa entre los diseñadores y programadores web.
&lt;br /&gt;
&lt;br /&gt; &lt;a href="http://www.landingpages.co.il/wix/web-designers-vs-developers.png" title="Image web developer vs web designer" target="blank"&gt;&lt;img src="http://www.landingpages.co.il/wix/web-designers-vs-developers.png" width="500px" height="700px" mce_src="http://www.landingpages.co.il/wix/web-designers-vs-developers.png" border="0" alt="free website builder"  title="free website" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Web Designers vs Web Developers is brought to you by Wix.com &lt;br/&gt;Use creative design to make a &lt;a href="http://www.wix.com" mce_href="http://www.wix.com"&gt;Free Website&lt;/a&gt;&lt;br /&gt; You are most welcome to share this infographic with your audience.&lt;/p&gt; &lt;p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-5680074599612147847?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0QuJj7dhxD6MVMlpzOhqPIacHMY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0QuJj7dhxD6MVMlpzOhqPIacHMY/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/0QuJj7dhxD6MVMlpzOhqPIacHMY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0QuJj7dhxD6MVMlpzOhqPIacHMY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/g6BC-FKs88Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/5680074599612147847/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=5680074599612147847" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/5680074599612147847?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/5680074599612147847?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/g6BC-FKs88Q/programadores-web-vs-disenadores-web.html" title="Programadores Web vs Diseñadores Web" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2010/11/programadores-web-vs-disenadores-web.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAFQXc-eyp7ImA9Wx9TEUg.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-8425131926736662661</id><published>2010-11-19T00:33:00.000-08:00</published><updated>2010-11-19T00:51:50.953-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-19T00:51:50.953-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><title>Eliminar los espacios en blaco extra en una cadena</title><content type="html">Una tarea común es eliminar los espacios en blanco de una cadena, si usamos la función Trim() podemos eliminar los espacios al principio y final de la cadena. Usando Replace() eliminamos todos los existentes, pero hay ocasiones en las que solo queremos dejar un espacio entre los caracteres, para eso podemos usar esta sencilla expresión regular:



&lt;pre class="brush: csharp"&gt;
System.Text.RegularExpressions.Regex.Replace(input, @"\s+", " ");
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-8425131926736662661?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V7nhzhc2SItTd3B52T0w7OB83Q4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V7nhzhc2SItTd3B52T0w7OB83Q4/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/V7nhzhc2SItTd3B52T0w7OB83Q4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V7nhzhc2SItTd3B52T0w7OB83Q4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/9NvDuNbtq6E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/8425131926736662661/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=8425131926736662661" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/8425131926736662661?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/8425131926736662661?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/9NvDuNbtq6E/eliminar-los-espacios-en-blaco-extra-en.html" title="Eliminar los espacios en blaco extra en una cadena" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2010/11/eliminar-los-espacios-en-blaco-extra-en.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8NRHw7cCp7ImA9Wx5aGEw.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-2227595979413579763</id><published>2010-11-15T02:33:00.000-08:00</published><updated>2010-11-15T02:44:55.208-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-15T02:44:55.208-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Sharepoint" /><category scheme="http://www.blogger.com/atom/ns#" term="biztalk server 2010" /><title>Crear Web Site desde la Administración Central en Windows 7</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3RA7eNR3uw0/TOEO81DrAbI/AAAAAAAAAEU/Y7dWpc1l-7c/s1600/intranetPermission.JPG"&gt;
&lt;/a&gt;

Después de seguir en tutorial para la instalción de biztalk, he pasado varios dias en el paso&lt;a href="http://sandroaspbiztalkblog.wordpress.com/2010/10/23/biztalk-2010-installation-and-configuration-install-and-configure-windows-sharepoint-services-part-6/"&gt; nº6 del manual de instalación de biztalk 2010&lt;/a&gt;, el problema surge en el momento de crear un nuevo sitio web. La opcion no aparece disponible en el menú, esto es debido a un problema de permisos ya que solo lo puede hacer el adminsitardor de la máquina.
Para resolver esto en windows7 el administrador viene desactivado por defecto, para activarlo hay que hacer lo siguiente.

-Computer Managment--&gt;local users and groups--&gt; users

-Seleccionamos el usuario adminsitrador, boton derecho del raton--&gt;propiedades, desmarcamos la opción de usuario desactivado.

-Ponemos una contraseña al Admin. OK

Ahora solo nos queda entrar el la Administración de sharepoint con logandonos como usuarios Adminsitrador.



P.D. Comprobar que vuestro navegador cuando entrais en la adminsitración de sharepoint tiene configurada la seguiridad como una intranet, sino tampoco os aparecerá el enlace para crear un nuevo site.
&lt;a href="http://2.bp.blogspot.com/_3RA7eNR3uw0/TOEO81DrAbI/AAAAAAAAAEU/Y7dWpc1l-7c/s1600/intranetPermission.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 252px; height: 320px;" src="http://2.bp.blogspot.com/_3RA7eNR3uw0/TOEO81DrAbI/AAAAAAAAAEU/Y7dWpc1l-7c/s320/intranetPermission.JPG" alt="" id="BLOGGER_PHOTO_ID_5539725454839841202" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-2227595979413579763?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FW2Wf41wAd_X-ZN-r3awky6wuGM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FW2Wf41wAd_X-ZN-r3awky6wuGM/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/FW2Wf41wAd_X-ZN-r3awky6wuGM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FW2Wf41wAd_X-ZN-r3awky6wuGM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/QaAXnbizK6I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/2227595979413579763/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=2227595979413579763" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/2227595979413579763?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/2227595979413579763?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/QaAXnbizK6I/crear-web-site-desde-la-administracion.html" title="Crear Web Site desde la Administración Central en Windows 7" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_3RA7eNR3uw0/TOEO81DrAbI/AAAAAAAAAEU/Y7dWpc1l-7c/s72-c/intranetPermission.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2010/11/crear-web-site-desde-la-administracion.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEINR3o6eSp7ImA9Wx5bGUk.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-2561532616349098774</id><published>2010-11-05T01:35:00.000-07:00</published><updated>2010-11-05T01:43:16.411-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-05T01:43:16.411-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="biztalk server 2010" /><title>Manual de Instalación de Biztalk 2010</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3RA7eNR3uw0/TNPC9L8mLJI/AAAAAAAAAEM/lBERPeGWm7s/s1600/BiztalkServerImage.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_3RA7eNR3uw0/TNPC9L8mLJI/AAAAAAAAAEM/lBERPeGWm7s/s320/BiztalkServerImage.jpg" alt="" id="BLOGGER_PHOTO_ID_5535982723403230354" border="0" /&gt;&lt;/a&gt;Aunque la instalacion de Biztalk ha ido mejorando con las diferentes versiones, todavia es un proceso largo y tedioso debido a los diversos pre-requisitos necesarios.
Para hacer este proceso un poco mas sencillo aqui os dejo un enlace en el que muestran paso a paso como instalar y configurar Biztalk 2010 y todos los requisitos necesarios.


&lt;div style="text-align: center;"&gt;&lt;a href="https://sandroaspbiztalkblog.wordpress.com/2010/10/18/biztalk-2010-installation-and-configuration-enable-internet-information-services-part-1/"&gt;&lt;span style="font-weight: bold;"&gt;Manual Instalación Biztalk 2010&lt;/span&gt;&lt;/a&gt;&lt;a href="https://sandroaspbiztalkblog.wordpress.com/2010/10/18/biztalk-2010-installation-and-configuration-enable-internet-information-services-part-1/"&gt;(Parte1)&lt;/a&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-2561532616349098774?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VGKpWPruslQ2Gb0-VRzlKvihg5w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VGKpWPruslQ2Gb0-VRzlKvihg5w/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/VGKpWPruslQ2Gb0-VRzlKvihg5w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VGKpWPruslQ2Gb0-VRzlKvihg5w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/J5sy557qQMA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/2561532616349098774/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=2561532616349098774" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/2561532616349098774?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/2561532616349098774?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/J5sy557qQMA/manual-de-instalacion-de-biztalk-2010.html" title="Manual de Instalación de Biztalk 2010" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3RA7eNR3uw0/TNPC9L8mLJI/AAAAAAAAAEM/lBERPeGWm7s/s72-c/BiztalkServerImage.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2010/11/manual-de-instalacion-de-biztalk-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4NRH04fCp7ImA9Wx5WFkg.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-1989558582320984181</id><published>2010-09-28T00:03:00.000-07:00</published><updated>2010-09-28T00:13:15.334-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-28T00:13:15.334-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mapper" /><category scheme="http://www.blogger.com/atom/ns#" term="biztalk server 2010" /><title>Función de búsqueda en Biztalk 2010 Mapper</title><content type="html">Buenos dias,

después de un tiempo si actividad en el blog regreso con energias renovadas. En esta nueva etapa que espero sea productiva quiero comenzar a escribir pequeñas pinceladas (al menos al principio) sobre Biztalk, espero sirven de ayuda para alguno de vosotros.

Pues bien, dicho esto vamos a empezar resaltando una nueva funcionalidad que aparece en la versión 2010 de Biztalk. Ahora tenemos a nuestra disposición una función de búsqueda que permite encontrar cadenas de textos entre los dos esquemas que queremos mappear, ademas resalta los resultados para que sean facilmente visibles.
Esta pequeña novedad puede ser muy útil cuando los nombres de los campos no son muy "amigables".

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3RA7eNR3uw0/TKGVXdTTPqI/AAAAAAAAAEE/JRh9tFSIQfU/s1600/biztalkmappersearch.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 111px;" src="http://4.bp.blogspot.com/_3RA7eNR3uw0/TKGVXdTTPqI/AAAAAAAAAEE/JRh9tFSIQfU/s320/biztalkmappersearch.png" alt="" id="BLOGGER_PHOTO_ID_5521858848368049826" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-1989558582320984181?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PLqLyTqETCPUQLP15G14FBVyZZQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PLqLyTqETCPUQLP15G14FBVyZZQ/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/PLqLyTqETCPUQLP15G14FBVyZZQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PLqLyTqETCPUQLP15G14FBVyZZQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/pCA3qesidBo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/1989558582320984181/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=1989558582320984181" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1989558582320984181?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1989558582320984181?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/pCA3qesidBo/funcion-de-busqueda-en-biztalk-2010.html" title="Función de búsqueda en Biztalk 2010 Mapper" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3RA7eNR3uw0/TKGVXdTTPqI/AAAAAAAAAEE/JRh9tFSIQfU/s72-c/biztalkmappersearch.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2010/09/funcion-de-busqueda-en-biztalk-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQEQHgyeCp7ImA9WxFQEk8.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-628075314113432877</id><published>2010-05-04T09:17:00.000-07:00</published><updated>2010-05-07T02:58:21.690-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-07T02:58:21.690-07:00</app:edited><title>Análisis de código en Visual Studio 2010</title><content type="html">Ahora que ya tenemos la versión definitiva de VS2010 en nuestras manos es momento de hablar de alguna de las novedades que podemos encontrar en esta versión. Nuestro objetivo en esta ocasión seran las &lt;span style="font-weight: bold;"&gt;Reglas de Análisis de Código&lt;/span&gt;
Esto en si no supone una novedad ya que esta opción esta disponible desde la versión 2005, pero lo que hace que las destaquemos aqui es la mejora que se ha producido en su manejo y en la intregración con el propio Visual Studio.
Ahora al abrir la configuración de un proyecto nos encontramos una nueva pestaña llamada análisis de código como podeis ver en la siguiente imagen

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3RA7eNR3uw0/S-BMnqX13pI/AAAAAAAAADs/5SjWqP89V-k/s1600/code-analysis-settings1.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 277px;" src="http://2.bp.blogspot.com/_3RA7eNR3uw0/S-BMnqX13pI/AAAAAAAAADs/5SjWqP89V-k/s400/code-analysis-settings1.jpg" alt="" id="BLOGGER_PHOTO_ID_5467454191900679826" border="0" /&gt;&lt;/a&gt;

En esta pestaña podemos habilitar o deshabilitar dicho análisis simplemente seleccionando un checkbox. Microsoft ofrece varios conjuntos de reglas preestablecidas de los que podemos hacer uso, pudiendo seleccionar solo las reglas que nos convengan en cada momento. A continuación os muestro un listado de los conjuntos de politacas que viene con VS2010:&lt;br/&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3RA7eNR3uw0/S-BSehtIoKI/AAAAAAAAAD0/niUmmwAWgb8/s1600/ruleSetVs2010.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 234px;" src="http://1.bp.blogspot.com/_3RA7eNR3uw0/S-BSehtIoKI/AAAAAAAAAD0/niUmmwAWgb8/s400/ruleSetVs2010.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5467460632025014434" /&gt;&lt;/a&gt;
Tambien existe la posibilidad de crear nuestras propias reglas, esto nos permite asegurarnos que en nuestra emprasa todo el código que se genere cumpla con los standanres internos de la propia organización, cosa que es muy de agradecer cuando el código tiene que pasar por varias manos ;-)

Para más información sobre la creación de reglas personalizadas os recomiento &lt;a href="http://blogs.msdn.com/codeanalysis/archive/2010/03/26/how-to-write-custom-static-code-analysis-rules-and-integrate-them-into-visual-studio-2010.aspx"&gt;The Visual Studio Code Analysis Team Blog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-628075314113432877?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wgTKMHrD3ayGSBnKbegz4f50mPc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wgTKMHrD3ayGSBnKbegz4f50mPc/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/wgTKMHrD3ayGSBnKbegz4f50mPc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wgTKMHrD3ayGSBnKbegz4f50mPc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/D-preS3rWDc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/628075314113432877/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=628075314113432877" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/628075314113432877?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/628075314113432877?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/D-preS3rWDc/analisis-de-codigo-en-visual-studio.html" title="Análisis de código en Visual Studio 2010" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_3RA7eNR3uw0/S-BMnqX13pI/AAAAAAAAADs/5SjWqP89V-k/s72-c/code-analysis-settings1.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2010/05/analisis-de-codigo-en-visual-studio.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMCQ3k9eSp7ImA9WxFSEk4.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-6681125837464515528</id><published>2010-04-09T04:09:00.000-07:00</published><updated>2010-04-14T01:24:22.761-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-14T01:24:22.761-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="entity framework" /><category scheme="http://www.blogger.com/atom/ns#" term="visual studio 2010" /><title>Novedades Entity Framework 4</title><content type="html">En estos &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;días&lt;/span&gt; inmersos como estamos en pleno lanzamiento de Visual &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Studio&lt;/span&gt; 2010 y del &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Framework&lt;/span&gt; 4, me &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;gustaría&lt;/span&gt; pararme a revisar algunas novedades (solo una pequeña muestra) que nos ofrece la nueva versión del &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Entity&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Framework&lt;/span&gt;.

&lt;span style="font-weight: bold;"&gt;Soporte para POCO (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Plain&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;Old&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;Clr&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Object&lt;/span&gt;)&lt;/span&gt;

La nueva versión del &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;EF&lt;/span&gt; soporta &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;nativamente&lt;/span&gt; POCO, esto es una importante mejora (muy solicitada por parte de la comunidad) para los desarrollos orientados a pruebas &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;TDD&lt;/span&gt;, esto es posible debido a que eliminamos cualquier dependencia de nuestras entidades con el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;EF&lt;/span&gt;, ya no &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;tendran&lt;/span&gt; que tener propiedades como el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;EntityKey&lt;/span&gt; o implementar interfaces especificas del &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;EF&lt;/span&gt;.
Más información:
&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx"&gt;http://blogs.msdn.com/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://mshelp.be/entity-framework-4-0-part4-how-to-use-your-own-pocos-333.htm"&gt;http://mshelp.be/entity-framework-4-0-part4-how-to-use-your-own-pocos-333.htm&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Mejoras en el Diseño del &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Entity&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Model&lt;/span&gt;&lt;/span&gt;

&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Ademas&lt;/span&gt; de la opción de crear el modelo a partir de la base de datos (&lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;Database&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;First&lt;/span&gt;&lt;/span&gt;) &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;EF&lt;/span&gt;4 incluye &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;Model&lt;/span&gt;-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;First&lt;/span&gt;&lt;/span&gt; que permite comenzar diseñando las entidades en el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;Entity&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;Designer&lt;/span&gt; y posteriormente generar la base de datos y loas clases a partir del ahí.

&lt;span style="font-weight: bold;"&gt;Asociación de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;Foreign&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;Key&lt;/span&gt;&lt;/span&gt;

&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;EF&lt;/span&gt;4 incluye un nuevo tipo de asociación llamado &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;Foreign&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;Key&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;Asociation&lt;/span&gt;&lt;/span&gt; que permite incluir &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;Fk&lt;/span&gt; en el modelo y usarlas para relacionar las entidades. Las &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_34"&gt;Asociaciones&lt;/span&gt; independientes de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;EF&lt;/span&gt; 3.5 &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_36"&gt;todavía&lt;/span&gt; son soportadas pero sin duda las &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;asociciaciones&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;FK&lt;/span&gt; simplifican mucha más el modelo y su &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;usabilidad&lt;/span&gt;. Para leer mas acerca de esta &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_40"&gt;característica&lt;/span&gt; &lt;a href="http://blogs.msdn.com/adonet/archive/2009/11/06/foreign-key-relationships-in-the-entity-framework.aspx"&gt;aquí&lt;/a&gt;.

&lt;span style="font-weight: bold;"&gt;Soporte carga tardía (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;lazy&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;loading&lt;/span&gt;)&lt;/span&gt;

&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;EF&lt;/span&gt;4 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;soport&lt;/span&gt; la carga tardía de objetos. Por defecto cuando se crea un nuevo modelo en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;VS&lt;/span&gt;2010 esta propiedad esta activada. Esto provoca que cuando realizamos una consulta y nos devuelve una colección de objetos, estos no son cargados &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;automaticamente&lt;/span&gt; sino que hasta que a medida que cada uno de ellos es utilizado se van cargando. En el siguiente ejemplo, los objetos no son cargados hasta que no se utiliza para escribir una de sus propiedades.
&lt;p&gt;
&lt;pre class="brush: csharp"&gt;
List&lt;Customer&gt; customers = context.Customers.ToList(); context.ContextOptions.DeferredLoadingEnabled = true;
 foreach (Customer cust in context.Customers)
   Console.WriteLine("Customer {0}, Account {1}", 
               cust.Person.LastName.Trim() + ", " + cust.Person.FirstName, cust.AccountNumber);
&lt;/pre&gt; 
&lt;/p&gt;&lt;span style="font-weight: bold;"&gt;Patrones y &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_75"&gt;Tesetabilidad&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_76"&gt;EF&lt;/span&gt;4 incluye una &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_77"&gt;interface&lt;/span&gt; adicional que facilita la escritura de código orientado a pruebas usando el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_78"&gt;framework&lt;/span&gt;. Además para facilitar las pruebas ahora es posible el uso de patrones como el &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_79"&gt;Repository&lt;/span&gt;  &lt;/span&gt;y el &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_80"&gt;UnitOfWork&lt;/span&gt;&lt;/span&gt;. &lt;a href="http://blogs.msdn.com/adonet/archive/2009/05/18/sneak-preview-entity-framework-4-0-testability-improvements.aspx"&gt;Más información en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_81"&gt;Entity&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_82"&gt;Framework&lt;/span&gt; 4.0 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_83"&gt;Testeability&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_84"&gt;Improvements&lt;/span&gt;&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-6681125837464515528?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/tnYb49qAQlK0vDrWkzR7yYWvF2I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tnYb49qAQlK0vDrWkzR7yYWvF2I/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/tnYb49qAQlK0vDrWkzR7yYWvF2I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/tnYb49qAQlK0vDrWkzR7yYWvF2I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/JDF-z5e15Ng" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/6681125837464515528/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=6681125837464515528" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/6681125837464515528?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/6681125837464515528?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/JDF-z5e15Ng/novedades-entity-framework-4.html" title="Novedades Entity Framework 4" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2010/04/novedades-entity-framework-4.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8ARn49eSp7ImA9WxBaF0w.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-2195472711318802945</id><published>2010-03-25T08:55:00.000-07:00</published><updated>2010-03-27T10:27:27.061-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-27T10:27:27.061-07:00</app:edited><title>Guia de arquitectura</title><content type="html">Algunos de vosotros ya conocereís o habreis oido hablar del centro de arquitectura que tiene Microsoft, en el podemos encontrar interesantes articulos explicando algunos patrones de diseño y sus implementaciones en .net asi como diferentes guias y herramientas (&lt;a href="http://msdn.microsoft.com/es-es/architecture/default.aspx"&gt;http://msdn.microsoft.com/es-es/architecture/default.aspx&lt;/a&gt;).

Pero lo que quiero compartir con todos vosotros es una guia que han publicado recientemente sobre la "Arquitectura N Capas DDD .Net 4.0". El documente (todavia esta en fase de borrador) según sus propios creadores nace como respuesta a una necesidad que han detectado.
&lt;span style="FONT-STYLE: italic"&gt;"Microsoft Ibérica ha detectado en diversos clientes la necesidad de disponer de una “Guía de Arquitectura base .NET” en español, que sirva para marcar unas líneas maestras de diseño e implementación a la hora de desarrollar aplicaciones .NET complejas."&lt;/span&gt;
&lt;p&gt;En definitiva se trata de un buen documento que deberia ser leido por cualquiera que este interesado en desarrollar software de calidad con una arquitectura bien definida y que aproveche todos los elementos que el nuevo framework 4.0 nos ofrece.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-2195472711318802945?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2euw_vlknUI4JiumrjBsxDZpBMU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2euw_vlknUI4JiumrjBsxDZpBMU/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/2euw_vlknUI4JiumrjBsxDZpBMU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2euw_vlknUI4JiumrjBsxDZpBMU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/ebc3DcdCzgI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/2195472711318802945/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=2195472711318802945" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/2195472711318802945?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/2195472711318802945?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/ebc3DcdCzgI/guia-de-arquitectura.html" title="Guia de arquitectura" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2010/03/guia-de-arquitectura.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIBQHwycCp7ImA9WxBbF08.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-6652741416102008766</id><published>2010-03-16T00:26:00.000-07:00</published><updated>2010-03-16T01:35:51.298-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-16T01:35:51.298-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><title>Enumerados con valores de tipo cadena C#</title><content type="html">Fuera de toda duda estan las ventajas de utilizar enumerados en nuestro código, pero en ocasiones es necesario asociar el valor del enumerado con una cadena, en .Net no se permiten enumerados con valores númericos pero... hace tiempo encontre una solución que ahroa voy a presentar.

&lt;pre class="brush: csharp"&gt;
/// &lt;summary&gt;
    /// Se crea una clase que hereada de Attribute
    /// esta clase almacenara el string con el valor
    /// del enumerado
    /// &lt;/summary&gt;
    public class StringValueAttribute : Attribute {

        #region Properties

        /// &lt;summary&gt;
        /// Holds the stringvalue for a value in an enum.
        /// &lt;/summary&gt;
        public string StringValue { get; protected set; }

        #endregion

        #region Constructor

        /// &lt;summary&gt;
        /// Constructor used to init a StringValue Attribute
        /// &lt;/summary&gt;
        /// &lt;param name="value"&gt;&lt;/param&gt;
        public StringValueAttribute(string value) {
            this.StringValue = value;
        }

        #endregion

    }
&lt;/pre&gt;

Ahora es necesario crear un &lt;a href="http://msdn.microsoft.com/es-es/library/bb383977.aspx"&gt;Método de extension&lt;/a&gt; para poder obtener el string asociado al valor del enumerado.

&lt;pre class="brush: csharp"&gt;
/// &lt;summary&gt;
        /// Se obtiene la cadena asociada
        /// a un valor concreto del enumerado,esto solo funciona 
        /// si se ha asignado previamente un valor al atributo StringValue
        /// &lt;/summary&gt;
        /// &lt;param name="value"&gt;&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        public static string GetStringValue(this Enum value) {
            // Get the type
            Type type = value.GetType();

            // Get fieldinfo for this type
            FieldInfo fieldInfo = type.GetField(value.ToString());

            // Get the stringvalue attributes
            StringValueAttribute[] attribs = fieldInfo.GetCustomAttributes(
                typeof(StringValueAttribute), false) as StringValueAttribute[];

            // Return the first if there was a match.
            return attribs.Length &gt; 0 ? attribs[0].StringValue : null;
        }
&lt;/pre&gt;

Ahora vemos como crear un enumerado

&lt;pre class="brush: csharp"&gt;
 public enum MyEnum: int {
        [StringValue("Lun")]
        Lunes= 1,
        [StringValue("Mar")]
        Martes = 2       
 } 
&lt;/pre&gt;

Como parte final vemos como usar nuestro enumerado.

&lt;pre class="brush: csharp"&gt;
MyEnum myE = MyEnum.Lunes;
string val = myE.GetStringValue();
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-6652741416102008766?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TLCqUmY9t9oy546MUqVxLAlc_nw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TLCqUmY9t9oy546MUqVxLAlc_nw/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/TLCqUmY9t9oy546MUqVxLAlc_nw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TLCqUmY9t9oy546MUqVxLAlc_nw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/H9tgxx9UTKY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/6652741416102008766/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=6652741416102008766" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/6652741416102008766?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/6652741416102008766?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/H9tgxx9UTKY/enumerados-con-valores-de-tipo-cadena-c.html" title="Enumerados con valores de tipo cadena C#" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>1</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2010/03/enumerados-con-valores-de-tipo-cadena-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IARXw7cSp7ImA9WxBVGU8.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-1771563155505299986</id><published>2010-02-22T23:21:00.001-08:00</published><updated>2010-02-23T03:45:44.209-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-23T03:45:44.209-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><title>Mantener la posicion de un Div después de un postback asíncrono</title><content type="html">Cuando queremos mantener la posición del scroll de un elemento como puede ser un Div ó un Panel despues de una postback asíncrono, tenemos que recurrir de nuevo al potente javascript. Parece claro que lo que tenemos que lograr es almacenar la posición del scroll antes del postback y después restaurlarla. Eso es exactamente lo que hace el siguiente script.
Es importante que este situado siempre después del ScriptManager.
&lt;pre class="brush: js"&gt;
&lt;script type="text/javascript"&gt;
    var xPos, yPos;
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_beginRequest(BeginRequestHandler);
    prm.add_endRequest(EndRequestHandler);
    function BeginRequestHandler(sender, args) {
        xPos = $get('scrollDiv').scrollLeft;
        yPos = $get('scrollDiv').scrollTop;
    }
    function EndRequestHandler(sender, args) {
        $get('scrollDiv').scrollLeft = xPos;
        $get('scrollDiv').scrollTop = yPos;
    }
&lt;/script&gt;
&lt;/pre&gt;

Lo que hacemos es añadir dos manejadores BeginRequestHandler y EndRequestHandler, el primero se ejecuta justo antes de realizar el postback, en él obtenemos la posición del scroll y la almacenamos, en el segundo restauramos esa posición.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-1771563155505299986?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/s2NBYBBS0R0vGOCNUlFP_uyWEKQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s2NBYBBS0R0vGOCNUlFP_uyWEKQ/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/s2NBYBBS0R0vGOCNUlFP_uyWEKQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s2NBYBBS0R0vGOCNUlFP_uyWEKQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/E0ooktbLBgM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/1771563155505299986/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=1771563155505299986" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1771563155505299986?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1771563155505299986?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/E0ooktbLBgM/mantener-la-posicion-de-un-div-despues.html" title="Mantener la posicion de un Div después de un postback asíncrono" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2010/02/mantener-la-posicion-de-un-div-despues.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAGQnwzfip7ImA9WxBVEk8.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-1365289259103583146</id><published>2010-01-30T00:44:00.000-08:00</published><updated>2010-02-15T00:32:03.286-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-15T00:32:03.286-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><title>Novedades Asp.Net 4.0 parte II</title><content type="html">&lt;div&gt; &lt;/div&gt;
&lt;div&gt;En este post vamos a continuar tratando algunas de las novedades de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Asp&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Net&lt;/span&gt; 4, es este caso quiero comentaros la nueva forma de gestionar y controlar la cache.&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Output&lt;/span&gt; cache&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Con la aparición de la primera versión de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;asp&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;net&lt;/span&gt; se introdujo el concepto de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;output&lt;/span&gt; cache, esto permite a los desarrolladores almacenar páginas, controles y las respuestas Http en la memoria de forma que las siguientes peticiones &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Web&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;asp&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;net&lt;/span&gt; puede servirlas de forma mucho más rápida y eficiente ya que solo tiene que acudir a la memoria y coger el código genera anteriormente para la página, editándose así una nueva generación del código de salida de la página.&lt;/p&gt;&lt;p&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Asp&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Net&lt;/span&gt; 4 añade un punto más a esta &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;funcionalidad&lt;/span&gt; permitiendo al desarrollador añadir uno o varios proveedores &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;personalizados&lt;/span&gt; de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;output&lt;/span&gt;-cache. Estos proveedores (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;providers&lt;/span&gt;) permiten usar cualquier mecanismo de almacenamiento para persistir el código HTML. Esta nueva &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;funcionalidad&lt;/span&gt; permite al desarrollador crear diversos &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;providers&lt;/span&gt; en función del tipo de almacenamiento que precise en cada situación (discos remotos o locales, almacenamiento en la nube, motores de cache distribuida), &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;combinandolos&lt;/span&gt; a su gusto.&lt;/p&gt;&lt;p&gt;Para crear un Cache &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;provider&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;personalizado&lt;/span&gt; debemos crear una clase y heredar de &lt;em&gt;&lt;span style="font-weight: bold;"&gt;System.Web.Caching.OutputCacheProvider&lt;/span&gt;. Una vez creado el nuevo proveedor de cache tendremos que dar un paso mas para poder utilizarlo, este paso ya os lo podréis imaginar... si, tenemos que &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;configurarlo&lt;/span&gt; en el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;Web&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;config&lt;/span&gt;, para ello, dentro de la sección de &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;providers&lt;/span&gt; &lt;/span&gt;se ha creado una nueva &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;subsección&lt;/span&gt; llamada &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;outputcache&lt;/span&gt;&lt;/span&gt;. El siguiente fragmento de  código nos muestra la sección de un &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;web&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;config&lt;/span&gt; en el que se configura la cache para que se almacene en memoria. Este es el tipo de almacenamiento que se usa por defecto &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;Asp&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;net&lt;/span&gt; 4.
&lt;/em&gt;&lt;/p&gt;
&lt;pre class="brush: xml"&gt;
&lt;caching&gt;
&lt;outputcache defaultprovider="AspNetInternalProvider"&gt;
&lt;providers&gt;
&lt;add name="DiskCache" type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"&gt;
&lt;/add&gt;
&lt;/providers&gt;
&lt;/outputcache&gt;
&lt;/caching&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;Ademas&lt;/span&gt; de esto, podemos añadir un mayor nivel de detalle especificando a nivel de control o de petición. La manera mas sencilla de configurar un nuevo proveedor para un Control se usuario es &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;utlizando&lt;/span&gt; la sintaxis &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;declaratia&lt;/span&gt;.

Para ello se ha creado un nuevo atributo llamado &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;providerName&lt;/span&gt;, a continuación vemos como como utilizarlo
&lt;/p&gt;
&lt;pre class="brush: xml"&gt;
&lt;%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %&gt;
&lt;/pre&gt;
&lt;p&gt;
Si por el contrario lo que queremos es configurar un proveedor &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;difirente&lt;/span&gt; dependiendo de la página que se vaya a solicitar tendremos un poco más de trabajo. Es necesario sobreescribir el método &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;GetOuputCacheProviderName&lt;/span&gt; en el Global.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;asax&lt;/span&gt; para especificar manualmente que proveedor corresponde con cada petición de página.

&lt;/p&gt;
&lt;pre class="brush: csharp"&gt;

public override string GetOutputCacheProviderName(HttpContext context) 
{ 
  if (context.Request.Path.EndsWith("Advanced.aspx"))
    return "DiskCache"; 
  else
    return base.GetOutputCacheProviderName(context);
}

&lt;/pre&gt;
&lt;p&gt;
&lt;/p&gt;&lt;p&gt;
Después de ver de forma muy resumida esta nueva &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52"&gt;caracteristica&lt;/span&gt; que nos ofrece &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;asp&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;net&lt;/span&gt; a cada desarrollador se le pueden ocurrir algunas situaciones en las que podremos sacar provecho de esto, por ejemplo podemos combinar los distintos tipos de proveedores para conseguir accesos mas rápidos almacenando las páginas mas visitadas en memoria y aquellas que lo son menos en disco.
&lt;/p&gt;


&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-1365289259103583146?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VkF2pL490S4WLB7bT1HDtxcQNWQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VkF2pL490S4WLB7bT1HDtxcQNWQ/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/VkF2pL490S4WLB7bT1HDtxcQNWQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VkF2pL490S4WLB7bT1HDtxcQNWQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/gpj4U3gn6Go" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/1365289259103583146/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=1365289259103583146" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1365289259103583146?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1365289259103583146?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/gpj4U3gn6Go/novedades-aspnet-40-parte-ii.html" title="Novedades Asp.Net 4.0 parte II" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2010/01/novedades-aspnet-40-parte-ii.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUCR384cSp7ImA9WxBQE0U.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-1595008536866120859</id><published>2010-01-11T00:36:00.000-08:00</published><updated>2010-01-13T04:04:26.139-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-13T04:04:26.139-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="visual studio 2010" /><title>Visual Studio 2010, Retrasado.</title><content type="html">Parece ser que vamos a tener que esperar un poco más para tener en nuestras manos la versión definitiva del Visual Studio 2010 y del Framework 4. Según la propia compañia este retraso se debe a que  "El feedback recibido denotan que el rendimiento y el uso de la memoria virtual en VS2010 no es el adecuado para la nueva versión".

Microsoft ha decidido ofrecer una versión Release Candidate (RC),  la cual estara disponible en Febrero.  La RC vendra con una licencia "go live" que soportora despliegue de aplicaciones en producción, "El objetivo de esta RC es obtener todo el feedback sobre el producto. Para asegurarnos que somos capaces de recibir todo el feedback y reaccionar a el, hemos decidido retrasar unas semanas el lanzamiento de VS2010 y el Framework 4".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-1595008536866120859?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zm_2_qcoFVhmLFS9ve0-x9WyLYo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zm_2_qcoFVhmLFS9ve0-x9WyLYo/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/zm_2_qcoFVhmLFS9ve0-x9WyLYo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zm_2_qcoFVhmLFS9ve0-x9WyLYo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/y3GeevnffBg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/1595008536866120859/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=1595008536866120859" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1595008536866120859?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1595008536866120859?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/y3GeevnffBg/visual-studio-2010-retrasado.html" title="Visual Studio 2010, Retrasado." /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2010/01/visual-studio-2010-retrasado.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIFRX0-fCp7ImA9WxBREUU.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-1917890692034491232</id><published>2009-12-30T03:29:00.000-08:00</published><updated>2009-12-30T06:15:14.354-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-30T06:15:14.354-08:00</app:edited><title>Novedades Asp.Net 4.0</title><content type="html">Estos días en los que el trabajo nos da un poco mas de respiro me he decidido a revisar algunas de las novedades que vamos a poder disfrutar con el lanzamiento de la nueva versión del &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Framework&lt;/span&gt; y del &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Visaul&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Studio&lt;/span&gt; 2010.
Este es el primero de una serie de post en los que iremos viendo algunas novedades que afectaran a los desarrolladores que trabajen con &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ASP&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;NET&lt;/span&gt;

&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Web&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Config&lt;/span&gt; Limpios

&lt;/span&gt;A lo largo de las distintas versiones de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;asp&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;net&lt;/span&gt; el fichero de conflagración ha ido creciendo, incorporando nuevas características como &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Ajax&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;routing&lt;/span&gt; o la interacción con &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;IIS&lt;/span&gt;. Este aumento nos genere un fichero mucho mas grande y menos legible (el fichero &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;web&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;config&lt;/span&gt; que se añade en un nuevo proyecto en el Visual &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Studio&lt;/span&gt; 2008 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;sp&lt;/span&gt;1 ocupa alrededor de 126 lineas), resulta bastante complicado modificar dicho fichero sin una herramienta como Visual &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Studio&lt;/span&gt;.
Pero todo esto ha cambiado en la nueva versión, ahora cuando creemos un nuevo proyecto &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;asp&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;net&lt;/span&gt; 4.0 podremos observar un &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;web&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;config&lt;/span&gt; como este:

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3RA7eNR3uw0/SztUplklewI/AAAAAAAAADg/dzevbPc9238/s1600-h/webconfig.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 172px;" src="http://1.bp.blogspot.com/_3RA7eNR3uw0/SztUplklewI/AAAAAAAAADg/dzevbPc9238/s400/webconfig.png" alt="" id="BLOGGER_PHOTO_ID_5421019649907456770" border="0" /&gt;&lt;/a&gt;
Esto es posible gracias a que la mayoría de los elementos de conflagración han sido movidos al fichero &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;machine&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;congif&lt;/span&gt;&lt;/span&gt; de forma que ahora las &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;aplicaciones&lt;/span&gt; heredan del mismo. Esta novedad no aporta &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;funcionalidad&lt;/span&gt; alguna pero si permite mayor legibilidad del código que teniendo en cuenta la cantidad de &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_25"&gt;información&lt;/span&gt; que tenemos que manejar no es poco.

Feliz año nuevo a todos, menos &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;framework&lt;/span&gt; y mas &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;Champagne&lt;/span&gt;!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-1917890692034491232?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/I87oEWVpw-jTdK_HkLrC6U5e3MI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I87oEWVpw-jTdK_HkLrC6U5e3MI/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/I87oEWVpw-jTdK_HkLrC6U5e3MI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I87oEWVpw-jTdK_HkLrC6U5e3MI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/rPl9udK5V8s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/1917890692034491232/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=1917890692034491232" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1917890692034491232?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1917890692034491232?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/rPl9udK5V8s/novedades-aspnet-40.html" title="Novedades Asp.Net 4.0" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_3RA7eNR3uw0/SztUplklewI/AAAAAAAAADg/dzevbPc9238/s72-c/webconfig.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/12/novedades-aspnet-40.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMHQnczfip7ImA9WxBTFU4.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-1053261218821298428</id><published>2009-12-03T02:03:00.000-08:00</published><updated>2009-12-11T03:20:33.986-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-11T03:20:33.986-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Cache" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><category scheme="http://www.blogger.com/atom/ns#" term="Applications Block" /><title>Cache de Objectos .Net:  Applications Block</title><content type="html">Hoy quiero hablar sobre la utilización de la cache en las aplicaciones Asp.net, cuando nos encontramos ante una aplicación que hace numerosas consultas a la base de datos y la mayoría de estas consultas no cambia habitualmente, nos encontramos ante un entorno perfecto para usar la cache.
Las ventajas de cachear objetos son obvias, nos permite reducir los tiempos de respuesta de las aplicaciones ya que reducen el número de consultas a la base de datos y esto al final supone la mayoría del tiempo de procesamiento de una página.
Llegado este punto en el que tenemos claro que queremos que nuestra aplicación use la cache, debemos decidir dónde vamos a utilizarla y qué vamos a cachear.
&lt;div&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Output Cache a nivel de página&lt;/b&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Es la forma mas simple de cache, mantiene una copia del HTML que ha sido enviado como respuesta.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Fragment Caching y user controls&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Esta técnica se utiliza cuando solo queremos cachear determinadas partes de la página. Estas partes se encapsulan dentro de controles de usuario y luego se marcan con la directiva &lt;b&gt;@&lt;/b&gt;&lt;b&gt;OutputCache&lt;/b&gt;, indicando el tiempo que se mantendrá el control en memoria.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Caching API, usando el Objeto Cache&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Utilizando el objeto cache puedes almacenar cualquier objeto serializable, permite controlar la expiración del objeto en función de varios parámetros, tiempo transcurrido desde su creación, modificación del objeto, modificación del otros objetos, cambios en tablas de la base de datos, ...&lt;/div&gt;

&lt;b&gt;Applicattions Block&lt;/b&gt;&lt;div&gt;&lt;b&gt;
&lt;/b&gt;&lt;div&gt;&lt;b&gt;&lt;span id="span_WEBNEWTXT_0001" overflow="hidden" style="" class="ReadonlyAttribute"&gt;&lt;span style="font-family:Verdana;font-size:85%;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt; "Application Blocks son pequeñas (ahora no tan pequeñas) partes de la aplicación, en general bastante necesarias para el desarrollo de aplicaciones corporativas. Se pueden encontrar ejemplos de dichos Application Blocks en &lt;/span&gt;&lt;a href="http://www.microsoft.com/resources/practices/code.mspx"&gt;http://www.microsoft.com/resources/practices/code.mspx&lt;/a&gt;.&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Para usas estos bloques de código es necesario instalar el &lt;a href="http://msdn.microsoft.com/en-us/library/cc512464.aspx"&gt;Enterprise Library&lt;/a&gt;, una vez instalado ya podremos empezar a configurar la cache, aunque funciona sin necesidad de modificar nada en la configuración.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Este application block soporta la cache en memoria y en almacenamientos de soporte (bases de datos o almacenamientos aislados) .&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;b&gt;Configuración&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;b&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Enterprise Library viene con una &lt;a href="http://davidhayden.com/blog/dave/archive/2006/01/23/2744.aspx"&gt;herramienta de configuración&lt;/a&gt; que nos permite cambiar de forma graficas las opciones de los distintos Blocks.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Lo primero que tenemos que hacer es cargar en la herramienta de configuración el fichero de configuración (web.config) del proyecto en el que queremos utilizar la cache. Si habéis almacenado alguna cadena de conexión en el web.config veréis como la herramienta las reconoce y las sitúa dentro del Application Block de Data Access.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style=" ;font-size:small;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3RA7eNR3uw0/SyIkjylfohI/AAAAAAAAADY/SjbMyybSD8Q/s1600-h/CrearCachingBlock.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 116px;" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SyIkjylfohI/AAAAAAAAADY/SjbMyybSD8Q/s400/CrearCachingBlock.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5413929899345814034" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;A continuación vereis como se ha creado una nueva sección que corresponde a la cache. Para el ejemplo vamos a mantener los valores por defecto, esto es, tiempo cache 60 segundos, número máximo de elementos en cache 1000, cuando se llega al tope se sacaran de la cache 10 elementos. Guardamos los cambios y cerramos la herramienta.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Uso de la cache&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;1- Añadir namespaces&lt;/div&gt;&lt;pre class="brush: csharp"&gt;
using Microsoft.Practices.EnterpriseLibrary.Caching;
using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;
&lt;/pre&gt;
&lt;div&gt;1- Instanciar object CacheManager&lt;/div&gt;
&lt;pre class="brush: csharp"&gt;
CacheManager cacheManager;
cacheManager = CacheFactory.GetCacheManager("MyCacheManager");

//Cache Manager es el nombre que le hemos dado al CacheManger en la herramienta de configuración
&lt;/pre&gt;

&lt;div&gt;3- Cache de objetos&lt;/div&gt;
&lt;pre class="brush: csharp"&gt;
Usuario user = new Usuario("jorge", "españa", "28");
cacheManager.Add(user.nombre, user, CacheItemPriority.Normal, null, new SlidingTime(TimeSapn.FromMinutes(5)));
&lt;/pre&gt;

Con este ejemplo no se intuye la verdadera necesidad de utilizar este Block, pero si imaginamos situaciones en las que necesitemos realizar la cache en la capa de acceso a datos se vuelve un instrumento de gran importancia.&lt;div&gt;
&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;div&gt;
&lt;/div&gt;&lt;div&gt;
&lt;/div&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/3005105701248875102-1053261218821298428?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NqRs6o3V2C_VDR6jFfPvcaFj_c0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NqRs6o3V2C_VDR6jFfPvcaFj_c0/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/NqRs6o3V2C_VDR6jFfPvcaFj_c0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NqRs6o3V2C_VDR6jFfPvcaFj_c0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/rtGgzcua8PI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/1053261218821298428/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=1053261218821298428" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1053261218821298428?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1053261218821298428?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/rtGgzcua8PI/cache-de-objectos-net-applications.html" title="Cache de Objectos .Net:  Applications Block" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_3RA7eNR3uw0/SyIkjylfohI/AAAAAAAAADY/SjbMyybSD8Q/s72-c/CrearCachingBlock.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/12/cache-de-objectos-net-applications.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAEQXY7eip7ImA9WxNUF0s.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-8911214685271297372</id><published>2009-11-07T09:14:00.000-08:00</published><updated>2009-11-09T01:58:20.802-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-09T01:58:20.802-08:00</app:edited><title>Descubriendo HtmlAgilityPack</title><content type="html">Hace algunos años, antes de la popularización de los servicio web y los RSS, era bastante frecuente la tarea de buscar información dentro de una pagina web, recorriendo su código html. Esta tecnica se denomina Screen Scrapping, consiste en descargarse una pagina web, parsear el código Html y sacar la información necesaria.
Este trabajo podia convertirse en una tarea complicada. El principal recurso que disponiamos para parsear el código Html eran las expresiones regulares, con ellas se consiguen unos buenos resultados pero tienen el inconveniente de ser muy complejas de construir.

&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;HtmlAgilityPack, una gran ayuda!

&lt;/span&gt;&lt;/span&gt;Se&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;trata de una libreria desarrollada en .Net que nos permite bajarnos código html a nuestra memoria, recorrerlo, extraer información y hasta modificarlo. La liberia nos permite ejecutar consultas &lt;a href="http://es.wikipedia.org/wiki/XPath"&gt;XPath&lt;/a&gt; (Estándar de la W3C que permite realizar consultas los documentos Xml, teniendo en cuenta su estructrura jerarquica) ademas de soportar el tratamiento de páginas mal formadas, algo que es bastante habitual en la red.

Bueno y ahora vamos a lo que nos interesa, vamos a ver algo de lo que podemos hacer con este nuevo juguete.
Lo primero que tenemos que hacer es descargar la libreria, la podemos encontrar en &lt;a href="http://www.codeplex.com/htmlagilitypack"&gt;Codeplex&lt;/a&gt;, despues añadimos una referencia en nuestro proyecto a&lt;span style="font-style: italic;"&gt; HtmlAgilityPack.dll.

En las siguientes lineas de código vamos obtener el titulo de los post de este blog.

&lt;pre class="brush: csharp"&gt;
static void Main(string[] args)
{
    var client = new System.Net.WebClient();
    client.Encoding = System.Text.Encoding.UTF8;
    var document = new HtmlAgilityPack.HtmlDocument();
    document.LoadHtml(client.DownloadString("http://irokhes.blogspot.com/"));

    //Obtenemos el titulo de cada uno de los post
    foreach (HtmlAgilityPack.HtmlNode node in
          document.DocumentNode.SelectNodes("//h3[@class='post-title entry-title']"))
          Console.WriteLine(node.InnerText.Trim());
}
&lt;/pre&gt;

En el siguiente ejemplo podemos ver como modificar el código de una página, en este caso se trata de como podriamos reparar los enlaces de una página.

&lt;pre class="brush: csharp"&gt;
 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.htm");
 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    HtmlAttribute att = link["href"];
    att.Value = FixLink(att);
 }
 doc.Save("file.htm");
&lt;/pre&gt;

Por último vamos a ver como Usar sentencias de Linq sobre una página web. En este ejemplo vamos a obtener la url de todas las imagenes que aparecen en el blog.

&lt;pre class="brush: csharp"&gt;
static void Main(string[] args)
{
   string url = "http://irokhes.blogspot.com/";            
   WebClient client = new WebClient();
   string html = client.DownloadString(url);

   // Load the Html into the agility pack
   HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
   doc.LoadHtml(html);

   List&lt;HtmlNode&gt; imageNodes = null;
   imageNodes = (from HtmlNode node in doc.DocumentNode.SelectNodes("//img")
             where node.Name == "img"
             select node).ToList();

   foreach (HtmlNode node in imageNodes)
   {
          //Se escribe el atributo src de cada una de las imagenes
          Console.WriteLine(node.Attributes["src"].Value);
   }
}
//&lt;/pre&gt;
&lt;/span&gt;

Creo que con estos ejemplos se puede ver la sencillo que es usar la libreria, basta con conocer alguans sentencias de Xpath para poder acceder a cualquier elemento de una págino. Si a usamos esta libreria en conjunto con alguna herramienta como &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;displaylang=en"&gt;Internet explorer developer toolbar&lt;/a&gt; o &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1843"&gt;Firebug&lt;/a&gt; podremos examinar la información de cualquier web aunque esta no disponga de una Api especifica para ello.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-8911214685271297372?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rFx5mIoQcDSPW4VfHKtmKEd98sw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rFx5mIoQcDSPW4VfHKtmKEd98sw/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/rFx5mIoQcDSPW4VfHKtmKEd98sw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rFx5mIoQcDSPW4VfHKtmKEd98sw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/cyR9WUzmiF4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/8911214685271297372/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=8911214685271297372" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/8911214685271297372?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/8911214685271297372?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/cyR9WUzmiF4/htmlagilitypack.html" title="Descubriendo HtmlAgilityPack" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>1</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/11/htmlagilitypack.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cCRXo5eSp7ImA9WxNUFkw.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-1453800078318481282</id><published>2009-09-30T04:13:00.000-07:00</published><updated>2009-11-07T09:31:04.421-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T09:31:04.421-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="jquery" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><title>Usar jQuery con MasterPage</title><content type="html">Si alguien ha intentado usar las librerias de &lt;a href="http://jquery.com/"&gt;jQuery
&lt;/a&gt; en una proyecto asp.net que las páginas hereden de una página maestra, se habra dado cuenta de que jQuery no funciona. Esto es debido a que la página maestra se encuentra en un nivel de directorios distintos al que se encuentras las paginas hijas. Para solucionar podemos utilizar un pequeño truco, para referenciar el archivo de jquery en la MasterPage lo haremos de la sigueinte manera:
&lt;pre class="brush: html"&gt;
&amp;lt;script src="&amp;lt;%= Page.ResolveUrl("~/Js/ui.core.js") %&amp;gt;"
 language="javascript" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-1453800078318481282?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ljtUOSGG3qi6Juq-Mc80I4MsFtw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ljtUOSGG3qi6Juq-Mc80I4MsFtw/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/ljtUOSGG3qi6Juq-Mc80I4MsFtw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ljtUOSGG3qi6Juq-Mc80I4MsFtw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/J2xMMq0JY80" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/1453800078318481282/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=1453800078318481282" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1453800078318481282?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/1453800078318481282?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/J2xMMq0JY80/usar-jquery-con-masterpage.html" title="Usar jQuery con MasterPage" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/09/usar-jquery-con-masterpage.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cESHo6eSp7ImA9WxNUFUQ.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-8843924580072519001</id><published>2009-09-09T06:56:00.000-07:00</published><updated>2009-11-07T03:56:49.411-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T03:56:49.411-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><title>Posicionar ModalPopupExtender desde Javascript</title><content type="html">Para realizar esto primero tendremos que asignar un manejador al evento Show del control Modal :
&lt;pre class="brush: js"&gt;
function pageLoad() {        
$find('&lt;%= ModalPopupPermisosSinGrid.ClientID  %&gt;').add_showing(onshowing);
}
&lt;/pre&gt;
Una vez hemos capturado el evento Show, definimos la posición de la ventana modal. En este caso la posición depende del tamaño de la pantalla.

&lt;pre class="brush: js"&gt;
function onshowing() {          
var alto = screen.height;
var posicion_Y = alto / 20;        
&lt;span style="color: rgb(0, 102, 0);"&gt;//seria el mismo funcionamiento para la cordenado X &lt;/span&gt;
$find('&lt;%= ModalPopupPermisosSinGrid.ClientID  %&gt;').set_Y(posicion_Y);
}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-8843924580072519001?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/O9clwWzY6RPdQvGBN3sKHk4njKU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O9clwWzY6RPdQvGBN3sKHk4njKU/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/O9clwWzY6RPdQvGBN3sKHk4njKU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O9clwWzY6RPdQvGBN3sKHk4njKU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/WCZmusExR-g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/8843924580072519001/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=8843924580072519001" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/8843924580072519001?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/8843924580072519001?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/WCZmusExR-g/cambiar-la-posicion-de-un-control.html" title="Posicionar ModalPopupExtender desde Javascript" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/09/cambiar-la-posicion-de-un-control.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQFSHk_fip7ImA9WxNUFkw.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-4877108058262251532</id><published>2009-09-01T02:45:00.000-07:00</published><updated>2009-11-07T10:25:19.746-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T10:25:19.746-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><title>Ordenar ListItemCollection</title><content type="html">Cuando tenemos un control como puede ser un DropDownList ó un ListBox, es posible que necesitemos mostrar los elementos de forma ordenada. Para ello dependiendo de la forma que hayamos cargado el control, la ordenación sera mas o menos sencilla.
En el caso de que nuestro control este enlazado a datos, la forma más sencilla seria ordenar los elementos antes de ser enlazados.
Existen otros escenarios en los que podemos permitir al usuario manipular esa lista o bien el caso típico que tenemos dos listbox en los que podemos pasar datos de uno al otro. Para esto tendremos que convertir la colección de items a un array y mediante LinQ realizamos la ordenación.
La función podria ser la siguiente:

&lt;pre class="brush: csharp"&gt;
private void OrdenarListBox(ListBox listBoxControl)
{

   &lt;span style="color: rgb(0, 153, 0);"&gt;//se convierte la coleccion de items a un array&lt;/span&gt;
   ListItem[] myListItemArray = new ListItem[listBoxControl.Items.Count];
  lbxRecursosAsignados.Items.CopyTo(myListItemArray, 0);
   &lt;span style="color: rgb(0, 153, 0);"&gt;//mediante linq se ordena el array por el campo Texto del item&lt;/span&gt;
   IEnumerable&amp;lt;ListItem&amp;gt; query = from r in myListItemArray orderby r.Text ascending select r;
   &lt;span style="color: rgb(0, 153, 0);"&gt;//se enlaza el array al control&lt;/span&gt;
   lbxRecursosAsignados.DataSource = query;
   lbxRecursosAsignados.DataBind();
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-4877108058262251532?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Lv53JdCtGglauPCTTkUGyYWmqn8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Lv53JdCtGglauPCTTkUGyYWmqn8/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/Lv53JdCtGglauPCTTkUGyYWmqn8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Lv53JdCtGglauPCTTkUGyYWmqn8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/r0z_-7-dLCc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/4877108058262251532/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=4877108058262251532" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/4877108058262251532?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/4877108058262251532?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/r0z_-7-dLCc/ordenar-listitemcollection.html" title="Ordenar ListItemCollection" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/09/ordenar-listitemcollection.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QAQnY5fSp7ImA9WxNVGEU.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-7117143332553430524</id><published>2009-08-27T01:58:00.000-07:00</published><updated>2009-10-30T00:55:43.825-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-30T00:55:43.825-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>Compatibilidad de los navegadores con CSS</title><content type="html">En algunas ocasiones conseguir que una web se vea correctamente en todos los navegadores puede resultar un verdadero infierno. Para solucionar los diversos problemas de estandares y compatibilidades podemos optar por usar diferentes hojas de estilo dependiendo del navegador.
A continuación podeis ver un ejemplo:
&lt;pre class="alt2"&gt;

&amp;lt;!--[if gte IE6]&amp;gt;&lt;br /&gt;
&amp;lt;link rel="stylesheet" type="text/css" href="styles/ie.css" /&amp;gt;&lt;br /&gt;
&amp;lt;! [endif] --&amp;gt;

&lt;/pre&gt;


Otra forma de aplicar distintos estilos a una web en función del navegador es haciedo esta diferenciación dentro de la hoja de estilo, en este caso podemos ver varios ejemplos de como hacerlo.
&lt;pre class="alt2"&gt;

#something { color: red; } /* Se aplica a IE6 y superior. */
*+html #something { color: green; } /* Se aplica a IE7. */
* html #something { color: blue; } /* Se aplica a IE6. */

&lt;/pre&gt;

&lt;pre class="alt2"&gt;

margin-left: 5px; /* Margen izquierdo para todos los navegadores */
.margin-left: 7px; /* Margen izquierdo de 7px para IE6 y IE7, los demas navegadores todavia seguiran manteniendo el margen de 5px inicial */
_margin-left: 6px; /* Sólo IE6 leerá y entendera este estilo y aplicará el valor */

&lt;/pre&gt;
Por último podemos recurrir a otro pequeño truco, si en nuestra hoja de estilos añadimos una propiedad y le anteponemos '//' internet explorer si que interpretara esta propiedad pero el resto de navegadores no.

&lt;pre class="alt2"&gt;
#nonie{//display: none;}

#iebased{
       display: none;
       //display: visible;
}
&lt;/pre&gt;
En esta caso si tuvieramos dos Div´s como los siguientes :
&lt;pre class="alt2"&gt;

&amp;lt;div id="nonie"&amp;gt; Tu &amp;lt;i&amp;gt;no estas&amp;lt;/i&amp;gt; utilizando Internet Explorer. &amp;lt;/div&amp;gt;

&amp;lt;div id="iebased"&amp;gt; Tu &amp;lt;b&amp;gt;estas&amp;lt;/b&amp;gt; utilizando Internet Explorer. &amp;lt;/div&amp;gt;

&lt;/pre&gt;
En este caso solo veriamos la capa correspondiente en función del tipo de navegador que usemos.

Este ultimo truco no es demasiado elegante pero si muy funcional.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-7117143332553430524?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pbOEbtO6KsTFbiS98zOiIwG55Hs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pbOEbtO6KsTFbiS98zOiIwG55Hs/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/pbOEbtO6KsTFbiS98zOiIwG55Hs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pbOEbtO6KsTFbiS98zOiIwG55Hs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/D8dGKIsOY2k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/7117143332553430524/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=7117143332553430524" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/7117143332553430524?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/7117143332553430524?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/D8dGKIsOY2k/compatibilidad-de-los-navegadores-con.html" title="Compatibilidad de los navegadores con CSS" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/08/compatibilidad-de-los-navegadores-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQMQns6fSp7ImA9WxJbE04.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-2410931729421377608</id><published>2009-07-23T01:12:00.000-07:00</published><updated>2009-07-23T01:23:03.515-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-23T01:23:03.515-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="firefox" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><title>Deshabilitar la cache de una pagina asp.net en Firefox</title><content type="html">Para deshabilitar la cache de una página asp.net podemos hacerlo de diversas formas, desde IIS (indicando que la página caduque inmediatamente), añadiendo metas a las cabeceras de la pagina e inclucuso podemos hacerlo también desde código con esta instrucción:
&lt;span style="font-weight: bold;"&gt;HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);&lt;/span&gt;
Después de probar las diversas técnicas he descubierto que no todas funcionan con todos los navegadores (en esta ocasión es Firefox quien pone la nota discordante), asi que para conseguir deshabilitar la cache para una página concreta lo mejar sera añadir etiquetas META.
La siguiente función muestro como añadir las etiquetas desde código.

&lt;span style="font-weight: bold;"&gt;public void DeshabilitarCache()&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;        {&lt;/span&gt;

&lt;span style="font-weight: bold;"&gt;            Response.ClearHeaders();&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            Response.AppendHeader("Cache-Control", "no-cache");&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            Response.AppendHeader("Cache-Control", "private");&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            Response.AppendHeader("Cache-Control", "no-store");&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            Response.AppendHeader("Cache-Control", "must-revalidate");&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            Response.AppendHeader("Cache-Control", "max-stale=0");&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            Response.AppendHeader("Cache-Control", "post-check=0");&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            Response.AppendHeader("Cache-Control", "pre-check=0");&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            Response.AppendHeader("Pragma", "no-cache");&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            Response.AppendHeader("Keep-Alive", "timeout=3, max=993");&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT");&lt;/span&gt;

&lt;span style="font-weight: bold;"&gt;        } &lt;/span&gt;


&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-2410931729421377608?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RbI6u3qp8_oXE0oK-bKgv4ZHKmA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RbI6u3qp8_oXE0oK-bKgv4ZHKmA/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/RbI6u3qp8_oXE0oK-bKgv4ZHKmA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RbI6u3qp8_oXE0oK-bKgv4ZHKmA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/hpSnpnd3wwA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/2410931729421377608/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=2410931729421377608" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/2410931729421377608?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/2410931729421377608?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/hpSnpnd3wwA/deshabilitar-la-cache-de-una-pagina.html" title="Deshabilitar la cache de una pagina asp.net en Firefox" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/07/deshabilitar-la-cache-de-una-pagina.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MCQHk_cCp7ImA9WxJbEEQ.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-3468488649868159858</id><published>2009-07-20T04:57:00.000-07:00</published><updated>2009-07-20T05:04:21.748-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-20T05:04:21.748-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DropDownList" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="Linq" /><title>Ordenar un Dropdownlist con Linq</title><content type="html">El siguiente codigo muestra una función que sirve para ordenar un Combo utilizando,
como campo de ordenación el texto que se muestra en cada uno de los items.

&lt;span style="font-weight: bold;"&gt;

&lt;span style="color: rgb(0, 102, 0);"&gt;///Funcion que ordena los elementos de un Dropdownlist&lt;/span&gt;
protected void OrdenarDropDownList(DropDownList drp)&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;        {&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            drp.DataSource = drp.Items.Cast&lt;listitem&gt;()&lt;/listitem&gt;&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            .OrderBy(o =&gt; o.Text)&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            .ToList();&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;            drp.DataBind();&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;        }

&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-3468488649868159858?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iy5mYvLbfllUlVmrEmloqscWaQE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iy5mYvLbfllUlVmrEmloqscWaQE/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/iy5mYvLbfllUlVmrEmloqscWaQE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iy5mYvLbfllUlVmrEmloqscWaQE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/5xV_X37HC78" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/3468488649868159858/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=3468488649868159858" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/3468488649868159858?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/3468488649868159858?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/5xV_X37HC78/ordenar-un-dropdownlist-con-linq.html" title="Ordenar un Dropdownlist con Linq" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/07/ordenar-un-dropdownlist-con-linq.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IBRXszcSp7ImA9WxJWGU8.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-7998583107072072144</id><published>2009-06-25T03:05:00.000-07:00</published><updated>2009-06-25T03:25:54.589-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-25T03:25:54.589-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="validadores" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><title>Comprobar si una página es válida desde javascript</title><content type="html">En el siguiente post veremos como usando los controles de validación de asp.net se puede comprobar desde javascript si la pagina es valida o no.
Esto puede ser útil para para mostrar u ocultar información en función del resultado de la validación.
Para hacer la comprobación solo tendremos que añadir el siguiente codigo en una funcion javascript

&lt;span style="color: rgb(0, 102, 0);"&gt;//nombre del grupo de validadores que queremos comprobar&lt;/span&gt;
&lt;span style="color: rgb(0, 102, 0);"&gt;//en caso de dejarlo en blanco se comprueba la pagina entera&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;var validationGroupName = "";&lt;/span&gt;

&lt;span style="font-weight: bold;"&gt;if (typeof(Page_ClientValidate) == 'function')&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;{&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;var validationResult = Page_ClientValidate(validationGroupName);&lt;/span&gt;

&lt;span style="font-weight: bold;"&gt;if (validationResult == true)&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;{&lt;/span&gt;
&lt;span style="color: rgb(0, 102, 0);"&gt;//Cuando entramos aqui, sabemos que la página o el los controles pertenecientes&lt;/span&gt;
&lt;span style="color: rgb(0, 102, 0);"&gt;//al grupo de validación seleccionado son válidos&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;}&lt;/span&gt;
&lt;span style="font-weight: bold;"&gt;}&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-7998583107072072144?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/amHPJejVODeTo2qwH5LuuG6fbpc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/amHPJejVODeTo2qwH5LuuG6fbpc/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/amHPJejVODeTo2qwH5LuuG6fbpc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/amHPJejVODeTo2qwH5LuuG6fbpc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/_wa-A8QujXk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/7998583107072072144/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=7998583107072072144" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/7998583107072072144?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/7998583107072072144?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/_wa-A8QujXk/comprobar-si-una-pagina-es-valida-desde.html" title="Comprobar si una página es válida desde javascript" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/06/comprobar-si-una-pagina-es-valida-desde.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUADQHY_cSp7ImA9WxJXEk0.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-3239856282518123174</id><published>2009-05-28T23:39:00.000-07:00</published><updated>2009-06-05T05:09:31.849-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-05T05:09:31.849-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><title>Recorrer los nodos de un TreeView control desde javascript</title><content type="html">Hace unos dias me surgio la necesidad de trabajar con el control treeview, mas concretamente he tenido que realizar una busqueda sobre sus nodos. Para llevar a cabo esta tarea tenia que recorrer todo el arbol y comprobar si el valor de alguno de los nodos coincidia con el texto que un usuario introduciria en una caja de texto.
Esta tarea me ha llevado a investigar mas profundamente el control Treeview, es un cotrol  digamos... diferente.
Para recorrer el control primero de todo he tenido que fijarme en el html que se genera, este esta compuesto por capas y tablas.
Un nodo es una tabla con una fila y dentro de esas filas celdas, que correspoden con la imagen de expandir colarpsar, la imagen que el nodo tenga y el nombre o texto del nodo.
Si este nodo tiene nodos hijos, estos iran dentro de una tabla cada uno de ellos y todos ellos dentro de una etiqueta &lt;div&gt; que por identificador tendra el del nodo padre más un el sufijo "Nodes".
Basandonos en esto el código seria el siguiente:

&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;           &lt;span style="color: rgb(51, 204, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;//obtención de la cadena a buscar&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;
            var keysrch = $get('&lt;%=txtBuscar.ClientID %&gt;').value; 
            &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="font-size:85%;"&gt;//obtencion del objeto Treeview       &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt; 
            var tree = document.getElementById('&lt;%=arbolListines.ClientID%&gt;');                        
            if(keysrch != '')
            {               
                &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="font-size:85%;"&gt;//obtencion de todas las tablas que hay dentro del control&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;
                var tables = tree.getElementsByTagName('table'); 
                if(tables)
                {
                    for (var i = 0, j = tables.length; i &lt; j; i++)
                    {
                       &lt;span style="color: rgb(0, 153, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;//dentro de cada tabla accedemos a los enlaces que esta continen&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;                        links = tables[i].getElementsByTagName('a');
                        if(links)
                        {
                            for (var x = 0, y = links.length; x &lt; y; x++)
                            {
                                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;//si el primer nodo no es una imagen significa que no es ni el icono +/-&lt;/span&gt;
&lt;span style="color: rgb(0, 153, 0);"&gt;                                //tampoco es la imagen que hemos asociado a nuestro nodo, con lo que ya hemos&lt;/span&gt;
&lt;span style="color: rgb(0, 153, 0);"&gt;                                //llegado a la posición en la que se encuentra el texto que es lo que nos interesa&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;                                if(links[x].firstChild.nodeName.toLowerCase() !='img')
                                {       
                                                            
                                   &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:85%;"&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;// procesamos el texto&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="font-size:85%;"&gt; para buscar si la cadena que de búsqueda esta dentro del nombre del nodo&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;
                                    var result = links[x].innerHTML.toLowerCase().indexOf(keysrch);    
                                                                                
                                    if (result != -1)
                                    {
                                       
                                        &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="font-size:85%;"&gt;//hemos encontrado el nodo que buscabamos&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="font-size:85%;"&gt;                                        //procesar.....&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;
                                       
                                       
                                    }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="font-size:85%;"&gt;//fin del if que comprueba que estemos buscando solo en el enlace que contiene el nombre&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;
                                }
                            }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="font-size:85%;"&gt;//fin del bucle for que recorre todos los enlaces de cadad nodo&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;
                        }
                    }&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;span style="font-size:85%;"&gt;//fin del bucle for que recorre las tablas que genera el control treeview en HTML&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:85%;"&gt;
                  
                }&lt;/span&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-3239856282518123174?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VJZpLP0JLXeh_VuweAZ8iwHu9sg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VJZpLP0JLXeh_VuweAZ8iwHu9sg/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/VJZpLP0JLXeh_VuweAZ8iwHu9sg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VJZpLP0JLXeh_VuweAZ8iwHu9sg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/LDc0x7OQJHw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/3239856282518123174/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=3239856282518123174" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/3239856282518123174?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/3239856282518123174?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/LDc0x7OQJHw/recorrer-los-nodos-de-un-treeview.html" title="Recorrer los nodos de un TreeView control desde javascript" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/05/recorrer-los-nodos-de-un-treeview.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04NQX4yeCp7ImA9WxJRGEw.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-7574022905505875467</id><published>2009-05-20T03:19:00.000-07:00</published><updated>2009-05-20T03:39:50.090-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-20T03:39:50.090-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".net" /><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><title>Cachear imagenes creadas en un HttpHandler</title><content type="html">Existen varias maneras de mejorar el rendimiento de una aplicación web, una de las más importantes es el cacheo de datos y más concretamente, cachear imagenes.
Existen algunos escenarios en los cuales conseguir cachear los datos no es trivial, uno de ellos es cuando tenemos una imagen almacenada en una base de datos en formato &lt;a href="http://en.wikipedia.org/wiki/Binary_large_object"&gt;BLOB&lt;/a&gt;, en este casi si queremos mostrar la imagen en nuestra web, una manera de hacerlo es creando un Controlador genérico (.ashx). Si hacemos esto deberemos manejar manualmente el cacheo de imagenes.
El siguiente fragmento de código muestra como habilitar la cache:

&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cjreyero%5CCONFIG%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:595.3pt 841.9pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:35.4pt; 	mso-footer-margin:35.4pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;color:green;"   &gt;//creacion de un objeto TimeSpan que va a indicar la duración de la cache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;TimeSpan&lt;/span&gt; freshness = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;TimeSpan&lt;/span&gt;(0, 0, 10, 0);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;&lt;/span&gt;&lt;span style="color:green;"&gt;//se configura el tiempo de expiración de la cache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"   lang="EN-GB"&gt;context.Response.Cache.SetExpires(&lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;.Now.Add(freshness));&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;div&gt;  &lt;/div&gt;&lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"   lang="EN-GB"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;color:green;"   &gt;//configuracion del ámbito de la cache&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"   lang="EN-GB"&gt;context.Response.Cache.SetCacheability(&lt;span style="color: rgb(43, 145, 175);"&gt;HttpCacheability&lt;/span&gt;.Public);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"   lang="EN-GB"&gt;&lt;span style=""&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;context.Response.Cache.SetValidUntilExpires(&lt;span style="color:blue;"&gt;false&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;
&lt;/p&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;
&lt;span style=";font-family:&amp;quot;;font-size:10;"  &gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: left;"&gt;Posteriormente se se envia la salida de la imagen&lt;/p&gt;&lt;p style="text-align: left;"&gt;
&lt;/p&gt;&lt;p style="text-align: left;" class="MsoNormal"&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cjreyero%5CCONFIG%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:hyphenationzone&gt;21&lt;/w:HyphenationZone&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} @page Section1 	{size:595.3pt 841.9pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:35.4pt; 	mso-footer-margin:35.4pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabla normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;/p&gt;&lt;p class="MsoNormal" style=""&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"   lang="EN-GB"&gt;context.Response.ContentType = &lt;span style="color: rgb(163, 21, 21);"&gt;"image/gif"&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin: 0cm -69.8pt 0.0001pt -45.6pt; text-indent: 45.6pt;"&gt;&lt;span style=";font-family:&amp;quot;;font-size:10;"   lang="EN-GB"&gt;context.Response.OutputStream.Write(buffer, 0, buffer.Length);&lt;/span&gt;&lt;span style="" lang="EN-GB"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-7574022905505875467?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/L8ARIRPUNvtmpnhaEkBnpy2-H1Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L8ARIRPUNvtmpnhaEkBnpy2-H1Q/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/L8ARIRPUNvtmpnhaEkBnpy2-H1Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L8ARIRPUNvtmpnhaEkBnpy2-H1Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/XtXac63jPJ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/7574022905505875467/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=7574022905505875467" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/7574022905505875467?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/7574022905505875467?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/XtXac63jPJ0/cachear-imagenes-creadas-en-un.html" title="Cachear imagenes creadas en un HttpHandler" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/05/cachear-imagenes-creadas-en-un.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4AQH06eip7ImA9WxJRF04.&quot;"><id>tag:blogger.com,1999:blog-3005105701248875102.post-7557570125603293686</id><published>2009-05-19T03:49:00.000-07:00</published><updated>2009-05-19T04:02:21.312-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-19T04:02:21.312-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="asp.net" /><category scheme="http://www.blogger.com/atom/ns#" term="ajax" /><category scheme="http://www.blogger.com/atom/ns#" term="c#" /><title>Como saber si si ha ocurrido un Postback Asíncrono Parcial</title><content type="html">Con la llegada Ajax debemos tener en cuenta que actualmente existen dos tipos de Postback, uno podriamos llamarlo Full Postback, en él se recarga toda la página. Con ajax surge el concepto de Partial Postback, es una ida al servidor que solo actualiza una parte de la página.
En ocasiones puede ser interesante para el control de nuestras aplicaciones si un Postaback ha sido parcial o total, para ello tendremos que obtener una instancia del ScriptManager de nuestra página a traves del método &lt;span style="font-weight: bold;"&gt;GetCurrent &lt;/span&gt;y comprobando el valor de la propiedad &lt;b&gt;IsInAsyncPostBack.
&lt;/b&gt;A continuación podemos ver un ejemplo&lt;b&gt;:

&lt;/b&gt;&lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: rgb(43, 145, 175);"&gt;EventArgs&lt;/span&gt; e) &lt;p style="margin: 0px;"&gt;    {&lt;/p&gt; &lt;p style="margin: 0px;"&gt;        &lt;span style="color: blue;"&gt;if&lt;/span&gt; (Page.IsPostBack)&lt;/p&gt; &lt;p style="margin: 0px;"&gt;        {&lt;/p&gt; &lt;p style="margin: 0px;"&gt;            &lt;span style="color: green;"&gt;//Se obtiene comprueba la propiedad IsInAsyncPostBack&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px;"&gt;            &lt;span style="color: blue;"&gt;if&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;ScriptManager&lt;/span&gt;.GetCurrent(&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Page).IsInAsyncPostBack)&lt;/p&gt; &lt;p style="margin: 0px;"&gt;            {&lt;/p&gt; &lt;p style="margin: 0px;"&gt;                &lt;span style="color: green;"&gt;// TODO logica para una recarga parcial
&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px;"&gt;&lt;span style="color: green;"&gt;
&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px;"&gt;            }&lt;/p&gt; &lt;p style="margin: 0px;"&gt;            &lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;/p&gt; &lt;p style="margin: 0px;"&gt;            {&lt;/p&gt;  &lt;p style="margin: 0px;"&gt;                &lt;span style="color: green;"&gt;&lt;/span&gt; &lt;span style="color: green;"&gt;//logica para un postback total&lt;/span&gt;               
&lt;/p&gt; &lt;p style="margin: 0px;"&gt;            }&lt;/p&gt; &lt;p style="margin: 0px;"&gt;        }&lt;/p&gt; &lt;p style="margin: 0px;"&gt;    }&lt;/p&gt;
&lt;b&gt;
&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3005105701248875102-7557570125603293686?l=irokhes.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DOtUrnzvaqs1wZTMygGz0q7Uxxc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DOtUrnzvaqs1wZTMygGz0q7Uxxc/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/DOtUrnzvaqs1wZTMygGz0q7Uxxc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DOtUrnzvaqs1wZTMygGz0q7Uxxc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/MeOJy/~4/lf-ByhUq6mQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://irokhes.blogspot.com/feeds/7557570125603293686/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=3005105701248875102&amp;postID=7557570125603293686" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/7557570125603293686?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3005105701248875102/posts/default/7557570125603293686?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/MeOJy/~3/lf-ByhUq6mQ/como-saber-si-si-ha-ocurrido-un.html" title="Como saber si si ha ocurrido un Postback Asíncrono Parcial" /><author><name>irokhes</name><uri>http://www.blogger.com/profile/16861610581050372375</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="24" height="32" src="http://3.bp.blogspot.com/_3RA7eNR3uw0/SxeXnRF4gbI/AAAAAAAAAC4/vsYlhWJhNoU/S220/JorgeFoto.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://irokhes.blogspot.com/2009/05/como-saber-si-si-ha-ocurrido-un.html</feedburner:origLink></entry></feed>

