<?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>Jorge Iván Meza Martínez &#187; .NET</title>
	<atom:link href="http://blog.jorgeivanmeza.com/tag/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jorgeivanmeza.com</link>
	<description>The Fire Within Me: &#34;knowledge will set you free&#34;</description>
	<lastBuildDate>Thu, 22 Jul 2010 06:31:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=6905</generator>
		<item>
		<title>Probando Firebird Embedded con C#</title>
		<link>http://blog.jorgeivanmeza.com/2008/10/probando-firebird-embedded-con-c/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=probando-firebird-embedded-con-c</link>
		<comments>http://blog.jorgeivanmeza.com/2008/10/probando-firebird-embedded-con-c/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 05:32:26 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Bases de datos]]></category>
		<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Firebird]]></category>
		<guid isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=809</guid>
		<description><![CDATA[Desde hace mucho tiempo tengo planeado desarrollar una aplicación cuya versión 0.1 desarrollé hace ya varios años en C++ y Fox Toolkit, perdida ya en el museo del olvido. La aplicación es muy sencilla.  Inicialmente son dos módulos pero la idea es agregarle después algunos otros.  El problema es que cada vez que me siento [...]]]></description>
			<content:encoded><![CDATA[<p>Desde hace mucho tiempo tengo planeado desarrollar una aplicación cuya versión 0.1 desarrollé hace ya varios años en C++ y <a href="http://www.fox-toolkit.org/" target="_blank">Fox Toolkit</a>, perdida ya en el museo del olvido.</p>
<p>La aplicación es muy sencilla.  Inicialmente son dos módulos pero la idea es agregarle después algunos otros.  El problema es que cada vez que me siento a pensar en ella termino haciendo un diseño complejo y lleno de cositas que me pondrían a estudiar.  Esto no sería malo sino fuera porque de esta manera se va a terminar cuando el tiempo tienda a infinito.</p>
<p>Por esto he cambiado mi plan.  Voy a hacer una aplicación pequeña y la voy a ir hacer creciendo, aunque esto signifique que alguna versión deba volverla a hacer desde <em>scratch</em> (cero).</p>
<p>Con respecto al lenguaje de programación había elegido Java para retomar mi estudio pero en medio de la <em>moda </em>local y temporal de .NET he decidido empezar a implementar en C#.</p>
<p>El primer reto a resolver es la escogencia de un <em>motor</em> de base de datos ya que la aplicación va a ser pequeña, me interesa que se pueda ejecutar en equipos no necesariamente robustos, no quiero despilfarrar recursos y quiero que la instalación y copia de seguridad sean fáciles: sólo copiar archivos.  Por esto he pensado en utilizar una base de datos basada en archivos o <em>embedded</em>.</p>
<p>Para Java hay varias de donde escoger, pero para .NET la oferta, al parecer, no es tan amplia.  Encontré <a href="http://www.sqlite.org/" target="_blank">SQLite</a> (ya lo he utilizado varias veces pero he tenido problemas con bloqueos) <a href="http://www.vistadb.net/" target="_blank">VistaDB</a> (comercial, no me sirve) y a <a href="http://www.codeplex.com/sharphsql" target="_blank">SharpHSQL</a> hermanita de <a href="http://hsqldb.org/" target="_blank">HSQL</a> (Java) para .NET, sin embargo no estoy seguro de cuan activo está ese proyecto.  Las mejores opciones por ahora parecen ser <a href="http://www.firebirdsql.org/manual/fbmetasecur-embedded.html" target="_blank">FireBird Embedded</a> y <a href="http://www.microsoft.com/sqlserver/2008/en/us/compact.aspx" target="_blank">SQL Server Compact</a>, ambas prometen muchas cosas, incluyendo un bajo <em>footprint</em> ~ 2MB.</p>
<p>Para la primera prueba elegí a <a href="http://firebirdsql.org/" target="_blank">FireBird</a> ya que esa fue la primera base de datos que utilicé en un proyecto después de graduado como ingeniero y me unen a ella emotivos recuerdos <img src='http://blog.jorgeivanmeza.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Instalación.</h3>
<p>Para desarrollar una aplicación con FireBird inmerso se requieren dos recursos.</p>
<ul>
<li>La <a href="http://firebirdsql.org/index.php?op=files" target="_blank">distribución <em>embed</em></a>.  Para este caso particular estoy utilizando la versión <span style="font-family: courier new,courier;">2.1.1.17910-0_Win32</span>.</li>
<li>El <a href="http://firebirdsql.org/dotnetfirebird/download/index.html" target="_blank">FirebirdClient for .NET</a> que es el <em>Data Provider</em>.  Para esta prueba, la versión <span style="font-family: courier new,courier;">2.0.1</span>.</li>
</ul>
<p>El FirebirdClient se instala como cualquier aplicación Windows sin ninguna opción específica.  Me imagino que habrá que instalarlo también en los clientes cuando se haga el despliegue (por confirmar).</p>
<p>La distribución se debe descomprimir y mover los siguientes archivo al mismo directorio donde se encontrará el archivo ejecutable de la aplicación: <span style="font-family: courier new,courier;">&lt;ruta&gt;\bin\Debug</span> (desarrollo) o <span style="font-family: courier new,courier;">&lt;ruta&gt;\bin\Release</span> (producción).</p>
<ul>
<li><span style="text-decoration: underline;"><strong><span style="font-family: courier new,courier;">fbembed.dll</span></strong></span></li>
<li><span style="text-decoration: underline;"><strong><span style="font-family: courier new,courier;">icudt30.dll</span></strong></span></li>
<li><span style="font-family: courier new,courier;">icuin30.dll</span></li>
<li><span style="font-family: courier new,courier;">icuuc30.dll</span></li>
<li><span style="font-family: courier new,courier;">firebird.conf</span></li>
<li><span style="font-family: courier new,courier;">firebird.msg</span></li>
</ul>
<p>Para la implementación del proyecto estoy utilizando Visual C# Express 2008 y en él es necesario incluír la referencia a <span style="font-family: courier new,courier;">FirebirdSql.Data.FirebirdClient</span> instalada con el <em>Data Provider</em>.</p>
<h3>Creación de la cadena de conexión.</h3>
<p>Es fácil construír la <em>ConnectionString</em> con la ayuda del <span style="font-family: courier new,courier;">FbConnectionStringBuilder</span> de la siguiente manera.</p>
<pre>            FbConnectionStringBuilder csb = new FbConnectionStringBuilder();
            csb.ServerType = FbServerType.Embedded;
            csb.UserID     = "SYSDBA";
            csb.Password   = "masterkey";
            csb.Dialect    = 3;
            csb.Database   = @"data\database.fdb";
            csb.Charset    = "UTF8";</pre>
<p>Sólo los parámetros ServerType y Database son obligatorios, los demás son opcionales y puede encontrarse mayor información sobre ellos en <a href="http://www.firebirdsql.org/dotnetfirebird/connection-string-parameters.html" target="_blank">ConectionStringParameters</a>, también se puede encontrar mayor información acerca de los <span style="font-family: courier new,courier;">Charset</span> disponibles en <a href="http://www.destructor.de/firebird/charsets.htm" target="_blank">Firebird Character Sets and Collations</a>.</p>
<p>La ubicación de la base de datos (parámetro <span style="font-family: courier new,courier;">Database</span>) es relativo a la ubicación del archivo <span style="font-family: courier new,courier;">fembed.dll</span>, es decir, al ejecutable de la aplicación.</p>
<h3>Creación de la base de datos.</h3>
<p>Desde la misma aplicación es posible crear la base de datos (manera <a href="http://www.rae2.es/programatica" target="_blank">programática</a>) a la cual hace referencia la cadena de conexión.</p>
<pre>           FbConnection.CreateDatabase(csb.ToString());</pre>
<p>Debe tenerse en cuenta que la ruta de directorios bajo la cual se ubicará la base de datos ya debe existir previa la creación del archivo de datos, de lo contrario la creación fallará.</p>
<h3>Conexión a la base de datos.</h3>
<pre>          con = new FbConnection(csb.ToString());
          con.Open();</pre>
<h3>Verificación del estado de la conexión.</h3>
<pre>            if (con.State == System.Data.ConnectionState.Open)
                Console.WriteLine("Established");
            else
                Console.WriteLine("NOT established");</pre>
<p>Otros posibles estados definidos por <span style="font-family: courier new,courier;">ConnectionState </span>son <span style="font-family: courier new,courier;">Broken</span>, <span style="font-family: courier new,courier;">Closed</span>, <span style="font-family: courier new,courier;">Connecting</span>, <span style="font-family: courier new,courier;">Executing </span>y <span style="font-family: courier new,courier;">Fetching</span>.</p>
<h3>Verificación de la existencia de una tabla.</h3>
<pre>            FbCommand cmd = new FbCommand("SELECT COUNT(RDB$RELATION_NAME)" +
                                          "FROM RDB$RELATIONS WHERE (RDB$RELATION_NAME = 'users')" +
                                          "AND RDB$VIEW_SOURCE IS NULL", con);
            int tableCount = (int)cmd.ExecuteScalar();
            if (tableCount == 0)
                Console.WriteLine("No");
            else
                Console.WriteLine("Yes");</pre>
<p>Verifica la existencia o no de la tabla <span style="font-family: courier new,courier;">users</span> en la base de datos conectada.</p>
<h3>Ejecución de un INSERT.</h3>
<pre>            String sql = "INSERT INTO \"users\" VALUES ('" + user[0] + "', '" + user[1] + "')";
            cmd = new FbCommand(sql, con);
            cmd.ExecuteNonQuery();</pre>
<h3>Ejecución de una consulta de datos.</h3>
<pre>            String select = "SELECT username, name FROM \"users\"";
            cmd = new FbCommand(select, con);
            FbDataReader reader = cmd.ExecuteReader();
            try
            {
                while (reader.Read())
                {
                    String username = reader.GetString(0).Trim();
                    String name = reader.GetString(1).Trim();
                    Console.WriteLine("\t{'" + username + "', '" + name + "'}");
                }
            }
            finally
            {
                reader.Close();
            }</pre>
<h3>Finalización de la conexión.</h3>
<pre>            con.Close();</pre>
<h3>Conclusiones.</h3>
<p>Esta primera aproximación fue sencilla, práctica y funcional.  Se encuentra buena documentación del motor de base de datos y movimiento en los foros en su respecto.  A pesar de que, al menos por estas latitudes, no es muy utilizada Firebird parece ser que en otras partes si lo es.</p>
<p>Los archivos requeridos (<em>dlls</em>) ocupan 2.87MB mientras que todos los archivos, incluyendo los opcionales, ocupan 4.94MB.</p>
<p>Voy a revisar también cuan viable es utilizar el SQL Server Compact, sin embargo en los últimos días que hemos tenido un poco de contacto con SQL Server han aparecido con él algunos detalles desagradables que desde mi punto de vista de conocer poco acerca de este motor, me desaniman de utilizarlo.  Ya veremos.</p>
<p>Enlace: <a href="http://demo.jorgeivanmeza.com/NET/FirebirdEmbeddedDemo/0.1/FirebirdEmbeddedDemo1.zip" target="_blank">Aplicación de prueba - Firebird Embedded Demo 0.1</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2008/10/probando-firebird-embedded-con-c/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mis primeras estrellitas</title>
		<link>http://blog.jorgeivanmeza.com/2008/09/mis-primeras-estrellitas/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mis-primeras-estrellitas</link>
		<comments>http://blog.jorgeivanmeza.com/2008/09/mis-primeras-estrellitas/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 04:41:44 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Certificaciones]]></category>
		<guid isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=786</guid>
		<description><![CDATA[Entre viernes y sábado gané mis primeras estrellitas del Desarrollador Cinco Estrellas.  Pude sacar el tiempo para presentar los siguientes exámenes. Estrella #0: Fundamentos de la programación. Estrella #1: .NET Framework. C#. Estrella #2: Aplicaciones web con ASP.NET. Aplicaciones Windows con WinForms. Esta semana va a estar un poco difícil que vuelva a dedicar un [...]]]></description>
			<content:encoded><![CDATA[<p>Entre viernes y sábado gané mis primeras estrellitas del <a href="http://www.mslatam.com/latam/msdn/comunidad/dce2005/" target="_blank">Desarrollador Cinco Estrellas</a>.  Pude sacar el tiempo para presentar los siguientes exámenes.</p>
<p style="padding-left: 30px;"><strong>Estrella #0:</strong></p>
<p style="padding-left: 60px;">Fundamentos de la programación.</p>
<p style="padding-left: 30px;"><strong>Estrella #1:</strong></p>
<p style="padding-left: 60px;">.NET Framework.</p>
<p style="padding-left: 60px;">C#.</p>
<p style="padding-left: 30px;"><strong>Estrella #2:</strong></p>
<p style="padding-left: 60px;"><a href="http://www.jorgeivanmeza.com/blog/2008/09/27/resumen-aplicaciones-web-con-aspnet/" target="_blank">Aplicaciones web con ASP.NET</a>.</p>
<p style="padding-left: 60px;"><a href="http://www.jorgeivanmeza.com/blog/2008/09/27/resumen-aplicaciones-windows-con-winforms/" target="_blank">Aplicaciones Windows con WinForms</a>.</p>
<div id="attachment_787" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/09/estrella-2.png"><img class="size-full wp-image-787" title="estrella-2" src="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2008/09/estrella-2.png" alt="" width="500" height="359" /></a><p class="wp-caption-text">Mi segunda estrellita.</p></div>
<p>Esta semana va a estar un poco difícil que vuelva a dedicar un tiempo a estas labores <em>astronómicas</em>, sin embargo voy a hacer mi mejor esfuerzo.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2008/09/mis-primeras-estrellitas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Resumen - Aplicaciones Windows con WinForms</title>
		<link>http://blog.jorgeivanmeza.com/2008/09/resumen-aplicaciones-windows-con-winforms/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=resumen-aplicaciones-windows-con-winforms</link>
		<comments>http://blog.jorgeivanmeza.com/2008/09/resumen-aplicaciones-windows-con-winforms/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 04:05:43 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[WinForms]]></category>
		<guid isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=779</guid>
		<description><![CDATA[Winforms: .NET Framework Class Library -&#62; aplicaciones de escritorio. Diseñador de formularios: Genera el código del formulario diseñado y de los componentes incluídos en él. Partial Class permite separar la implementación de una clase en varios archivos fuente -&#62; separar la lógica de la aplicación (organización). Objeto Form: Opacity: transparencia (int 0 - 1). Size: [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Winforms</strong>: .NET Framework Class Library -&gt; aplicaciones de escritorio.</p>
<hr /><strong>Diseñador de formularios</strong>:</p>
<ul>
<li>Genera el código del formulario diseñado y de los componentes incluídos en él.</li>
<li> Partial Class permite separar la implementación de una clase en varios archivos fuente -&gt; separar la lógica de la aplicación (organización).</li>
</ul>
<hr /><strong>Objeto Form</strong>:</p>
<ul>
<li><strong>Opacity</strong>: transparencia (int 0 - 1).</li>
<li> <strong>Size</strong>: tamaño (<span style="font-family: courier new,courier;">Size</span>).</li>
<li> <strong>Location</strong>: ubicación (<span style="font-family: courier new,courier;">Location</span>).</li>
<li> <strong>Show()</strong>: mostrar.  Permite especificar su propietario.</li>
<li><strong> ShowDialog()</strong>: permite mostrar un diálogo de su propiedad, incluyendo uno <em>modal </em>(no permite tomar el foco por otro formulario mientras se esté mostrando).</li>
</ul>
<hr /><strong>Manejo de eventos</strong>:</p>
<ul>
<li> Por cada evento generado es posible implementar varios métodos manejadores.</li>
<li> Un método manejador de eventos puede recibir notificaciones de eventos generados en varios objetos.</li>
<li> Es posible cancelar el tratamiento por defecto del evento manejado con <span style="font-family: courier new,courier;">e.Handled = true</span>.</li>
</ul>
<hr /><strong>Eventos del Form</strong>: ciclo de vida.</p>
<ul>
<li><strong>Load</strong>: se encuentra recién cargado, aún no se muestra al usuario.</li>
<li> <strong>Paint</strong>: es dibujado incluyendo a sus controles recursivamente.</li>
<li> <strong>Activated</strong>: recibe foco.</li>
<li> <strong>FormClosing</strong>: el proceso de cierre a sido iniciado.  En este punto es posible manipularlo y si es necesario, cancelar el cierre.</li>
<li> <strong>FormClosed</strong>: ha sido cerrado.</li>
<li> <strong>Disposed</strong>: ha sido destruído.</li>
</ul>
<hr /><strong>Eventos del ratón</strong>:</p>
<ul>
<li><strong>MouseClick</strong>: se hizo click con el ratón.</li>
<li><strong>MouseEnter</strong>: el puntero del ratón entró a un componente.</li>
<li><strong>MouseMove</strong>: el puntero del ratón ha sido movido dentro del componente.</li>
</ul>
<hr /><strong>Eventos de teclado</strong>:</p>
<ul>
<li> <strong>KeyPress</strong>: tecla presionada.  Representa una pareja de eventos Up y Down sucesivos.  e.KeyChar especifica cual.</li>
<li> <strong>KeyDown</strong>: tecla hundida.</li>
<li> <strong>KeyUp</strong>: tecla liberada.</li>
<li> <strong>HelpRequested</strong>: se presionó F1.</li>
</ul>
<hr /><strong>Manipulación del foco</strong>:</p>
<ul>
<li> <strong>CanFocus</strong>: (<span style="font-family: courier new,courier;">true/false</span>) puede el control tomar el foco ?</li>
<li> <strong>Focused</strong>: (<span style="font-family: courier new,courier;">true/false</span>) tiene el control el foco ?</li>
<li> <strong>Focus(int)</strong>: asigna el foco al componente especificado.</li>
<li> <strong>TabIndex</strong>: especifica el órden de movimiento del foco.</li>
</ul>
<hr /><strong>Controles WinForms</strong>:</p>
<ul>
<li><strong>MaskedEdit</strong>: máscaras para la entrada de datos.</li>
<li><strong>Textbox</strong>: cuadro de texto con facilidad para autocompletar.</li>
<li><strong>Label</strong>: etiqueta de texto.</li>
<li><strong>Datagrid</strong>: tabla de datos.  Permite enlazar información de una base de datos de manera dinámica.</li>
<li><strong>TreeView</strong>: estructura tipo árbol.</li>
</ul>
<hr /><strong>Controles contenedores</strong>:</p>
<ul>
<li>Pueden contener a otros controles a su vez.</li>
<li> Heredan de <span style="font-family: courier new,courier;">ContainerControl</span>.</li>
<li> Tienen acceso directo a los controles de primer nivel unicamente (acceso recursivo).</li>
<li> Ejemplo: <span style="font-family: courier new,courier;">Form, Panel, GroupBox</span>.</li>
</ul>
<hr /><strong>Menús de un Form</strong>.</p>
<ul>
<li><strong>MenuStrip</strong>: es un contenedor de otros objetos: <span style="font-family: courier new,courier;">ToolStripMenuItem, ToolStripComboBox, ToolStripSeparator, ToolStripTextBox</span>.</li>
<li> <strong>ContextMenuStrip</strong>: menú contextual (botón derecho del ratón).  Se puede componer de igual manera que el <span style="font-family: courier new,courier;">MenuStrip</span>.</li>
<li> <strong>MergeAction/MergeIndex</strong> del <span style="font-family: courier new,courier;">ToolStripItem </span>controlan la forma como se mezclarán las opciones del menú de dos ventanas.</li>
</ul>
<hr /><strong>Snaplines</strong>: líneas imaginarias que el diseñador de formularios muestra para ayudar con el diseño de los formularios.</p>
<hr /><strong>Document Outline</strong>: permite visualizar la jerarquía de componentes del formulario.</p>
<hr /><strong>Layout Panels</strong>: controla la disposición de elementos sobre el formulario.</p>
<ul>
<li><strong>TableLayoutPanel</strong>: ubica elementos al estilo tabla.  Redimensionable.</li>
<li><strong>FlowLayoutPanel</strong>: los controles fluyen a medida que se van agregando.</li>
</ul>
<hr /><strong>Anchor</strong>: propiedad que permite &#8216;anclar&#8217; a un componente a uno o varios bordes del formulario para modificar su presentación de acuerdo con el redimensionamiento de este último.</p>
<p><strong>Dock</strong>: permite fijar un componente a uno de los bordes de la ventana para modificar su ubicación de acuerdo con el redimensionamiento de este último.</p>
<hr /><strong>Controles ExtenderProviders</strong>: agregan nuevas propiedades a los componentes del formulario.</p>
<ul>
<li> <strong>ErrorProvider</strong>: asocia un error a un componente -&gt; ícono que parpadea.</li>
<li><strong> HelpProvider</strong>: asocia una cadena de texto de ayuda a un componente -&gt; presión de F1.</li>
<li><strong> ToolTip</strong>: asocia un tip a un componente que se muestra cuando tenga el puntero del ratón encima.</li>
</ul>
<hr /><strong>Propiedades dinámicas</strong>:</p>
<ul>
<li>Variables de configuración asociadas a la aplicación.</li>
<li> Incluyen nombre, tipo de datos, alcance (usuario/aplicación) y valor.</li>
<li> Se pueden relacionar (<em>binding</em>) con un componente.</li>
</ul>
<hr /><strong>Diálogos comúnes</strong>:</p>
<ul>
<li>Tipos:
<ul>
<li> <span style="font-family: courier new,courier;">ColorDialog</span></li>
<li><span style="font-family: courier new,courier;"> PrintDialog</span></li>
<li><span style="font-family: courier new,courier;"> SaveDialog</span></li>
<li><span style="font-family: courier new,courier;"> OpenDialog</span></li>
</ul>
</li>
<li> Permiten interactuar con el usuario para realizar acciones comúnes.</li>
<li>Basados en el sistema operativo.</li>
<li> Facilidad para el desarrollador: evita que deba desarrollarlos él mismo.</li>
<li> Facilidad para el usuario: acostumbrado a las interfaces del OS.</li>
</ul>
<hr /><strong>Enlace a datos</strong>:</p>
<ul>
<li>El atributo <strong>DataSource </strong>define el orígen de una fuente de datos para un componente.</li>
<li> El objeto <strong>BindingSource </strong>permite el enlace con fuentes de tres tipos.
<ul>
<li> <strong>DataBase</strong>.</li>
<li> <strong>WebService</strong>.</li>
<li> <strong>Object</strong>: clase de negocio.</li>
</ul>
</li>
<li> Trabajan muy bien en conjunto con <span style="font-family: courier new,courier;">DataBindingNavigator </span>y <span style="font-family: courier new,courier;">DataGridView</span>.</li>
<li> También es posible enlazar datos con <strong>ADO.NET</strong>.</li>
</ul>
<hr /><strong>ClickOnce</strong>: incorporado por .NET 2.0.</p>
<ul>
<li>Distribución de la aplicación.</li>
<li> Instalación.</li>
<li> Actualización.</li>
<li> Versionado.</li>
<li><em>Rollback</em> de la instalación.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2008/09/resumen-aplicaciones-windows-con-winforms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resumen - Aplicaciones Web con ASP.NET</title>
		<link>http://blog.jorgeivanmeza.com/2008/09/resumen-aplicaciones-web-con-aspnet/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=resumen-aplicaciones-web-con-aspnet</link>
		<comments>http://blog.jorgeivanmeza.com/2008/09/resumen-aplicaciones-web-con-aspnet/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 02:34:24 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<guid isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=776</guid>
		<description><![CDATA[Aplicación web es un conjunto de páginas HTML transmitidas por HTTP. ASP.NET es un framework/ambiente para el desarrollo de aplicaciones web de manera similar a las aplicaciones de escritorio. IIS: FTP, SMTP, NNTP, HTTP/HTTPS. HTML Forms -&#62; &#60;form&#62;&#60;/form&#62; Submit -&#62; Postback Method: {post, get} Web Form componente fundamental de ASP.NET. (.aspx) Es una página en [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Aplicación web</strong> es un conjunto de páginas HTML transmitidas por HTTP.<br />
<strong>ASP.NET</strong> es un framework/ambiente para el desarrollo de aplicaciones web de manera similar a las aplicaciones de escritorio.</p>
<hr /><strong>IIS</strong>: FTP, SMTP, NNTP, HTTP/HTTPS.</p>
<hr /><strong>HTML Forms</strong> -&gt; &lt;form&gt;&lt;/form&gt;<br />
Submit -&gt; <strong>Postback</strong><br />
Method: {post, get}</p>
<hr /><strong>Web Form</strong> componente fundamental de ASP.NET. (<strong>.aspx</strong>)</p>
<ul>
<li> Es una página en lenguaje de marcas.</li>
<li> Indenpendencia del cliente.</li>
<li> Permite utilizar cualquier lenguaje .NET.</li>
<li> Permite desarrollar servicios web XML.</li>
<li> Es compilado.</li>
<li> Actualizado sin reiniciar.</li>
</ul>
<p><strong>Code Behind</strong>: asociados a las <strong>Web Forms</strong> con la implementación del comportamiento del lado del servidor.  Se enrriquece con el aprovechamiento de <strong>Partial Class</strong>.</p>
<hr /><strong>Archivos de configuración</strong> en XML.</p>
<ul>
<li><strong>web.config</strong>: información común a toda la <strong>aplicación</strong>.</li>
<li> <strong>machine.config</strong>: por <strong>servidor</strong>.</li>
<li> <strong>global.asax</strong>: <strong>eventos </strong>a nivel aplicación: {<span style="font-family: courier new,courier;">Application_Start, Application_End, Session_Start, Session_End</span>}</li>
</ul>
<hr /><strong>Controles de servidor HTML</strong>: componentes que se ejecutan del lado del servidor.</p>
<ul>
<li> Encapsulan parte de la interfaz de usuario.</li>
<li> runat=&#8221;server&#8221;.</li>
<li> Mantienen su estado (<strong>Viewstate</strong>): a nivel de control, página o aplicación.</li>
<li> Atributos Id, Text.</li>
</ul>
<p>El <strong>ViewState </strong>por defecto viene activo para formularios, puede activarse con la propiedad <strong>EnableViewState</strong>.</p>
<hr /><strong>Controles de servidor Web</strong>: Web Controls.</p>
<ul>
<li> Sólo accesibles desde el servidor.</li>
<li> No corresponden únicamente con los HTML.</li>
<li> Utilizan un namespace XML diferente del por defecto.</li>
</ul>
<hr /><strong>Validadores</strong>: validan el contenido de campos del usuario:</p>
<ul>
<li><span style="font-family: arial,helvetica,sans-serif;">Validadores mas utilizados.<br />
</span></p>
<ul>
<li><span style="font-family: courier new,courier;">RequiredFieldValidator.</span></li>
<li><span style="font-family: courier new,courier;"> CompareValidator.</span></li>
<li><span style="font-family: courier new,courier;"> RangeValidator.</span></li>
<li><span style="font-family: courier new,courier;"> RegularExpressionValidator.</span></li>
<li><span style="font-family: courier new,courier;"> CustomValidator.</span></li>
<li><span style="font-family: courier new,courier;"> ValidationSummary.</span></li>
</ul>
</li>
<li><strong>Page.IsValid</strong> -&gt; verifica si se cumplieron todas las validaciones.</li>
<li>No disponible en Init ni Load.</li>
</ul>
<hr /><strong>Controles de servidor</strong>: UI rica encapsulada.</p>
<p><strong>Controles de usuario</strong>:</p>
<ul>
<li>Reutilización de código y componentes UI.</li>
<li> Extensión .ascx.</li>
<li> Escritos en HTML y código xxx.NET.</li>
<li> <span style="font-family: courier new,courier;">&lt;%@ Control Language=&#8221;xxx&#8221; %&gt;</span></li>
<li> Autocontenidos.</li>
<li> Escritos en diversos lenguajes.</li>
<li> Se deben registrar.<br />
<span style="font-family: courier new,courier;">&lt;%@Register TagPrefix=&#8221;MiPrefix&#8221; TagName=&#8221;MiEtiqueta&#8221; Src=&#8221;header.ascx&#8221; %&gt;</span></li>
<li> Para ser utilizados.<br />
<span style="font-family: courier new,courier;">&lt;MiPrefix:MiEtiqueta id=“MiId” runat=“server”&gt; &lt;/MiPrefix:MiEtiqueta&gt;</span></li>
<li> Se convierten en un objeto.</li>
</ul>
<hr />Eventos de un Web Form:</p>
<ul>
<li>Evento en el cliente.</li>
<li> Envío de mensaje.</li>
<li> Procesamiento del mensaje.</li>
<li> Ejecución del manejador adecuado.</li>
<li> Envío de respuesta al cliente (Post Back).</li>
</ul>
<hr />Manejo de eventos:</p>
<ul>
<li><strong>Cliente</strong>: en el componente se <strong>especifica su manejador</strong>: <span style="font-family: courier new,courier;">onClick=&#8217;botonClick&#8217;</span></li>
<li> <strong>Servidor</strong>: un método<strong> Code Behind </strong>maneja el evento: <span style="font-family: courier new,courier;">protected void botonClick(object sender, EventArgs e)</span>.</li>
</ul>
<hr /><strong>Ciclo de vida de una página</strong>:</p>
<ul>
<li>Inicialización de objetos</li>
<li>Carga View State</li>
<li>Procesa datos del post</li>
<li>Carga de la página</li>
<li>Eventos Post Back</li>
<li>Graba View State</li>
<li>Render</li>
<li> UnLoad</li>
</ul>
<hr /><strong>Autenticación de usuario</strong>:</p>
<ul>
<li> Windows.</li>
<li> Formularios (personalizado).</li>
<li> MS Passport.</li>
</ul>
<p>Utiliza un ticket de autenticación -&gt; cookie.</p>
<hr />Mecanismos para <strong>mantener el estado</strong>:</p>
<ul>
<li><strong>Application state</strong>: global, accesible desde toda la aplicación.  Objeto <span style="font-family: courier new,courier;">Application</span>.</li>
<li><strong> Session state</strong>: limitado a la sesión del navegador.  Objeto <span style="font-family: courier new,courier;">Session</span>.</li>
<li><strong> View state</strong>: entre las solicitudes de la misma página (campos de formulario).  Implementado mediante un campo oculto del formulario.</li>
</ul>
<hr /><strong>Master Pages</strong>: plantillas generales.</p>
<ul>
<li> Directiva <strong>@Master</strong> en lugar de <strong>@Page</strong>: <span style="font-family: courier new,courier;">&lt;%@ Master Language=&#8221;C#&#8221; CodeFile=&#8221;MasterPage.master.cs&#8221;   Inherits=&#8221;MasterPage&#8221; %&gt;</span></li>
</ul>
<p>Las páginas de contenido seleccionan su <strong>Master Page</strong> con el atributo <strong>MasterPageFile </strong>de la directiva <strong>@Page</strong>.</p>
<hr /><strong>Skin</strong>: definiciones de formato y estilo para los controles de servidor.  Archivos .skin.<br />
<strong>Themes</strong>: paquetes de skins.  Incluyen recursos: CSS, imágenes, etc.  Carpeta APP_Themes.<br />
Son configurables a nivel de máquina (Machine.config), aplicación (web.config) o página (@Page).</p>
<hr /><strong>Enlace de datos</strong>: relaciona a un control que despliega datos con el objeto que administra su fuente.</p>
<ul>
<li><strong>ObjectDataSource</strong>: control -&gt; capa del negocio.</li>
<li> <strong>SqlDataSource</strong>: control -&gt; base de datos relacional.</li>
<li> <strong>XmlDataSource</strong>: control -&gt; fuente XML.</li>
</ul>
<p>Controles visualizadores: DataGridView, DetailsView, FormView.</p>
<hr /><strong>Compilación</strong> de sitios ASP.NET:</p>
<ul>
<li>La compilación se realiza de manera automática según es solicitada por request del cliente.</li>
<li> Es posible realizar la pre-compilación del sitio con el comando Aspnet_compiler.exe para su distribución binaria.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2008/09/resumen-aplicaciones-web-con-aspnet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Serialización de objetos en XML con C#.NET</title>
		<link>http://blog.jorgeivanmeza.com/2008/09/serializacion-de-objetos-en-xml-con-cnet/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=serializacion-de-objetos-en-xml-con-cnet</link>
		<comments>http://blog.jorgeivanmeza.com/2008/09/serializacion-de-objetos-en-xml-con-cnet/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 04:22:08 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[XML]]></category>
		<guid isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=681</guid>
		<description><![CDATA[De manera análoga a como en Java es posible realizar la serialización de clases a XML, encontré que también es posible hacerlo en C#.NET.  Para esto es necesario que la clase a ser serializada exponga los atributos que desea publicar a través de propiedades. Para la demostración creé una clase XMLSerializable de la cual heredarán [...]]]></description>
			<content:encoded><![CDATA[<p>De manera análoga a como en Java es posible realizar la <a href="http://www.jorgeivanmeza.com/blog/2008/08/17/serializacion-con-xml/" target="_blank">serialización de clases a XML</a>, encontré que también es posible hacerlo en C#.NET.  Para esto es necesario que la clase a ser serializada exponga los atributos que desea publicar a través de propiedades.</p>
<p>Para la demostración creé una clase <span style="font-family: courier new,courier;">XMLSerializable</span> de la cual heredarán las otras que requieran de este tipo de serialización.  Esta clase abstracta provee los métodos load y save para realizar automáticamente la serialización de sus hijos.</p>
<p>La serialización de los objetos se realiza con el siguiente código.</p>
<pre lang="C#">        public void save(String filename)
        {
            // Creates the writing stream
            StreamWriter w = new StreamWriter(filename);
            // Creates the XML serializer with its type
            XmlSerializer s = new XmlSerializer(this.GetType());
            // Serializes the object (this self -&gt; son)
            s.Serialize(w, this);
            // Closes the output stream
            w.Close();
        }</pre>
<p>La carga de objetos serializados requiere de un par de verificiones adicionales.</p>
<pre lang="C#">        public bool load(String filename)
        {
            bool success = false;
            // Checks if the source file exists, otherwise there is nothing to do
            if (File.Exists(filename))
            {
                // Creates the reading stream
                StreamReader sr = new StreamReader(filename);
                // Creates the text reader from the stream
                XmlTextReader xr = new XmlTextReader(sr);
                // Creates the XML (de)serializer with its type
                XmlSerializer xs = new XmlSerializer(this.GetType());
                // Temporary storage object
                object c;
                // Checks if the received data can be deserialized
                if (xs.CanDeserialize(xr))
                {
                    // Deserialize the incoming data
                    c = xs.Deserialize(xr);
                    // Gets the type (definition) of the object
                    Type t = this.GetType();
                    // Retrieve the exposed attributes by properties
                    PropertyInfo[] properties = t.GetProperties();
                    // Walks thru all properties and loads its values on
                    // the local attributes
                    foreach (PropertyInfo p in properties)
                    {
                        p.SetValue(this, p.GetValue(c, null), null);
                    }
                    success = true;
                }
                // Closes the reader and the stream
                xr.Close();
                sr.Close();
            }
            return success;
        }</pre>
<p>Con estas facilidades se crea una clase Empleado con atributos básicos.</p>
<pre lang="C#">    public class Empleado : XMLSerializable
    {
        ////////////////////////////////////////////////////////////////
        private int      codigo;
        private String   nombre;
        private float    salario;
        private DateTime fechaNacimiento;
        ////////////////////////////////////////////////////////////////
        // Resto del codigo
    }</pre>
<p>Es necesario para la serialización que el objeto tenga propiedades de los atributos a exponer.</p>
<pre lang="C#">        public int Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }
        public String Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        public float Salario
        {
            get { return salario; }
            set { salario = value; }
        }
        public DateTime FechaNacimiento
        {
            get { return fechaNacimiento; }
            set { fechaNacimiento = value; }
        }</pre>
<p>También es necesario que la clase cuente con un constructor sin parámetros además de los que requiera normalmente.</p>
<pre lang="C#">        public Empleado()
        {
            this.codigo          = -1;
            this.nombre          = "Sin nombre";
            this.salario         = -1;
            this.fechaNacimiento = new DateTime(1990, 01, 01);
        }
        ////////////////////////////////////////////////////////////////
        public Empleado(int codigo, String nombre, float salario, DateTime fechaNacimiento)
        {
            this.codigo          = codigo;
            this.nombre          = nombre;
            this.salario         = salario;
            this.fechaNacimiento = fechaNacimiento;
        }</pre>
<p>Por facilidad también se sobreescribió el método ToString() para generar su representación en cadena.</p>
<pre lang="C#">        override public String ToString()
        {
            return String.Format("[Empleado: codigo = {0}, nombre = \"{1}\", salario = ${2}, fechaNacimiento = {3}]",
                                    this.codigo, this.nombre, this.salario, this.fechaNacimiento);
        }</pre>
<p>Con todo esto, la aplicación de prueba crea en el primer paso a un objeto Empleado y le da valores iniciales a sus atributos, después de esto solicita su serialización.</p>
<pre lang="C#">            Empleado empleado = new Empleado(123, "Pepito Pimentón", 123456.789f, DateTime.Now);
            empleado.save("empleado.xml");</pre>
<p>Posteriormente se crea un segundo Empleado que almacenará la información recuperada de la serialización.  Si la prueba tiene éxito, la información de los dos Empleados deberá coincidir.</p>
<pre lang="C#">            Empleado empleado2 = new Empleado();
            empleado2.load("empleado.xml");</pre>
<p>La información presentada a través de salida estándar al ejecutar la aplicación de demostración deberá ser algo similar a lo siguiente.</p>
<pre lang="bash">Writing Object: [Empleado: codigo = 123, nombre = "Pepito Pimentón", salario = $123456,8, fechaNacimiento = 14/09/2008 11:12:10 p.m.]
Read Object:    [Empleado: codigo = 123, nombre = "Pepito Pimentón", salario = $123456,8, fechaNacimiento = 14/09/2008 11:12:10 p.m.]</pre>
<p>El documento XML generado es bastante explícito y fácil de realizar su manipulación manual si se llegara a requerir.</p>
<pre lang="xml"><?xml version="1.0" encoding="utf-8"?>
<Empleado xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Codigo>123</Codigo>
  <Nombre>Pepito Pimentón</Nombre>
  <Salario>123456.789</Salario>
  <FechaNacimiento>2008-09-14T22:39:52.888-05:00</FechaNacimiento>
</Empleado></pre>
<p>Enlaces: </p>
<ul>
<li><a href="http://demo.jorgeivanmeza.com/NET/SerializacionXML/0.1/DemoSerializacionNET_0.1.zip">Fuentes DemoSerializaciónXMLNET 0.1</a>.</li>
<li><a target="_top" href="http://www.codeproject.com/KB/cs/GenericXmlSerializition.aspx">Generic XML Serialization in C#</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2008/09/serializacion-de-objetos-en-xml-con-cnet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Kid&#8217;s Corner</title>
		<link>http://blog.jorgeivanmeza.com/2008/07/microsoft-kids-corner/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=microsoft-kids-corner</link>
		<comments>http://blog.jorgeivanmeza.com/2008/07/microsoft-kids-corner/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 20:17:04 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[VisualBasic]]></category>
		<guid isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=447</guid>
		<description><![CDATA[Buscando información en internet para el próximo capítulo de la serie de documentos J2ME encontré algo interesante del otro lado de la de las plataformas de desarrollo. Microsoft Kid&#8217;s Corner es una sección de documentación para enseñarle a programar a niños pequeños utilizando, obviamente, las herramientas de .NET que el mismo Microsoft desarrolla. Sin profundizar [...]]]></description>
			<content:encoded><![CDATA[<p>Buscando información en internet para el próximo capítulo de la serie de documentos J2ME encontré algo interesante del otro lado de la de las plataformas de desarrollo.</p>
<p><a href="http://msdn.microsoft.com/es-es/beginner/bb308754(en-us).aspx" target="_blank">Microsoft Kid&#8217;s Corner</a> es una sección de documentación para enseñarle a programar a niños pequeños utilizando, obviamente, las herramientas de .NET que el mismo Microsoft desarrolla.</p>
<p>Sin profundizar en estos temas por ahora, se encuentran ya disponibles dos libros electrónicos acerca de la programación con C# y VB, así como varios cursos didácticos relacionados con estas tecnologías y haciendo énfasis en el desarrollo de aplicaciones de escritorio y aplicaciones web.</p>
<p>Para algo podrán servir en el futuro estos documentos, todo lo relacionado con educación es siempre bienvenido.</p>
<p>Enlace: <a href="http://msdn.microsoft.com/es-es/beginner/bb308754(en-us).aspx" target="_blank">Microsoft Kid&#8217;s Corner</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2008/07/microsoft-kids-corner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Servicio web entre C#.NET y Java</title>
		<link>http://blog.jorgeivanmeza.com/2008/05/servicio-web-entre-cnet-y-java/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=servicio-web-entre-cnet-y-java</link>
		<comments>http://blog.jorgeivanmeza.com/2008/05/servicio-web-entre-cnet-y-java/#comments</comments>
		<pubDate>Mon, 05 May 2008 15:32:30 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Educación]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux/Solaris/BSD]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Visual Studio Express]]></category>
		<category><![CDATA[WebService]]></category>
		<guid isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=273</guid>
		<description><![CDATA[Aproveché este fin de semana para en un par de horas desarrollar un ejemplo de servicio web escrito en C#.NET para ser consumido por un cliente desarrollado en Java, utilizando las herramientas gratuitas Microsoft Visual Web Developer 2008 Express Edition y NetBeans 6.0.1 respectivamente. El servicio como tal es muy simple, envía correo a través [...]]]></description>
			<content:encoded><![CDATA[<p>Aproveché este fin de semana para en un par de horas desarrollar un ejemplo de servicio web escrito en <strong>C#.NET</strong> para ser consumido por un cliente desarrollado en <strong>Java</strong>, utilizando las herramientas gratuitas <strong>Microsoft Visual Web Developer 2008 Express Edition</strong> y <strong>NetBeans 6.0.1</strong> respectivamente.</p>
<p>El servicio como tal es muy simple, envía correo a través de un servidor SMTP, sin embargo es un ejercicio académico interesante.  La <a href="http://demo.jorgeivanmeza.com/NET/WS_Taller/0.1/Tutorial.pdf">documentación del desarrollo</a> la escribí a manera de guía así que podrá ser de utilidad para quienes esten interesados en aprender a desarrollar este tipo de aplicaciones.</p>
<p>Enlaces:</p>
<ol>
<li><a href="http://demo.jorgeivanmeza.com/NET/WS_Taller/0.1/Tutorial.pdf" target="_blank">Guía de desarrollo</a></li>
<li><a href="http://demo.jorgeivanmeza.com/NET/WS_Taller/0.1/WS_Taller.zip">Código fuente</a>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2008/05/servicio-web-entre-cnet-y-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET Development Server desde línea de comando</title>
		<link>http://blog.jorgeivanmeza.com/2008/04/aspnet-development-server-desde-linea-de-comando/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=aspnet-development-server-desde-linea-de-comando</link>
		<comments>http://blog.jorgeivanmeza.com/2008/04/aspnet-development-server-desde-linea-de-comando/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 03:13:20 +0000</pubDate>
		<dc:creator>jimezam</dc:creator>
				<category><![CDATA[Desarrollo de software]]></category>
		<category><![CDATA[Humor]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<guid isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=272</guid>
		<description><![CDATA[El ASP.NET Development Server es el pequeño servidor ASP.NET que trae consigo el Framework de .NET y el Visual Studio Express para realizar la depuración y pruebas de este tipo de aplicaciones. Esta semana descubrí que es posible ejecutarlo desde la línea de comando, es decir, no es necesario iniciar el Visual Web Developer Express [...]]]></description>
			<content:encoded><![CDATA[<p>El <strong>ASP.NET Development Server</strong> es el pequeño servidor ASP.NET que trae consigo el Framework de .NET y el <strong>Visual Studio Express</strong> para realizar la depuración y pruebas de este tipo de aplicaciones.  Esta semana descubrí que es posible ejecutarlo desde la línea de comando, es decir, no es necesario iniciar el <strong>Visual Web Developer Express</strong> completo para utilizarlo.  Para esto se debe ejecutar el siguiente comando en una ventana de <strong>Símbolo del sistema</strong>.</p>
<pre>prompt&gt; set DEVSRV=C:\Program Files\Common Files\microsoft shared\DevServer\9.0\</pre>
<pre>prompt&gt; "%DEVSRV%"\webdev.webserver.exe /port:8080 /path:"RUTA_PROYECTO" /vpath:/SERVICIO</pre>
<p>Utilizo la variable <span style="font-family: courier new,courier;">%DEVSRV%</span> para evitar digitar la ruta del servidor (<span style="font-family: courier new,courier;">webdev.webserver.exe</span>) en cada llamado.  Aparentemente su ubicación puede variar según la versión del .NET Framework que se tenga instalada.</p>
<p>En la segunda línea se debe reemplazar la cadena <span style="font-family: courier new,courier;">RUTA_PROYECTO</span> con la ubicación del serivicio web: <span style="font-family: courier new,courier;">G:\Proyectos\WS_Taller\servicio</span> por ejemplo y la cadena <span style="font-family: courier new,courier;">SERVICIO</span> por la ruta virtual web bajo la cual quedará publicada el webservice.  Si no se especifica un puerto se utiliza el puerto 80 por defecto.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jorgeivanmeza.com/2008/04/aspnet-development-server-desde-linea-de-comando/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
