<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>fboiton&#039;s blog &#187; asp.net</title>
	<atom:link href="http://www.fboiton.com/tag/asp-net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.fboiton.com</link>
	<description>Blog Técnico y personal: Ideas, Guias, Tutoriales, Comentarios, Pensamientos, Entre otros.</description>
	<lastBuildDate>Sun, 05 Feb 2012 22:01:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Instalando un sitio MVC 2 en IIS 7.0</title>
		<link>http://www.fboiton.com/instalando-un-sitio-mvc-2-en-iis-7-0</link>
		<comments>http://www.fboiton.com/instalando-un-sitio-mvc-2-en-iis-7-0#comments</comments>
		<pubDate>Thu, 09 Sep 2010 15:56:15 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[asp.net 4.0]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[MVC 2]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/instalando-un-sitio-mvc-2-en-iis-7-0</guid>
		<description><![CDATA[Es buena idea siempre tener presente los pasos y sobre todo los detalles al momento de instalar en nuestro IIS 7.0 un website, sobre todo si estamos instalando un sitio MVC. Registrar la .Net Framework Esta es una operación sencilla &#8230; <a href="http://www.fboiton.com/instalando-un-sitio-mvc-2-en-iis-7-0">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Es buena idea siempre tener presente los pasos y sobre todo los detalles al momento de instalar en nuestro IIS 7.0 un website, sobre todo si estamos instalando un sitio MVC. </p>
<h2>Registrar la .Net Framework</h2>
<p>Esta es una operación sencilla para la cual tomaré como referencia una pregunta de <a href="http://stackoverflow.com">stackoverflow.com</a> que pueden ver en este link:</p>
<p><a href="http://stackoverflow.com/questions/647598/how-to-register-asp-net-2-0-to-web-serveriis7">http://stackoverflow.com/questions/647598/how-to-register-asp-net-2-0-to-web-serveriis7</a></p>
<p>Podemos utilizar también Web Platform Installer segun se detalla en el siguiente punto: Instalar MVC 2.0</p>
<p>La opción más conocida es utilizar “aspnet.regiis.exe” el cual se encuentra en el path de la framework que estemos utilizando, por ejemplo para registrar la .Net Framework 2.0 en iis podemos utilizar:</p>
<pre><code>C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe –ir</code></pre>
<p><code></code></p>
</p>
<p>Cabe mencionar que la Framework 3.5 para ser utilizada en un website registramos la Framework 2.0 y en nuestro web.config referenciamos los assembly de la framework 3.5. Usualmente Visual Studio realiza esta configuracion por nosotros siempre y cuando la “targeting platform” sea la framework 3.5.</p>
<h2>Instalar MVC 2</h2>
<p>Para instalar MVC 2.0 es recomendable utilizar <a href="http://www.iis.net/webpi">Microsoft Web Platform Installer</a> , una vez lo tenemos instalado en nuestro IIS Manager seleccionamos el sitio web y buscamos el ícono de Web Platform Installer</p>
<p><a href="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_thumb.png" width="173" height="122"/></a> </p>
<p>Luego dentro de “Web Platform” seleccionamos la opción “Customize” dentro de “Frameworks and Runtimes” </p>
<p><a href="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_thumb_3.png" width="335" height="181"/></a> </p>
<p>Finalmente marcamos dentro de las opciones de “.NET Framework” lo que necesitamos (en este caso ASP.NET MVC 2)</p>
<p><a href="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_thumb_4.png" width="244" height="129"/></a> </p>
<h2>Configurar el Website.</h2>
<p>Para comenzar podemos dar click derecho en el folder “Sites” de nuestro server dentro del IIS Manager y seleccionar la opción “Add Web Site…”</p>
<p><a href="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_5.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_thumb_5.png" width="244" height="129"/></a> </p>
<p>Luego en el formulario de configuracion definimos el nombre del sitio, la ubicación de los archivos, la dirección IP a donde llegarán los requests y el nombre de dominio que utilizaremos.</p>
<p><a href="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_thumb_6.png" width="319" height="308"/></a> </p>
<h2>Crear un “Wildcard Script Map” para MVC</h2>
<p>Para esto seleccionamos el sitio web en nuestro IIS Manager y damos doble click en el ícono de “Handler Mappings”</p>
<p><a href="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_thumb_7.png" width="92" height="99"/></a> </p>
<p>Luego seleccionamos “Add Wildcard Script Map…” dentro del menú de acciones</p>
<p><a href="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_8.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_thumb_8.png" width="194" height="105"/></a> </p>
<p>y llenamos el form como se muestra a continuación… </p>
<p>Se recomienda utilizar el mismo Ejecutable que se tiene para el script map de “PageHandlerFactory”. Ojo, en el caso de que su sistema operativo sea 64 bit el path cambia. Por ejemplo:</p>
<p>Si el path donde tenemos instalada nuestra framework (32bit) es <em>C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll</em> podemos utilizar para 64bit el path <em>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll</em></p>
<p><a href="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_9.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_thumb_9.png" width="387" height="317"/></a> </p>
<p>Me atrevo a decir, que si tenemos dos script map para PageHandlerFactory como se muestra en la siguiente imagen:</p>
<p><a href="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_10.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_thumb_10.png" width="281" height="39"/></a> </p>
<p>seguramente necesitaremos crear dos wildcard script map para MVC</p>
<p><a href="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_11.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/InstalandounsitioMVC2.0enIIS7.0_82C4/image_thumb_11.png" width="331" height="56"/></a> </p>
<p>La creación de este wildcard script map es importante ya que MVC necesita que a los requests les sean aplicados los ruteos de nuestra aplicación.</p>
<h2>Publicar Los Archivos de nuestro Website</h2>
<p>“Para gustos se rompen generos” dicen por allí, asi que cada quien queda en libertad de seleccionar cuál es su forma preferida para colocar los archivos dentro del path definido al configurar nuestro sitio web, copiando los archivos, haciendo deploy con visual studio, etc…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/instalando-un-sitio-mvc-2-en-iis-7-0/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TryParse? Convert? &#8230; mejor &#8220;Maybe&#8221;</title>
		<link>http://www.fboiton.com/tryparse-convert-mejor-maybe</link>
		<comments>http://www.fboiton.com/tryparse-convert-mejor-maybe#comments</comments>
		<pubDate>Wed, 04 Aug 2010 02:09:00 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[codeplex]]></category>
		<category><![CDATA[codign]]></category>
		<category><![CDATA[practices]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/tryparse-convert-mejor-maybe</guid>
		<description><![CDATA[Revisando el MSDN Flash del 2 de agosto me topé con un artículo que me llamó la atención “TryParse vs. Convert” el cual es el planteamiento de la opinion personal de @kodefuguru. Dicho planteamiento me pareció bastante acertado y la &#8230; <a href="http://www.fboiton.com/tryparse-convert-mejor-maybe">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Revisando el MSDN Flash del 2 de agosto me topé con un artículo que me llamó la atención “<a href="http://www.kodefuguru.com/post/2010/06/24/TryParse-vs-Convert.aspx" target="_blank">TryParse vs. Convert</a>” el cual es el planteamiento de la opinion personal de <a href="http://twitter.com/kodefuguru" target="_blank">@kodefuguru</a>. Dicho planteamiento me pareció bastante acertado y la propuesta de utilizar una opción simple y declarativa envolviendo el uso de los “TryParse” en una nueva libreria como una buena práctica lo considero aconsejable.</p>
<p>La opción planteada es el uso de una clase “<a href="http://kodefu.codeplex.com/SourceControl/changeset/view/60306#1234126" target="_blank">Maybe</a>” la cual se puede descargar de <a href="http://kodefu.codeplex.com/SourceControl/changeset/view/60306#1234126" target="_blank">codeplex</a> la cual contiene los métodos para convertir cadenas de caracteres a Entero, Boolean, Byte, etc., asi:</p>
<p><a href="http://www.fboiton.com/images/TryParseConvertmejorMaybe_9E36/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/TryParseConvertmejorMaybe_9E36/image_thumb.png" width="640" height="152"/></a> </p>
<p>Con esto evitamos el lidiar con las excepciones por cadenas con contenido “no convertible” con los “Convert” y tampoco agregamos sentencias condicionales, segun pienso innecesarias y que generan código repetido, por el uso del TryParse.</p>
<p>Una buena práctica que espero les sirva!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/tryparse-convert-mejor-maybe/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Psake : Herramienta de automatización para nuestros builds.</title>
		<link>http://www.fboiton.com/psake-herramienta-de-automatizacin-para-nuestros-builds</link>
		<comments>http://www.fboiton.com/psake-herramienta-de-automatizacin-para-nuestros-builds#comments</comments>
		<pubDate>Thu, 15 Jul 2010 18:52:28 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[build script]]></category>
		<category><![CDATA[msbuild]]></category>
		<category><![CDATA[psake]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/psake-herramienta-de-automatizacin-para-nuestros-builds</guid>
		<description><![CDATA[psake es una herramienta de automatización de Builds escrita en PowerShell. Con similitudes a rake y bake y características de extensibilidad por estar hecho en PowerShell es una buena recomendación para crear nuestras Tareas interdependientes de compilación. Podemos descargarlo directamente &#8230; <a href="http://www.fboiton.com/psake-herramienta-de-automatizacin-para-nuestros-builds">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://wiki.github.com/JamesKovacs/psake/what-is-psake" target="_blank">psake</a> es una herramienta de automatización de Builds escrita en PowerShell. Con similitudes a rake y bake y características de extensibilidad por estar hecho en PowerShell es una buena recomendación para crear nuestras Tareas interdependientes de compilación.</p>
<p>Podemos descargarlo directamente de <a href="http://wiki.github.com/JamesKovacs/psake/where-can-i-get-psake" target="_blank">GitHub</a> y para instalarlo tenemos 2 formas:</p>
<p><strong>Importar el módulo en PowerShell e invocarlo directamente</strong></p>
<p>Esto lo realizamos con las lineas:</p>
<p>
<pre>Import-Module .\psake.psm1
Invoke-psake .\default.ps1
</pre>
</p>
<p>Debemos estar seguro que la execution policy nos permitirá ejecutar el módulo para ello podemos utilizar el comando de PowerShell</p>
<pre>get-executionpolicy</pre>
<p>y en caso necesitemos modificarlo, la sugerencia es establecer la policy “remotesigned”</p>
<pre>set-executionpolicy remotesigned</pre>
<p><strong>Ejecutar el script de PowerShel psake.ps1</strong></p>
<pre># call the psake.ps1 file directly
.\psake.ps1 .\default.ps1
</pre>
<p>Ejemplo de un script de psake</p>
<p><a href="http://www.fboiton.com/images/PsakeHerramientadeautomatizacinparanues_8A0D/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/PsakeHerramientadeautomatizacinparanues_8A0D/image_thumb.png" width="244" height="178"/></a></p>
<p>Algunos puntos clave</p>
<ul>
<li>Todo comienza con la task de nombre “Default”
</li>
<li>Es sugerible trabajar siempre con paths absolutos y para ello podemos apoyarnos en los comandos de PowerShell, por ejemplo: <a href="http://technet.microsoft.com/en-us/library/dd315377.aspx" target="_blank">Split-Path</a> en la función “Properties” que podemos observar en la <a href="http://wiki.github.com/JamesKovacs/psake/what-is-the-structure-of-a-psake-build-script" target="_blank">documentacion de la estructura de un script psake</a>
</li>
<li>Tenemos a disposición la gama de comandos de PowerShell y por ende la capacidad de extender nuestros build scripts, acá algunos links de referencia:
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/ms714415(v=VS.85).aspx" target="_blank">Starting Windows PowerShell</a>
</li>
<li><a href="http://msdn.microsoft.com/en-us/library/ms714409(v=VS.85).aspx" target="_blank">Using Windows PowerShell</a></li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/psake-herramienta-de-automatizacin-para-nuestros-builds/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Incursionando con RavenDB: Crear un Indice y Realizar una Consulta</title>
		<link>http://www.fboiton.com/incursionando-con-ravendb-crear-un-indice-y-realizar-una-consulta</link>
		<comments>http://www.fboiton.com/incursionando-con-ravendb-crear-un-indice-y-realizar-una-consulta#comments</comments>
		<pubDate>Thu, 08 Jul 2010 17:53:45 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[ravendb]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/incursionando-con-ravendb-crear-un-indice-y-realizar-una-consulta</guid>
		<description><![CDATA[Luego de instalar y agregar documentos en nuestro RavenDB, continuamos con la interacción llegando ahora a la búsqueda de documentos. Tomando como base el mismo proyecto ejemplo del post Incursionando con RavenDB: Características, instalación y nuestro primer documento… nos vamos &#8230; <a href="http://www.fboiton.com/incursionando-con-ravendb-crear-un-indice-y-realizar-una-consulta">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Luego de instalar y agregar documentos en nuestro RavenDB, continuamos con la interacción llegando ahora a la búsqueda de documentos. Tomando como base el mismo proyecto ejemplo del post <a href="http://www.fboiton.com/ravendb-caracteristicas-instalacion-y-nuestro-primer-documento" target="_blank">Incursionando con RavenDB: Características, instalación y nuestro primer documento…</a> nos vamos a nuestra interfaz web del servidor RavenDB. Anticipadamente agregué algunos documentos extras</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_thumb.png" width="640" height="118"/></a> </p>
<p>Antes de Realizar una Consulta vamos a crear un Indice, para ello utilizamos la intefaz web en la opción “indexes”</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_thumb_3.png" width="244" height="38"/></a> </p>
<p>Luego utilizamos la opción “Create New Index”</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_thumb_4.png" width="244" height="107"/></a> </p>
<p>al ver el formulario de creación</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_5.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_thumb_5.png" width="446" height="373"/></a> </p>
<p>llenamos estos campos :</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_thumb_6.png" width="526" height="176"/></a> </p>
<p>Por el momento las opciones de “Reduce” y personalización del índice no las utilizaremos.</p>
</p>
</p>
<p>Una vez creado el índice nos vamos a nuestro proyecto (el mismo del post anterior) y vamos a crear el método de búsqueda</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_7.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_thumb_7.png" width="461" height="153"/></a> </p>
<p>Nos concentramos en la sentencia donde le decimos a la sesión que haremos una consulta de clientes sobre el índice “ClientsByName” que creamos previamente en nuestra RavenDB</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_8.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_thumb_8.png" width="593" height="68"/></a> </p>
<p>Podemos darnos cuenta que “Query&lt;Client&gt;(string indexName)” es un “IRavenQueryable&lt;Client&gt;” con lo que podemos armar una expresión Linq, por lo que para efectos de prueba tenemos un “FirstOrDefault” </p>
<p>Una vez listo nuestro método lo utilizamos desde nuestra console application:</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_9.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_thumb_9.png" width="459" height="78"/></a> </p>
<p>y al ejecutarla tenemos la salida:</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_10.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/IncursionandoconRavenDBCrearunIndiceyRea_8FA2/image_thumb_10.png" width="509" height="57"/></a> </p>
<p>Y para que puedan probarlo, aca esta el <a href="http://www.fboiton.com/ClientsDirectory_v2.rar" target="_blank">codigo fuente</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/incursionando-con-ravendb-crear-un-indice-y-realizar-una-consulta/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C#: Objetos son por referencia…</title>
		<link>http://www.fboiton.com/c-sharp-objetos-son-por-referencia</link>
		<comments>http://www.fboiton.com/c-sharp-objetos-son-por-referencia#comments</comments>
		<pubDate>Fri, 02 Jul 2010 19:26:05 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[software design]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/?p=34</guid>
		<description><![CDATA[Varias veces se que hemos instanciado objetos por todos lados, y es más… cuántas veces hemos creado métodos donde recibimos un objeto, lo manipulamos y al final lo retornamos&#160; para asignarlo nuevamente a la variable que originalmente enviamos a método… &#8230; <a href="http://www.fboiton.com/c-sharp-objetos-son-por-referencia">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Varias veces se que hemos instanciado objetos por todos lados, y es más… cuántas veces hemos creado métodos donde recibimos un objeto, lo manipulamos y al final lo retornamos&#160; para asignarlo nuevamente a la variable que originalmente enviamos a método… uff! hasta yo mismo creo que me enredé….</p>
<p>A ver… C# nos dice que LAS CLASS INTANCES SON POR REFERENCIA MIENTRAS QUE LAS STRUCT INSTANCES(struct, enum, int, bool, chars… ) SON POR VALOR.</p>
<p>No voy a adentrarme esta vez en lo que implica el último párrafo con relación al uso de memoria o las struct instances y me enfocaré esta vez al título de este post: “C#: Objetos son por referencia…” con una pequeña Console Application.</p>
<p>Partimos de una clase que en si misma tendrá algunas properties y la responsabilidad de instanciarse a partir de un set de datos.</p>
<p><a href="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_thumb.png" width="571" height="241" /></a> </p>
<p>Adicionalmente, para efectos de ejemplo, utilizaré un pequeño contenedor con una Lista Generica de Objetos “MyClass” la cual comenzamos así:</p>
<p><a href="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_3.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_thumb_3.png" width="494" height="249" /></a> </p>
<p>Luego en nos vamos a nuestra console application, en donde primero creamos 2 instancias, es decir, tendremos 2 variables que apuntan a 2 objetos diferentes:</p>
<p><a href="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_thumb_4.png" width="602" height="51" /></a> </p>
<p>Cada una de las variables únicamente son apuntadores a los objetos. Con esto, cuando los enviamos como parámetros al método “AddAnMarkAsSaved”, dicho método estará modificando uno a uno y agregando dicha referencia a la Lista Genérica del Contenedor.</p>
<p><a href="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_5.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_thumb_5.png" width="632" height="229" /></a> </p>
<p>A este punto al ejecutar nuestra aplicación de ejemplo tenemos esta salida:</p>
<p><a href="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_6.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_thumb_6.png" width="587" height="106" /></a> </p>
<p>Una vez instanciado un objeto, las diferentes referencias que podamos tener al mismo, nos permitirán accesarlo, ojo… esto implica modificarlo… así que si pasamos por alto esto, podemos llegar a modificar “inconscientemente” el estado de un objeto cambiando lo que en nuestra aplicación realmente necesitamos.</p>
<p>Ohhh… Y entonces esto quiere decir que si extraigo el objeto de la lista que está en el contenedor y lo modifico, estoy cambiando el mismo objeto referenciado por las primeras variables?¿?¿?&#160; </p>
<p>Respuesta: SI!</p>
<p>Veamoslo en código, primero agreguemos a nuestro contenedor el método que nos retorne un objeto MyClass por su Id:</p>
<p><a href="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_thumb_7.png" width="484" height="76" /></a> </p>
<p>Luego, si obtenemos de la lista el objeto cuyo Id sea el mismo que el objeto que referencia la variable “one” y le modificamos su “Comment” :</p>
<p><a href="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_8.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_thumb_8.png" width="477" height="53" /></a> </p>
<p>Sorpresa! accesando al objeto con las variables “one” y “objectFromContainer” </p>
<p><a href="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_9.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_thumb_9.png" width="538" height="158" /></a> </p>
<p>en ambos casos obtendremos el mismo “Comment”… Aca la salida de nuestro programa:</p>
<p><a href="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_10.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.fboiton.com/images/CObjetossonporreferencia_A5DB/image_thumb_10.png" width="625" height="175" /></a> </p>
<p>En resumen, cada vez que asignamos una variable donde hayamos instanciado un objeto a otra variable, o la pasamos como parametro a un método, lo que estamos haciendo realmente es <strong>ENVIAR UNA REFERENCIA</strong> a donde se encuentra el objeto en memoria. Es un juego de apuntadores donde podemos llegar a caer en problemas serios en nuestras aplicaciones si descuidamos este tema <img src='http://www.fboiton.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Acá el link a la MSDN Library por si desean adentrarse un poco mas en este tema:</p>
<p><a href="http://msdn.microsoft.com/en-us/library/ms173110." target="_blank">Objects (C# Programming Guide)</a></p>
<p>En este URL el <a href="http://www.fboiton.com/code-samples/ObjectsByReference.zip" target="_blank">código del ejemplo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/c-sharp-objetos-son-por-referencia/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizando las clases Uri y HTTPUtility para obtener los elementos de una URL</title>
		<link>http://www.fboiton.com/utilizando-las-clases-uri-y-httputility-para-obtener-los-elementos-de-una-url</link>
		<comments>http://www.fboiton.com/utilizando-las-clases-uri-y-httputility-para-obtener-los-elementos-de-una-url#comments</comments>
		<pubDate>Thu, 24 Jun 2010 18:49:25 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[practices]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/?p=33</guid>
		<description><![CDATA[Recuerdo los tiempos cuando para obtener algunos elementos de una URL como el nombre del Archivo o el Query String trabajabamos manipulador de cadenas que separaba por “/”, “?”…. y bueno, olvidemos eso. La .NET Framework nos provee 2 herramientas &#8230; <a href="http://www.fboiton.com/utilizando-las-clases-uri-y-httputility-para-obtener-los-elementos-de-una-url">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Recuerdo los tiempos cuando para obtener algunos elementos de una URL como el nombre del Archivo o el Query String trabajabamos manipulador de cadenas que separaba por “/”, “?”…. y bueno, olvidemos eso.</p>
<p>La .NET Framework nos provee 2 herramientas <em>Uri</em> y el método <em>ParseQueryString </em>de la&#160; <em>HttpUtility</em> cuyos detalles de documentación se encuentran acá:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/system.web.httputility.parsequerystring.aspx">HttpUtility.ParseQueryString Method</a> </li>
<li><a href="http://msdn.microsoft.com/en-us/library/system.uri.aspx">Uri Class</a> </li>
</ul>
<p>Demos una vista a la Uri Class, para esta clase debemos tener el namespace <em>System</em> incluido en nuestra clase. Luego de instanciarla pasando con el constructor el URL con el que vamos a trabajar, tenemos ya las diferentes partes accesibles por medio de atributos del objeto.</p>
<p> <code>
<p>&#160;&#160;&#160; var uri = new Uri(url);      <br />&#160;&#160;&#160; Debug.Write(uri.AbsolutePath);       <br />&#160;&#160;&#160; Debug.Write(uri.AbsoluteUri);       <br />&#160;&#160;&#160; Debug.Write(uri.Query);       <br />&#160;&#160;&#160; Debug.Write(uri.Host);       <br />&#160;&#160;&#160; Debug.Write(uri.Port);       </p>
<p> </code>
<p>Y ahora HttpUtility.ParseQueryString, este método es estático asi que podemos utilizarlo con habilitar el namespace <em>System.Web</em></p>
<p> <code>
<p>using System.Web;</p>
<p>//…class structure</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; NameValueCollection qryStringCollection = HttpUtility.ParseQueryString(“a=1&amp;b=2&amp;c=3”);      <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Response.Write(qryStringCollection[&quot;a&quot;]); // escribirá 1       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Response.Write(qryStringCollection[&quot;b&quot;]); // escribirá 2       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; Response.Write(qryStringCollection[&quot;c&quot;]); // escribirá 3       </p>
<p> </code>
<p>como verán el método retorna una “NameValueCollection” cuyo comportamiento es como un diccionario (llave, valor).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/utilizando-las-clases-uri-y-httputility-para-obtener-los-elementos-de-una-url/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET Website Generic Handlers</title>
		<link>http://www.fboiton.com/aspnet-website-generic-handlers</link>
		<comments>http://www.fboiton.com/aspnet-website-generic-handlers#comments</comments>
		<pubDate>Thu, 24 Jun 2010 15:22:35 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[practices]]></category>
		<category><![CDATA[web application]]></category>
		<category><![CDATA[webforms]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/?p=32</guid>
		<description><![CDATA[Existen ocasiones que necesitamos dejar por un lado el HTML y responder XML, json, etc. Muchas veces hemos utilizado una página ASPX y el Response.Write para estos fines, sin embargo, existe otra opción… Los ASP.NET Generic Web Handler cuando trabajamos &#8230; <a href="http://www.fboiton.com/aspnet-website-generic-handlers">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Existen ocasiones que necesitamos dejar por un lado el HTML y responder XML, json, etc. Muchas veces hemos utilizado una página ASPX y el Response.Write para estos fines, sin embargo, existe otra opción… Los <em>ASP.NET Generic Web Handler </em>cuando trabajamos con <em>ASP.NET WebSites</em>.</p>
<p>No es que sea totalmente malo utilizar una ASPX, en realidad el punto es que toda ASPX hereda de System.Web.UI.Page y éste incluye ovehead que no necesitamos para lo que necesitamos.</p>
<p>Primero agregamos al proyecto nuestro Handler</p>
<p><a href="http://www.fboiton.com/images/ASP.NETCustomWebHandlerGenericHandlers_7E5D/image.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="294" alt="image" src="http://www.fboiton.com/images/ASP.NETCustomWebHandlerGenericHandlers_7E5D/image_thumb.png" width="547" border="0" /></a> </p>
<p>Una vez creado, obtendremos el código definido por el template</p>
<p><a href="http://www.fboiton.com/images/ASP.NETCustomWebHandlerGenericHandlers_7E5D/image_3.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="280" alt="image" src="http://www.fboiton.com/images/ASP.NETCustomWebHandlerGenericHandlers_7E5D/image_thumb_3.png" width="412" border="0" /></a> </p>
<p>Quien hace acá la magia es esta directiva:</p>
<p><a href="http://www.fboiton.com/images/ASP.NETCustomWebHandlerGenericHandlers_7E5D/image_4.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="26" alt="image" src="http://www.fboiton.com/images/ASP.NETCustomWebHandlerGenericHandlers_7E5D/image_thumb_4.png" width="478" border="0" /></a> </p>
<p>Básicamente, define que la Clase “Handler” se debe instanciar para manejar la respuesta al llamar a dicho archivo.</p>
<p>Recordemos definir siempre el content type, el cual en este ejemplo definiré para javascript “<em>application/x-javascript</em>” y la respuesta (que para efectos de este post lo dejaré con un Response.Write) la modificaré para retornar un array en formato json, lo que nos lleva a una clase así:</p>
<p> <code>public class Handler : IHttpHandler {    <br />&#160;&#160;&#160; public void ProcessRequest (HttpContext context) {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; context.Response.ContentType = &quot;application/x-javascript&quot;;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; context.Response.Write(&quot;{testlist:['value 1','value 2', 'value 3']}&quot;);     <br />&#160;&#160;&#160; }     <br />&#160;&#160;&#160; public bool IsReusable {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; get {     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return false;     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }     <br />&#160;&#160;&#160; }
</p>
<p>}</p>
<p> </code>
</p>
<p>Al correr el scritp este es el resultado:</p>
<p><a href="http://www.fboiton.com/images/ASP.NETCustomWebHandlerGenericHandlers_7E5D/image_5.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="80" alt="image" src="http://www.fboiton.com/images/ASP.NETCustomWebHandlerGenericHandlers_7E5D/image_thumb_5.png" width="506" border="0" /></a> </p>
<p>Aclaro… Existen formas para serializara diferentes formatos, para relacionarlo con el ejemplo pueden ver la documentación en msdn de <a href="http://msdn.microsoft.com/en-us/library/system.web.script.serialization.aspx">Script Serialization</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/aspnet-website-generic-handlers/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Response.Redirect y Server.Transfer</title>
		<link>http://www.fboiton.com/responseredirect-y-servertransfer</link>
		<comments>http://www.fboiton.com/responseredirect-y-servertransfer#comments</comments>
		<pubDate>Wed, 09 Jun 2010 17:28:11 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[coding]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/?p=29</guid>
		<description><![CDATA[En estos dias recordé estas dos opciones que .Net nos ofrece en cuanto a un website se refiere y pues me dí cuenta que no las tenía claras. Luego de investigar un poco creo que ya toca un siguiente post. &#8230; <a href="http://www.fboiton.com/responseredirect-y-servertransfer">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En estos dias recordé estas dos opciones que .Net nos ofrece en cuanto a un website se refiere y pues me dí cuenta que no las tenía claras. Luego de investigar un poco creo que ya toca un siguiente post. </p>
<p>Generalizando ambas realizan un redireccionamiento, sin embargo existen varias diferencias las cuales nos aclaran que cada una de las “opciones de redireccionamiento” tienen objetivos diferentes.</p>
<h4>Response.Redirect</h4>
<p>Basicamente envia al navegador una respuesta con headers de redireccionamiento a la nueva ubicación, la cual puede ser otra página en el mismo sitio, otro sitio en el mismo servidor u otro sitio externo. </p>
<p>Ejemplos:</p>
<p><code>Response.Redirect(“OtherPage.aspx”);&#160; //Para otra página en el mismo servidor.</code></p>
<p><code>Response.Redirect(“http://www.google.com/”); // Para otro sitio, no necesariamente en el mismo servidor</code></p>
<p>Ojo, con un Response.Redirect estamos haciendo notorio al usuario que se le está cambiando de ubicación y por ende ve la nueva dirección en el navegador, en resúmen, el usuario realiza un nuevo Request.</p>
<h4>Server.Transfer</h4>
<p>La similitud con Response.Redirect es que también envía al usuario hacia otra página, sin embargo, existen varias características que enumero a continuación:</p>
<ul>
<li>Se conservan los recursos del servidor ya que solamente se hace un “focus” </li>
<li>No se realiza ningún nuevo http request. </li>
<li>Se mantiene el mismo URL en el browser del usuario. </li>
<li>Tiene opción a mantener las colecciones del Formulario y QueryString. </li>
</ul>
<p>Server.Transfer solamente funciona entre sitios corriendo en el mismo server </p>
<p>Ejemplo de uso:</p>
<p><code>Server.Transfer(“otherPage.aspx”);</code></p>
<p><code>Server.Transfer(“otherPage.aspx”,true); // si queremos mantener las colecciones QueryString y Form</code></p>
<p>Para mas detalles pueden avocarse al MSDN </p>
<blockquote><p><a href="http://msdn.microsoft.com/en-us/library/08za4s98(v=VS.100).aspx">HttpResponse.Redirect Method</a></p>
<p><a href="http://msdn.microsoft.com/en-us/library/caxa892w.aspx">HttpServerUtility.Transfer Method</a></p>
</blockquote>
<p>Espero les sea útil este post <img src='http://www.fboiton.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/responseredirect-y-servertransfer/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

