<?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; fboiton</title>
	<atom:link href="http://www.fboiton.com/author/fboiton/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>Microsoft.WebApplication.targets not found</title>
		<link>http://www.fboiton.com/microsoft-webapplication-targets-not-found</link>
		<comments>http://www.fboiton.com/microsoft-webapplication-targets-not-found#comments</comments>
		<pubDate>Thu, 22 Jul 2010 02:00:00 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[asp.net 4.0]]></category>
		<category><![CDATA[msbuild]]></category>
		<category><![CDATA[psake]]></category>
		<category><![CDATA[team fundation server]]></category>
		<category><![CDATA[teamcity]]></category>
		<category><![CDATA[webapplication]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/microsoft-webapplication-targets-not-found</guid>
		<description><![CDATA[Creando un build script con psake y configurandolo en un servidor de integración con TeamCity me topé con el siguiente error: The imported project &#8220;C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets&#8221; was not found Dicho archivo .targets corresponde a un set de elementos, propiedades, targets &#8230; <a href="http://www.fboiton.com/microsoft-webapplication-targets-not-found">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Creando un build script con psake y configurandolo en un servidor de integración con TeamCity me topé con el siguiente error:</p>
<p><em>The imported project &#8220;C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets&#8221; was not found</em></p>
<p>Dicho archivo .targets corresponde a un set de elementos, propiedades, targets y tareas de escenarios comunies segun se puede ver en la <a href="http://msdn.microsoft.com/en-us/library/ms164312.aspx" target="_blank">referencia de MSBuild</a>. Estos archivos se instalan con el Visual Studio y/o MSBuild, sin embargo el correspondiente a WebApplication no está incluido.</p>
<p>Buscando si alguien más ha tenido este problema encontré esta nota “<a href="http://www.sharepointsecurity.com/sharepoint/team-foundation-server/tfs-2010-solving-the-imported-project-microsoft-webapplication-targets-was-not-found-error/" target="_blank">TFS 2010 – Solving The Imported Project Microsoft.WebApplication.targets Was Not Found Error</a>”</p>
<p>En dicha nota sugieren literalmente copiar el directorio “C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications” de una máquina de desarrollo al build server, acción que que la compilación suceda.</p>
<p>Al volver a ejecutar el build script comencé a obtener varios warnings indicando lo siguiente:</p>
<p><em>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(847,9): warning MSB3644: The reference assemblies for framework &#8220;.NETFramework,Version=v4.0&#8243; were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed. Note that assemblies will be resolved from the Global Assembly Cache (GAC) and will be used in place of reference assemblies. Therefore your assembly may not be correctly targeted for the framework you intend.</em></p>
<p>Donde lo que procede es la instalación del <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b&amp;displaylang=en" target="_blank">SDK para la .NET Framework 4</a>. Ojo, la Framework 4 se encontraba ya instalada en el servidor de integración, mas no el SDK, así que las referencias que utilizamos en nuestra aplicación, según lo indicaban los warnings,&nbsp; se resolvían con el GAC, sin embargo, nuestro build no está completamente lipio. Una vez realizadas estas acciones tenemos ya nuestro “Build Success!”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/microsoft-webapplication-targets-not-found/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>Conceptos claves en Team Foundation Server 2010</title>
		<link>http://www.fboiton.com/conceptos-claves-en-team-foundation-server-2010</link>
		<comments>http://www.fboiton.com/conceptos-claves-en-team-foundation-server-2010#comments</comments>
		<pubDate>Thu, 08 Jul 2010 22:29:26 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[team fundation server]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/conceptos-claves-en-team-foundation-server-2010</guid>
		<description><![CDATA[Comenzando con mi investigación sobre Team Foundation Server me topé con algunos conceptos claves en un post de bharry, donde menciona&#160; estas características y que resumo a continuación. Team Project Collections Cada colleción es un grupo de proyectos relacionados y &#8230; <a href="http://www.fboiton.com/conceptos-claves-en-team-foundation-server-2010">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><font color="#333333" size="3"></font></p>
<p>Comenzando con mi investigación sobre Team Foundation Server me topé con algunos conceptos claves en un <a href="http://blogs.msdn.com/b/bharry/archive/2009/04/19/team-foundation-server-2010-key-concepts.aspx" target="_blank">post de bharry</a>, donde menciona&nbsp; estas características y que resumo a continuación.</p>
<h3>Team Project Collections </h3>
<p>Cada colleción es un grupo de proyectos relacionados y cada TFS Farm&nbsp; puede contener varias collecciones.<br />Cada colección es totalmente independiente una de la otra</p>
<h3>Bases de Datos</h3>
<p>Por la introducción de los Team Project Collections </p>
<h5>TFS_Config</h5>
<p>Base de datos raiz que centraliza los datos de la configuración del TFS incluyendo el listado de team project collections.</p>
<h5>TFS_Warehouse </h5>
<p>Contiene la información de reportes de todas las team project collections, con esto provee la capacidad de reporteria entre todas las team project collections en la TFS farm</p>
<h5>TFS_* </h5>
<p>Una base de datos por cada team project collection. La cual contiene toda la información operacional relacionada con un sub sitema para determinada team project collection (contol de versiones, seguimiento de ítems en trabajo, builds, etc). </p>
<h3>TFS Farms </h3>
<p>La introducción de las TFS Farms se considera un gran cambio de arquitectura, permitiendo mayor flexibilidad con relación al TFS 2008. Dichos cambios que dan vida a las TFS Farms son:</p>
<ul>
<li><strong>soporte de NLB entre TFS application tiers</strong>. El habilitar balanceo de carga tiene como proposito habilitar una mas limpia y completa historia de alta disponibilidad. </li>
<li><strong>Scale out for SQL data tiers</strong>. Debido a que cada base de datos es independiente éstas pueden estar en cualquier SQL Server.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/conceptos-claves-en-team-foundation-server-2010/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>Incursionando con RavenDB: Caracteristicas, instalación y nuestro primer documento</title>
		<link>http://www.fboiton.com/ravendb-caracteristicas-instalacion-y-nuestro-primer-documento</link>
		<comments>http://www.fboiton.com/ravendb-caracteristicas-instalacion-y-nuestro-primer-documento#comments</comments>
		<pubDate>Wed, 07 Jul 2010 23:31:15 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[document database]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[nosql]]></category>
		<category><![CDATA[ravendb]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/?p=38</guid>
		<description><![CDATA[Según lo indica el sitio web de RavenDB es una document database Open Source para la plataforma .Net/Windows. Es una opción almacenamiento de datos&#160; no relacionados dentro del movimiento NoSQL. Entre sus características tenemos Infraestructura Escalable Configuración en Windows Simple &#8230; <a href="http://www.fboiton.com/ravendb-caracteristicas-instalacion-y-nuestro-primer-documento">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Según lo indica el sitio web de <a href="http://ravendb.net" target="_blank">RavenDB</a> es una document database Open Source para la plataforma .Net/Windows. Es una opción almacenamiento de datos&#160; no relacionados dentro del movimiento <a href="http://en.wikipedia.org/wiki/NoSQL" target="_blank">NoSQL</a>.</p>
<p>Entre sus características tenemos</p>
<ul>
<li>Infraestructura Escalable</li>
<li>Configuración en Windows Simple</li>
<li>Transaccional</li>
<li>Map/Reduce</li>
<li>.Net Client API</li>
<li>RESTful API</li>
<li>Sharding</li>
<li>Indexamiento (<a href="http://lucene.apache.org/java/2_4_0/queryparsersyntax.html" target="_blank">Lucene syntax</a>)</li>
</ul>
<p>En cuanto a documentacion parece estar bastante completa (en inglés), podemos consultar:</p>
<ul>
<li><a href="http://ravendb.net/documentation" target="_blank">Documentación de RavenDB en el sitio oficial</a></li>
<li><a href="http://www.codeproject.com/KB/cs/RavenDBIntro.aspx" target="_blank">Introducción a RavenDB en codeproject.com</a>&#160;</li>
</ul>
<p>Antes de comenzar directamente con RavenDB si aún no tenemos en mente lo que una document database es podemos consultar la <a href="http://en.wikipedia.org/wiki/Document-oriented_database" target="_blank">Wikipedia: Document-oriented database</a> o también ver el video de la <a href="http://altnet-hispano.pbworks.com/van-2010-05-08-nosql" target="_blank">VAN de Alt.Net Hispano sobre NoSQL</a></p>
<p>Cabe mencionar que aún no puede correr en Mono y que los modos Servidor y Embedded corren bajo la framework .NET 4.0. El Cliente si corre (con algunas condiciones) en la framework .NET 3.5 y si puede correr en Mono.</p>
<p>Y para comenzar podemos ir directamente al clásico <a href="http://ravendb.net/tutorials/hello-world" target="_blank">RavenDB HelloWorld! Tutorial</a></p>
<p>Según indica el tutorial, luego de descargar el build que decidamos, nos vamos al folder “server” y lo ejecutamos</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDB_E7D9/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/IncursionandoconRavenDB_E7D9/image_thumb.png" width="232" height="150" /></a> </p>
<p>Nota: Para este ejemplo modifiqué la configuración para que corriera en el puerto 8088, por default va a correr en el 8080.</p>
<p>Ahora que ya tenemos el servidor corriendo</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDB_E7D9/image_3.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/IncursionandoconRavenDB_E7D9/image_thumb_3.png" width="583" height="108" /></a> </p>
<p>procedemos a trabajar en una pequeña implementación utilizando el cliente de RavenDB, no olvidemos referenciar el cliente de Raven DB en nuestro proyecto.</p>
<p>Para esta prueba crearé una console application donde tendremos un par de clases que será la definición de nuestro documento:</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDB_E7D9/image_4.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/IncursionandoconRavenDB_E7D9/image_thumb_4.png" width="395" height="164" /></a> </p>
<p>Una vez teniendo nuestros POCO objects, procedemos a inicializar el DocumentStore y utilizarlo, para lo cual tendremos una clase más con un field que será el storage inicializado en el constructor y un método que se encargará de llenar el documento y almacenarlo en el storage.</p>
<p>Ahhh, no olvidemos que el inicializar el storage no es el único paso que debemos realizar. Para poder interactuar con los documentos necesitamos una sesión abierta, aquí el código:</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDB_E7D9/image_5.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/IncursionandoconRavenDB_E7D9/image_thumb_5.png" width="505" height="353" /></a> </p>
<p>Finalmente, utilizamos nuestro ClientsDirectory en una console application</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDB_E7D9/image_6.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/IncursionandoconRavenDB_E7D9/image_thumb_6.png" width="592" height="75" /></a> </p>
<p>y al ejecutar nuestra aplicación y luego irnos a la interfaz web de nuestro RavenDB Server</p>
</p>
</p>
</p>
<p>http://localhost:8088</p>
<p>Podemos ir a la sección “Documents” y bingo!</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDB_E7D9/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/IncursionandoconRavenDB_E7D9/image_thumb_7.png" width="761" height="92" /></a> </p>
<p>Nuestro primer documento creado, mismo que al darle click en la interfaz web podemos manipularlo:</p>
<p><a href="http://www.fboiton.com/images/IncursionandoconRavenDB_E7D9/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/IncursionandoconRavenDB_E7D9/image_thumb_8.png" width="407" height="378" /></a> </p>
<p>No olvidemos que tenemos la opción de utilizar RavenDB embebido en nuestras aplicaciones lo cual nos quita la dependencia a un servicio adicional a nuestra aplicación que esté corriendo, adicionalmente que esto nos da libertad de utilizarla para muchos tipos de proyectos, no dejen de ver la sección <a href="http://ravendb.net/documentation/docs-client-api-index" target="_blank">Raven’s Client API</a></p>
<p> El proyecto puede descargarse <a href="http://www.fboiton.com/ClientsDirectory.rar">Aqu&iacute;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/ravendb-caracteristicas-instalacion-y-nuestro-primer-documento/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WinCache Extension para PHP en IIS</title>
		<link>http://www.fboiton.com/wincache-extension-para-php-en-iis</link>
		<comments>http://www.fboiton.com/wincache-extension-para-php-en-iis#comments</comments>
		<pubDate>Wed, 07 Jul 2010 19:43:39 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[iis extension]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[wincache]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/?p=37</guid>
		<description><![CDATA[Ya hay un release final de Windows Cache Extension for PHP es la versión 1.1 la cual incluye, funcionalidades nuevas como: Puede ser utilizada como una API de cache para almacenar objetos y variables de PHP. Tiene la opción de &#8230; <a href="http://www.fboiton.com/wincache-extension-para-php-en-iis">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ya hay un release final de <a href="http://www.iis.net/download/wincacheforphp" target="_blank">Windows Cache Extension for PHP</a> es la versión 1.1 la cual incluye, funcionalidades nuevas como:</p>
<ul>
<li>Puede ser utilizada como una API de cache para almacenar objetos y variables de PHP. </li>
<li>Tiene la opción de configurarse como Session Handler de PHP con persistencia en disco.</li>
</ul>
<p>Entre las características que posee esta extensión estan:</p>
<ul>
<li>Cache del bytecode de PHP en memoria, agilizando el tiempo de respuesta al no tener que parsear completamente los scripts PHP, lo cual reduce tambien el I/O overhead.</li>
<li>Debido a que la persistencia de los elementos en cache es en disco, situaciones como un Reciclado de los application pools no afectan en el cache ya creado.</li>
<li>Soporta las notificaciones de cambio de archivos, permitiendo refrescar los bytecodes en cache.</li>
<li>Cuenta con funciones de PHP para conocer el estado del cache.</li>
</ul>
<p>Creo que es una buena alternativa a utilizar en IIS para mejorar el performance de nuestras aplicaciones en PHP reduciendo el tiempo de interpretación de los scripts.</p>
<p>Para mayores detalles de uso podemos consultar el <a href="http://www.php.net/wincache/" target="_blank">Manual de PHP sobre Windows Cache</a> y para otros recursos sobre la extensión pueden consultar el blog de RuslanY con el <a href="http://ruslany.net/2010/06/wincache-extension-1-1-for-php-release-to-web/" target="_blank">post original</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/wincache-extension-para-php-en-iis/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2010 Productivity Improvements</title>
		<link>http://www.fboiton.com/visual-studio-2010-productivity-improvements</link>
		<comments>http://www.fboiton.com/visual-studio-2010-productivity-improvements#comments</comments>
		<pubDate>Tue, 06 Jul 2010 18:21:07 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/?p=36</guid>
		<description><![CDATA[Hace un momento @elijahmanor compartió por twitter un artículo sobre las mejoras de productividad de Visual Studio 2010, el cuál corresponde a una serie de 4 posts en el Weblog de Somasegar y que pueden ver acá: &#160;VS 2010 productivity &#8230; <a href="http://www.fboiton.com/visual-studio-2010-productivity-improvements">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hace un momento @elijahmanor compartió por twitter un artículo sobre las mejoras de productividad de Visual Studio 2010, el cuál corresponde a una serie de 4 posts en el Weblog de <a href="http://blogs.msdn.com/b/somasegar/" target="_blank">Somasegar</a> y que pueden ver acá:</p>
<p>&#160;<a href="http://blogs.msdn.com/b/somasegar/archive/2010/05/25/vs-2010-productivity-improvements-part-i.aspx">VS 2010 productivity improvements, Part I</a></p>
<p><a href="http://blogs.msdn.com/b/somasegar/archive/2010/06/01/vs-2010-productivity-improvements-part-ii.aspx">VS 2010 productivity improvements, Part II</a></p>
<p><a href="http://blogs.msdn.com/b/somasegar/archive/2010/06/23/vs-2010-productivity-improvements-part-iii.aspx">VS 2010 Productivity Improvements, Part III</a></p>
<p><a href="http://blogs.msdn.com/b/somasegar/archive/2010/07/02/vs-2010-productivity-improvements-part-iv.aspx">VS 2010 Productivity Improvements, Part IV</a></p>
<p>Entre las características que me llamaron la atención estan:</p>
<ul>
<li>Code Navigation</li>
<li>Block Select and Block Edit</li>
<li>Pin Tabs</li>
<li>Multi-Monitor support</li>
</ul>
<p>Y bueno, no dejo por un lado las extensions que podemos agregar y que pueden seleccionar desde la <a href="http://visualstudiogallery.msdn.microsoft.com/en-us/site/search?sortBy=Popularity" target="_blank">Galería</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/visual-studio-2010-productivity-improvements/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fluent NHibernate : Component() y ComponentMap</title>
		<link>http://www.fboiton.com/fluent-nhibernate-component-y-componentmap</link>
		<comments>http://www.fboiton.com/fluent-nhibernate-component-y-componentmap#comments</comments>
		<pubDate>Mon, 05 Jul 2010 20:47:39 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[fluent nhibernate]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[orm]]></category>
		<category><![CDATA[orm mappings]]></category>
		<category><![CDATA[storage]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/?p=35</guid>
		<description><![CDATA[Pensemos que ya hemos interactuado aunque sea un poco con Fluent Nhibernate Al momento de realizar nuestros mapeos podemos manejar la composición simple manteniendo en una sola tabla las clasesque se relacionan En este caso “PreInitSearchContext” esta compuesto por un &#8230; <a href="http://www.fboiton.com/fluent-nhibernate-component-y-componentmap">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Pensemos que ya hemos interactuado aunque sea un poco con <a href="http://fluentnhibernate.org/" target="_blank">Fluent Nhibernate</a></p>
<p>Al momento de realizar nuestros mapeos podemos manejar la composición simple manteniendo en una sola tabla las clasesque se relacionan</p>
<p><a href="http://www.fboiton.com/images/FluentNHibernateComponentyComponentMapT_963E/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Figura 1: Clases para Ejemplo Nhibernate con 2 clases utilizando Component()" border="0" alt="Figura 1: Clases para Ejemplo Nhibernate con 2 clases utilizando Component()" src="http://www.fboiton.com/images/FluentNHibernateComponentyComponentMapT_963E/image_thumb.png" width="368" height="87" /></a> </p>
<p>En este caso “PreInitSearchContext” esta compuesto por un “ContextCreator”.</p>
<p>Traduciendo esto a un Mapeo con FluentNhibernate utilizando <a href="http://wiki.fluentnhibernate.org/Fluent_mapping#Components" target="_blank">“Component()”</a> tendríamos algo así:</p>
<p><a href="http://www.fboiton.com/images/FluentNHibernateComponentyComponentMapT_963E/image_3.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Figura 2: Codigo Ejemplo Nhibernate con 2 clases utilizando Component()" border="0" alt="Figura 2: Codigo Ejemplo Nhibernate con 2 clases utilizando Component()" src="http://www.fboiton.com/images/FluentNHibernateComponentyComponentMapT_963E/image_thumb_3.png" width="584" height="195" /></a> </p>
<p>Y con esto estaríamos Manteniendo en la misma tabla “pre_init_search_context” ambas clases. </p>
<p>Ahora bien, resulta que existe otra clase que tambien tiene una relación de composición con “ContextCreator”, asi:</p>
<p><a href="http://www.fboiton.com/images/FluentNHibernateComponentyComponentMapT_963E/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Figura 3: Clases para Ejemplo Nhibernate con 3 clases utilizando ComponentMap&lt;T&gt;" border="0" alt="Figura 3: Clases para Ejemplo Nhibernate con 3 clases utilizando ComponentMap&lt;T&gt;" src="http://www.fboiton.com/images/FluentNHibernateComponentyComponentMapT_963E/image_thumb_4.png" width="543" height="195" /></a> </p>
<p>Imagino que pensaron en “reutilizar” el código del método Component que tenemos en la clase anterior… y aunque es una opción, estamos generando código repetido y obviamente cayendo en conflictos existenciales relacionados con mantenibilidad.</p>
<p>Es aquí donde “<a href="http://wiki.fluentnhibernate.org/Fluent_mapping#ComponentMap.3CT.3E" target="_blank">ComponentMap&lt;T&gt;</a>” entra en juego, permitiendonos reutilizar el mapeo, en este caso del “ContextCreator”, entre las clases que sean necesarias <img src='http://www.fboiton.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Queda entonces nuestro mapeo asi:</p>
<p><a href="http://www.fboiton.com/images/FluentNHibernateComponentyComponentMapT_963E/image_5.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Figura 4: Codigo Ejemplo Nhibernate con 3 clases utilizando ComponentMap&lt;T&gt;" border="0" alt="Figura 4: Codigo Ejemplo Nhibernate con 3 clases utilizando ComponentMap&lt;T&gt;" src="http://www.fboiton.com/images/FluentNHibernateComponentyComponentMapT_963E/image_thumb_5.png" width="605" height="122" /></a> </p>
<p>dejando en cada una de las clases solamente:</p>
<p><a href="http://www.fboiton.com/images/FluentNHibernateComponentyComponentMapT_963E/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Figura 5: Codigo Ejemplo Nhibernate con 3 clases utilizando ComponentMap&lt;T&gt;" border="0" alt="Figura 5: Codigo Ejemplo Nhibernate con 3 clases utilizando ComponentMap&lt;T&gt;" src="http://www.fboiton.com/images/FluentNHibernateComponentyComponentMapT_963E/image_thumb_6.png" width="218" height="27" /></a> </p>
<p>De esta forma las clases “PreInitSearchContext” y “SearchContext” con sus respectivos mapeos independientes pueden reutilizar el mapeo de “ContextCreator” el cual se traducirá a un par de campos (segun la clase utilizada en el ejemplo) en cada una de las tablas correspondientes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/fluent-nhibernate-component-y-componentmap/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>IIS 7 + WebGarden + Session State + SQL Server</title>
		<link>http://www.fboiton.com/iis-7-webgarden-session-state-sql-server</link>
		<comments>http://www.fboiton.com/iis-7-webgarden-session-state-sql-server#comments</comments>
		<pubDate>Fri, 11 Jun 2010 23:42:09 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sessionstate]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[webgarden]]></category>
		<category><![CDATA[wincache]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/?p=31</guid>
		<description><![CDATA[Hoy en el trabajo observamos un comportamiento un poco extraño relacionado con la información que almacenamos en Sesión y que utilizamos en una Web Application corriendo en un pequeño WebGarden teniendo configurado como Session State Server la opción de SQL &#8230; <a href="http://www.fboiton.com/iis-7-webgarden-session-state-sql-server">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hoy en el trabajo observamos un comportamiento un poco extraño relacionado con la información que almacenamos en Sesión y que utilizamos en una Web Application corriendo en un pequeño WebGarden teniendo configurado como Session State Server la opción de SQL Server. </p>
<p>Algunos links sobre Session State y la opción de SQL Server Session Mode</p>
<p><a href="http://www.codeproject.com/KB/aspnet/ExploringSession.aspx#21">Overview en CodePoject</a></p>
<p><a href="http://support.microsoft.com/kb/317604">How-To de Microsoft Support</a></p>
<p><a href="http://msdn.microsoft.com/en-us/magazine/cc163730.aspx">Fast, Scalable, and Secure Session State Management for Your Web Applications</a></p>
<p>En ocasiones, al cambiar de servidor dado a la distribución que realiza un load balancer, la aplicación parecía no poder obtener la información almacenada en sesión y por ende no poder continuar con el proceso que debía desarrollar. Al momento de revisar la base de datos de sesión pudimos percatarnos que habían 2 tuplas para una misma ASP.NetSessionId</p>
<p><a href="http://www.fboiton.com/images/IIS7WebGardenSessionStateSQLServer_EA2C/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="73" alt="image" src="http://www.fboiton.com/images/IIS7WebGardenSessionStateSQLServer_EA2C/image_thumb.png" width="384" border="0" /></a> </p>
<p>Query:<code> select * from ASPStateTempSessions where SessionId like '%piltae45debwl355ek3v0545%'</code></p>
<p>Y cómo es esto? Ok, resulta que el SessionId que utilizamos en nuestra aplicación no es lo único que se utiliza como llave en la tabla de SQL ya que está formada por:</p>
<p>Session Id + Application Id</p>
<p>(ver mas info acá: <a href="http://msdn.microsoft.com/en-us/library/aa478952.aspx">Session State Providers</a>)</p>
<p>Resultó entonces que por cada servidor nos estaba generando una tupla en nuestro storage de sesión, la primera con la información que habíamos almacenado y la segunda como una nueva sesión totalmente vacía. Esto debido a que a cada webserver le estaba asignando un diferente Application Id.</p>
<p>Me dirán por ahí que esto no debía suceder… también hay un trasfondo relacionado con la aplicación que casualmente permite esto, sin embargo esto lo dejamos para otro post <img src='http://www.fboiton.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Solución:</p>
<p>Debemos irnos a cada uno de los webservers del WebGarden y en cada uno debemos definir el “ID” del website. Para ello debemos colocarnos en “Sites”</p>
<p><a href="http://www.fboiton.com/images/IIS7WebGardenSessionStateSQLServer_EA2C/image_3.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="45" alt="image" src="http://www.fboiton.com/images/IIS7WebGardenSessionStateSQLServer_EA2C/image_thumb_3.png" width="462" border="0" /></a> </p>
<p>Dar click derecho y en “Manage Web Site” seleccionamos la opción “Advanced Settings”</p>
<p><a href="http://www.fboiton.com/images/IIS7WebGardenSessionStateSQLServer_EA2C/image_4.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="161" alt="image" src="http://www.fboiton.com/images/IIS7WebGardenSessionStateSQLServer_EA2C/image_thumb_4.png" width="470" border="0" /></a> </p>
<p>y finalmente nos aseguramos que el Website en cada uno de los Web Servers de nuestro WebGarden tenga el mismo ID</p>
<p><a href="http://www.fboiton.com/images/IIS7WebGardenSessionStateSQLServer_EA2C/image_5.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="86" alt="image" src="http://www.fboiton.com/images/IIS7WebGardenSessionStateSQLServer_EA2C/image_thumb_5.png" width="436" border="0" /></a> </p>
<p>Reiniciamos los IIS para que todo camine en orden y voila! <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/iis-7-webgarden-session-state-sql-server/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How-To: Split with AWK – Separar una cadena con AWK</title>
		<link>http://www.fboiton.com/how-to-split-with-awk-separar-una-cadena-con-awk</link>
		<comments>http://www.fboiton.com/how-to-split-with-awk-separar-una-cadena-con-awk#comments</comments>
		<pubDate>Thu, 10 Jun 2010 23:36:16 +0000</pubDate>
		<dc:creator>fboiton</dc:creator>
				<category><![CDATA[Desarrollo de Software]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[text parser]]></category>
		<category><![CDATA[text utils]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.fboiton.com/?p=30</guid>
		<description><![CDATA[Para quien no conozca a nuestro amigo AWK pueden avocarse a wikipedia http://en.wikipedia.org/wiki/AWK. Extenderme a hablar de esta textutil de linux en su totalidad es mucho para un post, asi que por ahi irán saliendo uno que otro how-to de &#8230; <a href="http://www.fboiton.com/how-to-split-with-awk-separar-una-cadena-con-awk">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Para quien no conozca a nuestro amigo AWK pueden avocarse a wikipedia <a href="http://en.wikipedia.org/wiki/AWK">http://en.wikipedia.org/wiki/AWK</a>.</p>
<p>Extenderme a hablar de esta textutil de linux en su totalidad es mucho para un post, asi que por ahi irán saliendo uno que otro how-to de textutils.</p>
<p>Resulta que por algun motivo tenemos una cadena que necesitamos hacer pedazos a partir de un caracter en específico, por ejemplo un archivo con path de origen y destino para mover o copiar archivos, vamos a tomar de ejemplo lo que sería una linea del archivo</p>
<p><code>/home/fernando/hola.txt|/root/hola.txt</code></p>
<p>esto quiere decir que necesitamos una sentencia como esta:</p>
<p><code>cp /home/fernando/hola.txt /root/hola.txt</code></p>
<p>Acá es donde llega nuestro amigo AWK para plantearnos la solución a este dilema que viene a ser algo así:</p>
<p><code>echo &quot;/home/fernando/hola.txt|/root/hola.txt&quot; | awk '{split($1,arrayName,&quot;|&quot;); print &quot;cp &quot;arrayName[1]&quot; &quot;arrayName[2]}'</code></p>
<p>Especificamente quien hace la tarea es el comando “split” el cual tiene 3 parametros:</p>
<ul>
<li>Cadena de entrada ( $1 ) [Ver wikipedia el segmento del <a href="http://en.wikipedia.org/wiki/AWK#The_print_command">comando print</a>&#160; ] </li>
<li>nombre del Arreglo ( arrayName ) , el conteo de posiciones comienza en 1. </li>
<li>separador ( “|” ) </li>
</ul>
<p>Si tenemos varias lineas en un archivo de entrada en lugar del comando “echo” podemos utilizar “cat [archivo de entrada]” asi:</p>
<p><code>cat listado.txt | awk '{split($1,arrayName,&quot;|&quot;); print &quot;cp &quot;arrayName[1]&quot; &quot;arrayName[2]}'</code></p>
<p>La salida de este comando nos dará un listado de sentencias que podremos utilizar y ejecutar directamente, lo cual podríamos hacerlo con un apóstrofe invertido (`)</p>
<p><code>`echo &quot;/home/fernando/hola.txt|/root/hola.txt&quot; | awk '{split($1,arrayName,&quot;|&quot;); print &quot;cp &quot;arrayName[1]&quot; &quot;arrayName[2]}'`</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fboiton.com/how-to-split-with-awk-separar-una-cadena-con-awk/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

