<?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>3metas &#187; Technical</title>
	<atom:link href="http://www.3metas.com/es/category/blog/technical/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.3metas.com/es</link>
	<description></description>
	<lastBuildDate>Wed, 14 Jul 2010 19:16:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Imágenes del toolbar del Crystal ReportViewer no se muestran</title>
		<link>http://www.3metas.com/es/blog/technical/imagenes-del-toolbar-del-crystal-reportviewer-no-se-muestran/</link>
		<comments>http://www.3metas.com/es/blog/technical/imagenes-del-toolbar-del-crystal-reportviewer-no-se-muestran/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 20:57:02 +0000</pubDate>
		<dc:creator>Gustavo Hurtado</dc:creator>
				<category><![CDATA[3Metas Blog]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[aspnet_client]]></category>
		<category><![CDATA[Crystal ReportViewer]]></category>
		<category><![CDATA[Reporte Embebido]]></category>

		<guid isPermaLink="false">http://www.3metas.com/es/?p=583</guid>
		<description><![CDATA[Esta semana cuando uno de nuestros clientes estaba realizando las pruebas de un proyecto en asp.net que tenía un conjunto de reportes embebidos, las imágenes del toolbar del Crystal ReportViewer no se mostraban o se perdían.
Teniendo en cuenta la experiencia que habíamos tenido ya una en un cliente con algo parecido revisamos nuestro anterior post [...]]]></description>
			<content:encoded><![CDATA[<p>Esta semana cuando uno de nuestros clientes estaba realizando las pruebas de un proyecto en asp.net que tenía un conjunto de reportes embebidos, las imágenes del toolbar del Crystal ReportViewer no se mostraban o se perdían.</p>
<p>Teniendo en cuenta la experiencia que habíamos tenido ya una en un cliente con algo parecido revisamos nuestro anterior post sobre: <a href="../blog/technical/iis7/publicar-un-reporte-usando-reportviewer-embebido-en-una-pagina-aspx-y-con-iiis7/">Como publicar un reporte embebiendo ReportViewer en una página aspx sobre IIS7</a>, realizamos todos los pasos allí descritos, pero esto no solucionó el tema de las imágenes. Así que decimos investigar un poco más en internet y <a href="http://social.msdn.microsoft.com/Forums/en-US/vscrystalreports/thread/e2dc93b3-e594-4ae6-ba92-9440ccc7f6be ">nos encontramos</a> que este problema se presenta comúnmente cuando el sitio web se ha creado en una ruta de disco diferente a: <strong>..\inetpub\wwwroot</strong>, debido a que la aplicación trata de buscar los recursos que corresponden al ReportViewer en la carpeta: <strong>..\inetpub\wwwroot\aspnet_client\system_web\2_0_50727</strong></p>
<p>Así que una solución muy útil y práctica para este caso fue copiar la carpeta <strong>aspnet_client</strong> dentro de la carpeta de la aplicación, de tal forma que ahora está también en una ruta como esta: <strong>D:\\MiAplicacionWeb\aspnet_client</strong></p>
<p>El truco nos funcionó, pero de repente no es la solución no es la solución más idónea para el tema, así que si alguien conoce alguna otra forma de hacerlo, por favor ¡cuéntenos! nos gustaría mucho que la compartiera aquí.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3metas.com/es/blog/technical/imagenes-del-toolbar-del-crystal-reportviewer-no-se-muestran/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrando Visual FoxPro con Windows Communication Foundation</title>
		<link>http://www.3metas.com/es/blog/technical/wcf/integrando-visual-foxpro-con-windows-communication-foundation/</link>
		<comments>http://www.3metas.com/es/blog/technical/wcf/integrando-visual-foxpro-con-windows-communication-foundation/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 13:00:00 +0000</pubDate>
		<dc:creator>Juan Carlos Peláez</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Visual Fox Pro]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Arquitectura de Software]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Migracion de Aplicaciones]]></category>

		<guid isPermaLink="false">http://www.3metas.com/es/?p=581</guid>
		<description><![CDATA[Uno de los clientes de 3Metas tiene una base instalada muy importante de aplicaciones construidas en Visual Fox Pro 7, 8 y 9. Durante los últimos meses hemos trabajado en conjunto para desarrollar una estrategia de migración de estas aplicaciones hacia una arquitectura orientada a servicios (SOA) construida con WCF y el Framework 3.5 de [...]]]></description>
			<content:encoded><![CDATA[<p>Uno de los clientes de <a href="http://www.3metas.com/">3Metas</a> tiene una base instalada muy importante de aplicaciones construidas en Visual Fox Pro 7, 8 y 9. Durante los últimos meses hemos trabajado en conjunto para desarrollar una estrategia de migración de estas aplicaciones hacia una arquitectura orientada a servicios (SOA) construida con WCF y el Framework 3.5 de .Net.</p>
<p>Uno de los aspectos claves de un proceso como estos consiste en evitar al máximo que se siga construyendo funcionalidad en Visual Fox Pro (VFP) así que el primer paso de la estrategia consiste en la integración de VFP con servicios de Windows Communication Foundation (WCF) de forma tal que las aplicaciones actuales se vean beneficiadas de las mejores en la lógica de negocios o de nuevas funcionalidades que se construyen con la última tecnología disponible.</p>
<p>1. Lo primero que debe hacerse es construir un servicio de WCF en lo que no profundizare especialmente.</p>
<p>2. En nuestro caso una vez que tuvimos construido el servicio construimos una <a href="http://en.wikipedia.org/wiki/Facade_pattern">fachada</a> para su utilización desde VFP.</p>
<p>3. En esta fachada establecemos las referencias a los servicios por medio de la herramienta de Visual Studio, allí verificamos el tipo de conversión que se realizará sobre las colecciones genéricas. Como queremos proteger la inversión del cliente en este proyecto esta fachada deberá poderse usar desde VFP pero también desde aplicaciones desarrolladas con .Net hoy y en el futuro.</p>
<p>4. Creamos una clase que estará visibles por COM desde VFP y que será la fachada para esta herramienta.</p>
<p>5. Esta clase debe estar decorada como COM visible [ComVisible(true)] y para asegurar las opciones de Intellisense también agregamos la decoración de generación de la Interfaz [ClassInterface(ClassInterfaceType.AutoDual)]</p>
<p>6. Aunque visual Studio 2008 (VS2008) crea el constructor de forma predeterminada preferimos asegurarnos así que agregamos el constructor, tener presente aquí que el constructor no puede sobrecargarse ni recibir parámetros para evitar problemas en COM</p>
<p>7. Luego creamos los métodos que serán consumidos por VFP y se los decora como visibles para COM [ComVisible(true)].</p>
<p>8. En nuestro caso los métodos del servicio de WCF devuelven colecciones genéricas de tipos específicos, por ejemplo la colección de colores de la entidad color: [CollectionDataContract(Name = "Colores", Namespace ="http://myDomain.com/Data/2010/01")] public class Colores: Collection&lt;ColorEntity&gt; {}, para que estos métodos puedan ser consumidos desde VFP y teniendo en cuenta la restricción de COM para el manejo de genéricos se realiza una modificación al método para que no retorne la colección sino que retorno un arreglo de objetos que es algo que si puede ser manejado por VFP, la posibilidad de convertir la colección genérica en un arreglo se adiciono con LINQ, así que debe establecerse la referencia a LINQ en el proyecto y la clase, al final debe quedar algo como esto:</p>
<div class="csharpcode">
<pre><span class="lnum">   1:  </span><span class="kwrd">using</span> System;</pre>
<pre><span class="lnum">   2:  </span><span class="kwrd">using</span> System.Collections.Generic;</pre>
<pre><span class="lnum">   3:  </span><span class="kwrd">using</span> System.Linq;</pre>
<pre><span class="lnum">   4:  </span><span class="kwrd">using</span> System.Text;</pre>
<pre><span class="lnum">   5:  </span><span class="kwrd">using</span> System.Runtime.InteropServices;</pre>
<pre><span class="lnum">   6:  </span><span class="kwrd">using</span> ServicioProducto;</pre>
<pre><span class="lnum">   7:  </span></pre>
<pre><span class="lnum">   8:  </span><span class="kwrd">namespace</span> ServicesFacade</pre>
<pre><span class="lnum">   9:  </span>{</pre>
<pre><span class="lnum">  10:  </span></pre>
<pre><span class="lnum">  11:  </span>    [ComVisible(<span class="kwrd">true</span>)]</pre>
<pre><span class="lnum">  12:  </span>    [ClassInterface(ClassInterfaceType.AutoDual)]</pre>
<pre><span class="lnum">  13:  </span>    <span class="kwrd">public</span> <span class="kwrd">class</span> ProductoFacadeVFP</pre>
<pre><span class="lnum">  14:  </span>    {</pre>
<pre><span class="lnum">  15:  </span>        <span class="rem">//default constructor</span></pre>
<pre><span class="lnum">  16:  </span>        <span class="kwrd">public</span> ProductoFacadeVFP() {}</pre>
<pre><span class="lnum">  17:  </span></pre>
<pre><span class="lnum">  18:  </span>        <span class="rem">/// &lt;summary&gt;    </span></pre>
<pre><span class="lnum">  19:  </span>        <span class="rem">/// Metodo trae los colores del Sistema</span></pre>
<pre><span class="lnum">  20:  </span>        <span class="rem">/// &lt;/summary&gt;</span></pre>
<pre><span class="lnum">  21:  </span>        <span class="rem">/// &lt;returns&gt;&lt;/returns&gt;</span></pre>
<pre><span class="lnum">  22:  </span>        [ComVisible(<span class="kwrd">true</span>)]</pre>
<pre><span class="lnum">  23:  </span>        <span class="kwrd">public</span> Color[] GetColores()</pre>
<pre><span class="lnum">  24:  </span>        {</pre>
<pre><span class="lnum">  25:  </span>            Colores colores = <span class="kwrd">null</span>;</pre>
<pre><span class="lnum">  26:  </span></pre>
<pre><span class="lnum">  27:  </span>            <span class="kwrd">try</span></pre>
<pre><span class="lnum">  28:  </span>            {</pre>
<pre><span class="lnum">  29:  </span>                ServicioProductoClient srv = <span class="kwrd">new</span> ServicioProductoClient();</pre>
<pre><span class="lnum">  30:  </span>                colores = srv.GetColores();</pre>
<pre><span class="lnum">  31:  </span>                srv.Close();</pre>
<pre><span class="lnum">  32:  </span>            }</pre>
<pre><span class="lnum">  33:  </span>            <span class="kwrd">catch</span> (Exception ex)</pre>
<pre><span class="lnum">  34:  </span>            {</pre>
<pre><span class="lnum">  35:  </span>                <span class="kwrd">throw</span> ex;</pre>
<pre><span class="lnum">  36:  </span>            }</pre>
<pre><span class="lnum">  37:  </span></pre>
<pre><span class="lnum">  38:  </span>            <span class="kwrd">return</span> colores.ToArray();</pre>
<pre><span class="lnum">  39:  </span>        }</pre>
<pre><span class="lnum">  40:  </span>     }</pre>
<pre><span class="lnum">  41:  </span>}</pre>
</div>
<p><!--.csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<p>9. Al compilar este proyecto se obtendrá una DLL y un archivo de configuración que corresponde a la forma como se establecerá la comunicación con el servicio (Address y Bindings), estos dos archivos son los que deben entregarse a los desarrolladores de VFP para que consuman los servicios.</p>
<p>Completada la fase de preparación y construcción de los servicios y su fachada los desarrolladores de VFP ya pueden integrar estos componentes en sus aplicaciones, para ello deben realizarse las siguientes actividades:</p>
<p>1. Registrar la Interfaz COM de la fachada de los servicios por medio del comando <a href="http://msdn.microsoft.com/en-us/library/tzat5yw6%28VS.71%29.aspx">regasm</a>, idealmente debería utilizarse el parámetro CODEBASE, la instrucción sería algo como esto si se corre desde el directorio del Framework 2.0 de .Net: <strong>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727&gt;RegAsm.exe &#8220;C:\3Metas\Clients\Cliente\Proyecto\ServiceFacade\ ServicesFacade.dll&#8221; /CODEBASE</strong></p>
<p>2. Uno de los aspectos más importantes de WCF es la separación de la configuración del servicio del código, el address y el binding del servicio que están definidos en el archivo de configuración, este archivo de configuración se generó al compilar la fachada. Para cada proyecto en el que va a utilizarse la fachada se debe copiar el archivo de configuración del servicio en la misma ruta del ejecutable de la aplicación de VFP o para depuración en la ruta donde reside el proyecto, este archivo debe renombrarse con el nombre de la aplicación de VFP y la extensión .config, en nuestro caso queda algo como esto: aplicaciondelcliente.exe.config. Muchos de los errores que se pueden presentar al usar la fachada tienen que ver con el hecho de que la aplicación no encuentra el archivo de configuración.</p>
<p>3. Registrada la interfaz COM de la fachada y renombrado y ubicado correctamente el archivo de configuración del servicio ya está todo listo para que el desarrollador pueda utilizar los servicios desde VFP. Solo debe utilizar el método CREATEOBJECT con el nombre de la clase de la fachada. Por ejemplo:</p>
<div class="csharpcode">
<pre><span class="lnum">   1:  </span>LOCAL Colores</pre>
<pre><span class="lnum">   2:  </span>LOCAL MyColor <span class="kwrd">as</span> ServiceFacade.ServicioProducto.Color</pre>
<pre><span class="lnum">   3:  </span>LOCAL ProductoFacade <span class="kwrd">as</span> ServicesFacade.ProductoFacadeVFP</pre>
<pre><span class="lnum">   4:  </span></pre>
<pre><span class="lnum">   5:  </span>ProductoFacade = CREATEOBJECT(<span class="str">"ServicesFacade.ProductoFacadeVFP"</span>)</pre>
<pre><span class="lnum">   6:  </span>Colores = ProductoFacade.GetColores()</pre>
<pre><span class="lnum">   7:  </span></pre>
<pre><span class="lnum">   8:  </span>OPEN DATABASE <span class="str">"C:\3Metas\Clients\Integration\sampledata"</span> EXCLUSIVE</pre>
<pre><span class="lnum">   9:  </span>USE color IN 0 EXCLUSIVE ALIAS tblColor</pre>
<pre><span class="lnum">  10:  </span>ZAP</pre>
<pre><span class="lnum">  11:  </span></pre>
<pre><span class="lnum">  12:  </span>FOR EACH Item IN Colores</pre>
<pre><span class="lnum">  13:  </span>    INSERT INTO color (ColorId) VALUES (Item.ColorId)</pre>
<pre><span class="lnum">  14:  </span>ENDFOR</pre>
</div>
<p>Listo, el equipo de desarrolladores de VFP está consumiendo servicios de WCF.</p>
<p><strong> </strong></p>
<p><strong>Aclaraciones importantes: </strong></p>
<p>· Con Visual Fox Pro se pueden consumir servicios Web, así que si se exponen los servicios de WCF con un binding básico HTTP el servicio de WCF se ve exactamente igual que un servicio web y por tanto se consume sin problemas desde FoxPro, sin embargo desde la perspectiva técnica puede llegar a tener problemas con objetos de negocios que VFP no entienda o que el servicio de WCF este expuesto por otro binding lo que haría imposible consumirlo desde VFP nativo, en nuestro caso las aplicaciones no estaba construidas consumiendo servicios web y el cliente no quería invertir tiempo de los desarrolladores en que aprendieran a consumir servicios web desde VFP, de allí tenía sentido que ellos consumieran objetos COM que les son familiares.</p>
<p>Al crearse el proyecto de fachada podría configurarse por medio de VS2008 la conversión de las colecciones genéricas en arreglos (ARRAYS). Sin embargo, eso haría que la fachada perdiera tipos de datos que podrían ser utilizados por clientes de .Net</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3metas.com/es/blog/technical/wcf/integrando-visual-foxpro-con-windows-communication-foundation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>IIS7 más WCF con otros Bindings</title>
		<link>http://www.3metas.com/es/blog/technical/wcf/iis7-ms-wcf-con-otros-bindings/</link>
		<comments>http://www.3metas.com/es/blog/technical/wcf/iis7-ms-wcf-con-otros-bindings/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 20:18:00 +0000</pubDate>
		<dc:creator>Juan Carlos Peláez</dc:creator>
				<category><![CDATA[IIS7]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://www.3metas.com/es/blog/technical/wcf/iis7-ms-wcf-con-otros-bindings/</guid>
		<description><![CDATA[Complemento de otro post en el que Roberto Alvarado ya había hecho un abrebocas del tema.
En IIS7 se pueden usar otros bindings como por ejemplo net.tcp y named.pipes para acceder a servicios de WCF (en IIS6 sólo es posible usar http Binding, para usar uno de los otros se debe hostear el servicio en otro [...]]]></description>
			<content:encoded><![CDATA[<p>Complemento de otro post en el que Roberto Alvarado ya había hecho <a href="http://www.3metas.com/es/blog/technical/instalacion-de-servicios-windows-communication-foundation-en-un-servidor-iis-7/">un abrebocas del tema</a>.</p>
<p>En IIS7 se pueden usar otros bindings como por ejemplo net.tcp y named.pipes para acceder a servicios de WCF (en IIS6 sólo es posible usar http Binding, para usar uno de los otros se debe hostear el servicio en otro tipo de host como un servicio Windows o una aplicación de consola) y justo esto es una de las ventajas de IIS7, se utiliza todo lo bueno del mundo del IIS como el reciclaje de aplicaciones pero con protocolos muchos mejores para ciertos escenarios como net.tcp.</p>
<p>Para habilitar estos protocolos en IIS7 debe ir al panel de control, programs, turn Windows Features On/Off y verificar que tenga seleccionadas por lo menos las opciones que aparecen en la imagen, en especial lo que tiene que ver con la activación de servicios sobre protocolos no HTTP.</p>
<p><a href="http://www.3metas.com/es/wp-content/uploads/2010/03/WCFActivation.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="WCF Activation" src="http://www.3metas.com/es/wp-content/uploads/2010/03/WCFActivation_thumb.jpg" border="0" alt="WCF Activation" width="444" height="424" /></a></p>
<p>Con esta habilitado ya se puede ir al IIS y seleccionar los bindings y protocolos correctos como se muestra en las dos imágenes siguientes:</p>
<p><a href="http://www.3metas.com/es/wp-content/uploads/2010/03/IISBinding.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="IISBinding" src="http://www.3metas.com/es/wp-content/uploads/2010/03/IISBinding_thumb.jpg" border="0" alt="IISBinding" width="444" height="278" /></a></p>
<p><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="IISEnabledProtocols" src="http://www.3metas.com/es/wp-content/uploads/2010/03/IISEnabledProtocols_thumb.jpg" border="0" alt="IISEnabledProtocols" width="445" height="279" /></p>
<p>Ahora puede Hospedar servicios de WCF con bindings como net.tcp que se usa para escenarios de red de área local o named.pipes que se usa para comunicaciones interprocesos en la misma máquina.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3metas.com/es/blog/technical/wcf/iis7-ms-wcf-con-otros-bindings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalación de Servicios Windows Communication Foundation en un Servidor IIS 7</title>
		<link>http://www.3metas.com/es/blog/technical/instalacion-de-servicios-windows-communication-foundation-en-un-servidor-iis-7/</link>
		<comments>http://www.3metas.com/es/blog/technical/instalacion-de-servicios-windows-communication-foundation-en-un-servidor-iis-7/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 23:27:09 +0000</pubDate>
		<dc:creator>Roberto Alvarado</dc:creator>
				<category><![CDATA[3Metas Blog]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[3Metas]]></category>
		<category><![CDATA[IIS 7]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[Windows Communication Foundation]]></category>

		<guid isPermaLink="false">http://www.3metas.com/es/?p=520</guid>
		<description><![CDATA[En 3Metas utilizamos las últimas tecnologías en desarrollo de software, por eso muchas de nuestras aplicaciones trabajan bajo la arquitectura de servicios (SOA).  Por esta razón en uno de nuestros clientes usamos...]]></description>
			<content:encoded><![CDATA[<p>En 3Metas utilizamos las últimas tecnologías en desarrollo de software, por eso muchas de nuestras aplicaciones trabajan bajo la arquitectura de servicios (SOA).  Por esta razón en uno de nuestros clientes usamos servicios de Windows Communication Foundation para compartir datos entre diferentes plataformas y aplicaciones como por ejemplo Windows Mobile, Aplicaciones WPF, Aplicaciones Silverlight y ASP.NET.</p>
<p>Una de las tareas que debemos realizar después de crear estos servicios es la publicación de los mismos en un servidor web para que sean expuestos y utilizados por las diferentes aplicaciones. En este pequeño tutorial publico los servicios en un servidor web IIS 7 con Windows Server 2008.</p>
<p>1. Se crea un sitio web, se le asigna un puerto específico, en el caso de nuestro cliente,  es el puerto 81 el que utilizan los servicios  WCF. Sin embargo podemos escoger cualquier puerto y verificar que este puerto este abierto en el firewall si los servicios van a  estar expuestos a internet.</p>
<p>2. Se copian los archivos publicados de la solución de los servicios en una carpeta específica, que es la misma que se ha definido al momento de crear el sitio web en el IIS.</p>
<p>3. Nos aseguramos que el namespace  ServiceModel este activo y registrado en nuestro servidor IIS, para ello abrimos la consola de comandos en modo administrador y ejecutamos el siguiente comando: <em><strong>&#8220;%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe&#8221; -r –y</strong></em></p>
<p>4. La ejecución de este comando nos muestra unos resultados como parece en la siguiente figura</p>
<p style="text-align: center;"><a rel="attachment wp-att-552" href="http://www.3metas.com/es/blog/technical/instalacion-de-servicios-windows-communication-foundation-en-un-servidor-iis-7/attachment/image001/"><img class="size-full wp-image-552  aligncenter" title="image001" src="http://www.3metas.com/es/wp-content/uploads/2010/03/image001.jpg" alt="" width="299" height="248" /></a></p>
<p>5. Se revisan los Handler Mappings como se ve en la figura:</p>
<p style="text-align: center;"><a rel="attachment wp-att-553" href="http://www.3metas.com/es/blog/technical/instalacion-de-servicios-windows-communication-foundation-en-un-servidor-iis-7/attachment/image002/"><img class="size-full wp-image-553  aligncenter" title="image002" src="http://www.3metas.com/es/wp-content/uploads/2010/03/image002.jpg" alt="" width="300" height="180" /></a></p>
<p>6. Doble clic sobre Handler Mapping, aparece la siguiente pantalla:</p>
<p style="text-align: center;"><a rel="attachment wp-att-554" href="http://www.3metas.com/es/blog/technical/instalacion-de-servicios-windows-communication-foundation-en-un-servidor-iis-7/attachment/image003/"><img class="size-full wp-image-554  aligncenter" title="image003" src="http://www.3metas.com/es/wp-content/uploads/2010/03/image003.jpg" alt="" width="301" height="180" /></a></p>
<p>7. En esta pantalla revisar si existen las entradas para la definición de los *.svc, ya que en nuestro caso los Hosting de los servicios WCF son en IIS con ASP.NET.</p>
<p>8. Para crear estos handlers hacemos clic derecho sobre la lista, nos muestra el siguiente menú:</p>
<p style="text-align: center;"><a rel="attachment wp-att-555" href="http://www.3metas.com/es/blog/technical/instalacion-de-servicios-windows-communication-foundation-en-un-servidor-iis-7/attachment/image004/"><img class="size-full wp-image-555  aligncenter" title="image004" src="http://www.3metas.com/es/wp-content/uploads/2010/03/image004.jpg" alt="" width="224" height="280" /></a></p>
<p>9. Seleccionamos la primera opción  Add Managed Handler que nos muestra la siguiente pantalla en la cual colocamos los datos a ingresar:</p>
<p style="text-align: center;"><a rel="attachment wp-att-556" href="http://www.3metas.com/es/blog/technical/instalacion-de-servicios-windows-communication-foundation-en-un-servidor-iis-7/attachment/image005/"><img class="size-full wp-image-556  aligncenter" title="image005" src="http://www.3metas.com/es/wp-content/uploads/2010/03/image005.jpg" alt="" width="300" height="249" /></a></p>
<p>8. Los valores a colocar para Request path: <em><span style="text-decoration: underline;">*.svc</span></em>, Type: <em><span style="text-decoration: underline;">System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</span></em>, Name: <em><span style="text-decoration: underline;">svc-Integrated</span></em>. Las restricciones las dejamos por default. Este es el primer registro. Debemos colocar otros 2 registros.</p>
<p>9. Los valores a colocar para Request path: <em><span style="text-decoration: underline;">*.svc</span></em>, Type: <em><span style="text-decoration: underline;">%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll</span></em>, Name: <em><span style="text-decoration: underline;">svc-ISAPI-2.0</span></em>. Las restricciones las dejamos por default. Este es el segundo registro.</p>
<p>10. Los valores a colocar para Request path: <em><span style="text-decoration: underline;">*.svc</span></em>, Type: <em><span style="text-decoration: underline;">%SystemRoot%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll</span></em>, Name: <em><span style="text-decoration: underline;">svc-ISAPI-2.0-64</span></em>. Las restricciones las dejamos por default. Este es el tercer registro si es para un servidor de 64 bits.</p>
<p>11. Luego verificamos si nuestros servicios quedaron funcionando de manera correcta, en la pantalla siguiente:</p>
<p style="text-align: center;"><a rel="attachment wp-att-557" href="http://www.3metas.com/es/blog/technical/instalacion-de-servicios-windows-communication-foundation-en-un-servidor-iis-7/attachment/image006/"><img class="size-full wp-image-557  aligncenter" title="image006" src="http://www.3metas.com/es/wp-content/uploads/2010/03/image006.jpg" alt="" width="325" height="195" /></a></p>
<p>12. Seleccionamos un servicio, como el que se muestra en la figura, clic derecho y en el menú que aparece le damos Browse, lo cual nos abre una ventana del explorador de internet para verificar si nuestro servicio está funcionando de manera correcta.</p>
<p>13. El explorador de internet nos debe mostrar una pantalla como la siguiente:    indicando que el servicio está funcionando correctamente.</p>
<p>14. El siguiente paso es corregir en el web.config del sitio ASP.NET que hostea u hospeda  los servicios WCF, las cadenas de conexión a las bases de datos que utilizamos para que nuestros servicios puedan funcionar de manera correcta.</p>
<p>En nuestro caso verificamos la sección ConnectionStrings del web.config y colocamos los valores correctos:       &lt;<em>connectionStrings&gt;</em></p>
<p><em>&lt;add name=&#8221;XXXXXNETDB&#8221; connectionString=&#8221;Data Source=YYYYY;Initial Catalog=MiBaseDatos;User;Password=3Metas; Timeout=999999&#8243; providerName=&#8221;System.Data.SqlClient&#8221; /&gt;</em></p>
<p><em>&lt;add name=&#8221;XXXXXNETDBII&#8221; connectionString=&#8221;Data Source=YYYYY;Initial Catalog=MiOtraDB;User;Password=3Metas; Timeout=999999&#8243; providerName=&#8221;System.Data.SqlClient&#8221; /&gt;</em></p>
<p><em>&lt;add name=&#8221;ZZZZDB&#8221; connectionString=&#8221;Data Source=YYYYY;Initial Catalog=JJJJJJ;User;Password=3Metas; Timeout=999999&#8243; providerName=&#8221;System.Data.SqlClient&#8221; /&gt;</em></p>
<p><em>&lt;/connectionStrings&gt; </em></p>
<p>15. El siguiente paso es ir a la solución que consume los servicios que estamos exponiendo en el IIS en nuestra solución ASP.NET a través de los archivos *.svc  y colocar la dirección correcta de cada uno de los servicios en el app.config si es una aplicación  Windows, o en el web.config si es una aplicación web.</p>
<p>Verificamos y cambiamos el endpoint de los Servicios WCF que estemos exponiendo en nuestra aplicación :</p>
<p><em>&lt;endpoint address=&#8221;http://servidor:81/ServicioRendimientos.svc&#8221;</em></p>
<p><em>binding=&#8221;wsHttpBinding&#8221; bindingConfiguration=&#8221;WSHttpBinding_IServicioRendimientos&#8221;</em></p>
<p><em>contract=&#8221;ServicioRendimientosClient.IServicioRendimientos&#8221;</em></p>
<p><em>name=&#8221;WSHttpBinding_IServicioRendimientos&#8221;&gt;</em></p>
<p><em>&lt;identity&gt;</em></p>
<p><em>&lt;dns value=&#8221;localhost&#8221; /&gt;</em></p>
<p><em>&lt;/identity&gt;</em></p>
<p><em>&lt;/endpoint&gt; </em></p>
<p>16. Como podemos observar en el tag address=<a href="http://servidor:81/ServicioRendimientos.svc">http://servidor:81/ServicioRendimientos.svc</a>, hemos cambiado a servidor:81 que es el nombre del servidor y el puerto por donde definimos en el sitio que se va a exponer los servicios WCF.</p>
<p>17. Probar nuestra aplicación que consume los servicios para comprobar que todo esté funcionando como debe ser.</p>
<p>Bueno eso es todo por ahora, espero haber podido ayudarles en este proceso de instalación de los servicios WCF en un servidor IIS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3metas.com/es/blog/technical/instalacion-de-servicios-windows-communication-foundation-en-un-servidor-iis-7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Usando teclado qwerty en usuarios que no lo entienden</title>
		<link>http://www.3metas.com/es/blog/about-3metas/study-cases/usando-teclado-qwerty-para-usuarios-que-no-lo-entienden/</link>
		<comments>http://www.3metas.com/es/blog/about-3metas/study-cases/usando-teclado-qwerty-para-usuarios-que-no-lo-entienden/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 17:42:46 +0000</pubDate>
		<dc:creator>Paula Fernanda Cadena</dc:creator>
				<category><![CDATA[Study Cases]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[3Metas]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[analfabetismo digital]]></category>
		<category><![CDATA[Arquitectura de información]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[PDA]]></category>
		<category><![CDATA[qwerty]]></category>
		<category><![CDATA[teclado]]></category>
		<category><![CDATA[Usabilidad]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.3metas.com/es/?p=526</guid>
		<description><![CDATA[En 3metas estamos automatizando el sistema de post cosecha de una de las empresas floriculturas más grandes del país. Nuestro mayor reto ha sido crear un sistema que permita facilitar la transición del papel a un software a la medida que resulte fácil de usar para unos usuarios muy particulares: los empacadores de ramos. Usuarios [...]]]></description>
			<content:encoded><![CDATA[<p>En 3metas estamos automatizando el sistema de post cosecha de una de las empresas floriculturas más grandes del país. Nuestro mayor reto ha sido crear un sistema que permita facilitar la transición del papel a un software a la medida que resulte <strong>fácil de usar para unos usuarios muy particulares: los empacadores de ramos</strong>. Usuarios cuyo contacto más cercano con la tecnología son sus celulares, usados casi estrictamente para recibir y hacer llamadas.</p>
<p>Hoy tenemos un inconveniente con ellos que afecta una parte del proceso. El caso es el siguiente: hay necesidad de leer un serial para lo cual cada usuario cuenta con un lector de seriales (como el de los supermercados) que le ayuda a ingresar los datos del producto. <strong>Estos seriales, como también ocurre en los supermercados, muchas  veces no alcanzan a ser leídos por las máquinas y hay que ingresarlos manualmente.</strong></p>
<p>Allí radica nuestro problema, pues el sistema está compuesto por <a href="http://www.blogdemoviles.com.ar/wp-content/uploads/2008/05/pda-datalogic-pegaso.jpg">dispositivos móviles (PDA) </a>que no cuentan con un teclado. Ergo, todo es <em>touch screen</em> y los teclados están incluidos, en digital, dentro del programa. Pensando en esto usamos el teclado alfanumérico, tipo <em>qwerty</em> que ven a continuación. Sin embargo en la práctica hemos notado <strong>una dificultad en los usuarios para encontrar las letras pues en su imaginario “están en desorden”. </strong>Nuestra primera conclusión es que los números junto con las letras generan ruido y esto hace que sea más difícil encontrar lo que se busca.</p>
<p style="text-align: center;"><a rel="attachment wp-att-527" href="http://www.3metas.com/es/blog/about-3metas/study-cases/usando-teclado-qwerty-para-usuarios-que-no-lo-entienden/attachment/pda_modal_calcu_text/"><img class="size-full wp-image-527  aligncenter" title="modal qwerty" src="http://www.3metas.com/es/wp-content/uploads/2010/03/PDA_modal_calcu_text.jpg" alt="" width="240" height="320" /></a></p>
<p>Por ellos pensamos usar un teclado qwerty normal <a href="http://www.appleiphonereview.com/images/iphone-sms-l.jpg">como el del Iphone</a>, pero esta solución no es viable porque <strong>todos los seriales están compuestos por números y letras, así que toma mucho tiempo cambiar repetidamente de teclado, uno para números y otro para letras</strong>. Hemos pensado dejar el teclado como está hoy y organizar las letras alfabéticamente, pero tenemos dudas de generar recordación de un teclado que sólo se usa para esto o crear más confusión a largo plazo cuando los usuarios tengan contacto con un computador y por ende con un teclado qwerty.</p>
<p>Sabemos que la situción tiene varios limitantes, pero creemos que reparar en estos detalles nos alimenta. Cuéntenos qué se les ocurre, qué soluciones le verían esto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3metas.com/es/blog/about-3metas/study-cases/usando-teclado-qwerty-para-usuarios-que-no-lo-entienden/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Error: Sys.WebForms PageRequestManager TimeoutException</title>
		<link>http://www.3metas.com/es/blog/technical/web-development/error-sys-webforms-pagerequestmanagertimeoutexception/</link>
		<comments>http://www.3metas.com/es/blog/technical/web-development/error-sys-webforms-pagerequestmanagertimeoutexception/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 18:43:16 +0000</pubDate>
		<dc:creator>Gustavo Hurtado</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[AsyncPostBackTimeout]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[exception]]></category>
		<category><![CDATA[PageRequestManagerTimeoutException]]></category>
		<category><![CDATA[ScriptManager]]></category>
		<category><![CDATA[Timeout]]></category>
		<category><![CDATA[ToolkitScriptManager]]></category>

		<guid isPermaLink="false">http://blog.3metas.com/2010/01/23/error-sys-webforms-pagerequestmanagertimeoutexception/</guid>
		<description><![CDATA[Esta semana realizando la migración de código de un sitio web en un cliente, en el cual dentro de los múltiples cambios modificamos la interfaz gráfica de la aplicación para que utilizara Ajax e integramos además un Master Page en el diseño. Esto no debería afectar la funcionalidad, pero en especial una de las páginas [...]]]></description>
			<content:encoded><![CDATA[<p>Esta semana realizando la migración de código de un sitio web en un cliente, en el cual dentro de los múltiples cambios modificamos la interfaz gráfica de la aplicación para que utilizara Ajax e integramos además un Master Page en el diseño. Esto no debería afectar la funcionalidad, pero en especial una de las páginas empezó a presentar un problema, el cual se presentaba cuando se enviaba a realizar una operación que tarda más de 2 minutos contra la base de datos.</p>
<p>El error era del tipo: Sys.WebForms.PageRequestManagerTimeoutException, y por ser un error de Ajax se presentaba en el cargue de la pagina para su respectiva actualización luego de la ejecución del evento. Para resolver entonces este problema se debe incrementar el timeout para la página, y para esto se debe adicionar la propiedad AsyncPostBackTimeout al control ToolkitScriptManager o al control ScriptManager, asignándole un valor en segundos que depende del tiempo necesario para la operación.</p>
<pre class="brush:xml">&lt;AT:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePartialRendering="true" AsyncPostBackTimeout="360000" ScriptMode="Release"&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.3metas.com/es/blog/technical/web-development/error-sys-webforms-pagerequestmanagertimeoutexception/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Page level locking is disabled</title>
		<link>http://www.3metas.com/es/blog/technical/sql-server/page-level-locking-is-disabled/</link>
		<comments>http://www.3metas.com/es/blog/technical/sql-server/page-level-locking-is-disabled/#comments</comments>
		<pubDate>Sat, 09 Jan 2010 20:37:15 +0000</pubDate>
		<dc:creator>Gustavo Hurtado</dc:creator>
				<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://blog.3metas.com/2010/01/09/page-level-locking-is-disabled/</guid>
		<description><![CDATA[El día de hoy estábamos tratando en hacer el plan de mantenimiento de la base de datos de uno de nuestros clientes con el Maintenance Plan Wizard de SQL Server 2008. Crear el plan a través de esta herramienta es bastante sencillo, pero las pocas ocasiones que lo he utilizado siempre me encuentro con algo [...]]]></description>
			<content:encoded><![CDATA[<p>El día de hoy estábamos tratando en hacer el plan de mantenimiento de la base de datos de uno de nuestros clientes con el Maintenance Plan Wizard de SQL Server 2008. Crear el plan a través de esta herramienta es bastante sencillo, pero las pocas ocasiones que lo he utilizado siempre me encuentro con algo en el momento de ejecutar el plan de mantenimiento. Dentro de las opciones del plan de mantenimiento seleccionamos la opción Reorganize Index, el cual cuando se iba a ejecutar nos presentaba un error que decía:</p>
<p><em>The index &#8220;INDEX_NAME&#8221; (partition 1) on table &#8220;TABLE_NAME&#8221; cannot be reorganized because page level locking is disabled. </em></p>
<p>El cual luego de revisar un poco en internet y la ayuda de SQL Server encontramos que se puede solucionar con la siguiente instrucción SQL:</p>
<pre class="brush:sql">Alter Index &lt;index name&gt; On &lt;table name&gt; Set (ALLOW_PAGE_LOCKS = ON)</pre>
<p>Y bueno es una excelente solución, hasta el momento en que seguimos ejecutando el plan de mantenimiento y el error vuelve a aparecer una y otra vez para diferentes índices, así que decidimos buscar una nueva solución, en la cual gracias al poder de T-SQL y de internet construimos el siguiente query que nos permite realizar un SQL dinámico para cada uno de los índices con el mismo problema:</p>
<pre class="brush:sql">SET NOCOUNT ON
DECLARE @DBName nvarchar(50), @INName nvarchar(50)
DECLARE @ODBName nvarchar(50), @OINName nvarchar(50)
Declare @execstr nvarchar(200)
--PRINT '-------- Index with page level locking disabled --------'
DECLARE Index_cursor CURSOR FOR
SELECT idx.Name AS InName, sch.Name + '.' + obj.Name AS DBName
FROM sys.indexes idx left outer join sys.objects obj ON
obj.object_id = idx.Object_id left outer join sys.schemas sch ON
obj.schema_id = sch.schema_id
WHERE allow_page_locks=0 and obj.type='U'
-- Select only allow_page_locks 0 and User Tables
OPEN Index_cursor
FETCH NEXT FROM Index_cursor
INTO @INName, @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @DBName +' ' + @INName
--PRINT @INName
SET @ODBName = ltrim(rtrim(@DBName))
SET @OINName = ltrim(rtrim(@INName))
SELECT @execstr = 'ALTER INDEX ' + @OINName + ' ON ' +
@ODBName + ' SET (ALLOW_PAGE_LOCKS = ON)';
EXEC (@execstr);
FETCH NEXT FROM Index_cursor
INTO @INName, @DBName
END
CLOSE Index_cursor
DEALLOCATE Index_cursor
</pre>
<p>Luego de haber solucionado el problema de los índices nos encontramos con que el tamaño del log de eventos de la base de datos era demasiado grande, y excedía el tamaño disponible en la unidad de disco donde se encontraba, así que luego de buscar un poco en internet nos encontramos con <a href="http://www.dbrunas.com.ar/2009/07/14/sql-server-backup-log-with-truncate_only/">este post</a> muy útil para solucionar este problema.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3metas.com/es/blog/technical/sql-server/page-level-locking-is-disabled/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configurando DateTime Formats en SQL Server</title>
		<link>http://www.3metas.com/es/blog/technical/sql-server/configurando-datetime-formats-en-sql-server/</link>
		<comments>http://www.3metas.com/es/blog/technical/sql-server/configurando-datetime-formats-en-sql-server/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 16:39:49 +0000</pubDate>
		<dc:creator>Gustavo Hurtado</dc:creator>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[collation]]></category>
		<category><![CDATA[conversion of a varchar data type]]></category>
		<category><![CDATA[DateTime Formats]]></category>
		<category><![CDATA[lenguaje]]></category>

		<guid isPermaLink="false">http://blog.3metas.com/2009/11/07/configurando-datetime-formats-en-sql-server/</guid>
		<description><![CDATA[Muchos de los problemas que se presentan en el proceso de desarrollo de parte de la base de datos tienes que ver con los formatos de fechas y estos principalmente están dados por el lenguaje de la base de datos o el Collation establecido para esta. Por ejemplo, algunos de los errores comunes es:
La conversión [...]]]></description>
			<content:encoded><![CDATA[<p>Muchos de los problemas que se presentan en el proceso de desarrollo de parte de la base de datos tienes que ver con los formatos de fechas y estos principalmente están dados por el lenguaje de la base de datos o el Collation establecido para esta. Por ejemplo, algunos de los errores comunes es:</p>
<p>La conversión del tipo de datos varchar en datetime produjo un valor fuera de intervalo / The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.</p>
<p><strong>1. </strong>El servidor de base de datos tiene un lenguaje establecido por defecto, el cual es posible visualizarlo a partir de la ventana de propiedades del servidor o a través de una consulta TSQL:</p>
<p style="text-align: center;"><a href="http://www.3metas.com/wp-content/uploads/2009/11/clip_image002.jpg"><img class="aligncenter" style="display: inline; border: 0px;" title="clip_image002" src="http://www.3metas.com/wp-content/uploads/2009/11/clip_image002_thumb.jpg" border="0" alt="clip_image002" width="244" height="220" /></a></p>
<p>El comando sería:</p>
<pre class="brush:sql">SP_CONFIGURE 'default language'</pre>
<p>Al ejecutar esta consulta en el resultado en la columna <strong><em>config_value</em></strong> nos muestra el código del lenguaje configurado por defecto en el servidor de la base de datos. Para poder saber ese código a cual lenguaje hace referencia ejecutamos el stored procedure (SP): SP_HELPLANGUAGE el cual nos dará una lista descriptiva de todos los lenguajes soportados.</p>
<p>Ya con esta lista podemos modificar el lenguaje configurado por defecto, el cual afectará a todos los nuevos logins que se creen de ahora en adelante. Para realizar esta modificación basta con ejecutar el SP:</p>
<pre class="brush:sql">USE master;

GO

SP_CONFIGURE 'default language', 5

RECONFIGURE;

EXEC sp_configure;</pre>
<p>Donde 5 sería el identificador para el idioma español. (<a href="http://technet.microsoft.com/en-us/library/ms188787.aspx">http://technet.microsoft.com/en-us/library/ms188787.aspx</a>)</p>
<p>Luego de realizar el cambio podemos verificar este a través del procedimiento almacenado antes mencionado SP_CONFIGURE &#8216;default language&#8217;o a través de la ventana de propiedades del servidor de la base de datos. Cabe anotar que esta nueva configuración solo aplicará para los nuevos logins que se creen.</p>
<p><strong>2. </strong>Ahora bien es posible modificar el formato Date (<a href="http://technet.microsoft.com/en-us/library/ms189491.aspx">http://technet.microsoft.com/en-us/library/ms189491.aspx</a>) para la sesión actual abierta a través del siguiente comando:</p>
<pre class="brush:sql">SET DATEFORMAT ydm</pre>
<p>Es posible verificar los cambios en el lenguaje para la anterior instrucción al ejecutar el siguiente comando:</p>
<pre class="brush:sql">SELECT SYSDATETIME()</pre>
<p>Un ejemplo muy tipico donde se presentan problemas para el formato de las fechas es el siguiente, en el cual dependiendo del formato <strong>yyyy/dd/mm</strong> la siguiente consulta puede ejecutarse satisfactoriamente:</p>
<pre class="brush:sql">Select DATEDIFF(Month,'2008/4/6','2008/12/31')</pre>
<p>Si la configuración de la sesion actual esta en ingles por ejemplo, esta consulta funcionará pero si está en español nos arrojará un error del tipo:</p>
<p>The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.</p>
<p>Con lo cual debemos modificar primero el tipo de lenguaje de la sesión o cambiar la consulta por:</p>
<pre class="brush:sql">Select DATEDIFF(Month,'2008/6/4','2008/31/12')</pre>
<p><strong>3. </strong>Si lo que deseamos es modificar el lenguaje la sesión actual abierta ejecutamos el SP:</p>
<pre class="brush:sql">SET LANGUAGE 'español'</pre>
<p>Para poder verificar el cambio podemos realizar alguna de las siguientes consultas SQL:</p>
<pre class="brush:sql">SET LANGUAGE 'us_english'

SELECT CONVERT(DATETIME, '4/6/2006'),

DATENAME(weekday, '4/6/2006'),

DATENAME(MONTH, '4/6/2006')

SET LANGUAGE 'español'

SELECT CONVERT(DATETIME, '4/6/2006'),

DATENAME(Weekday, '4/6/2006'),

DATENAME(MONTH, '4/6/2006')</pre>
<p><strong>4. </strong>No obstante si lo que deseamos es cambiar el lenguaje de alguno de los login ya creados, con lo cual cada inicio de sesión con esa cuenta se conserve la nueva configuración del lenguaje, vamos hasta la ventana de configuración de los login creados para la base de datos o ejecutamos un comando TSQL:</p>
<p style="text-align: center;"><a href="http://www.3metas.com/wp-content/uploads/2009/11/clip_image004.jpg"><img class="aligncenter" style="display: inline; border: 0px;" title="clip_image004" src="http://www.3metas.com/wp-content/uploads/2009/11/clip_image004_thumb.jpg" border="0" alt="clip_image004" width="244" height="220" /></a></p>
<p>El comando sería:</p>
<pre class="brush:sql">EXEC sp_defaultlanguage 'GustavoH-PC\GustavoH', 'español'</pre>
<p>El cual por ejemplo para este caso está cambiando el lenguaje del login <em>GustavoH</em>. Con lo cual cada inicio de sesión para esta cuenta de usuario tendrá como lenguaje seleccionado español, así el lenguaje por defecto para el servidor de la base de datos sea otro.</p>
<p>Lo más importante en estos temas de lenguaje es saber a qué nivel queremos aplicarlos, si es a nivel de consulta, base de datos o del servidor de la base de datos, con lo cual se deberá utilizar algunas de las consultas antes definidas o realizar el cambio respectivo a través del administrador de SQL Server.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3metas.com/es/blog/technical/sql-server/configurando-datetime-formats-en-sql-server/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Windows 7 y dispositivos móviles</title>
		<link>http://www.3metas.com/es/blog/technical/wcf/windows-7-y-dispositivos-moviles/</link>
		<comments>http://www.3metas.com/es/blog/technical/wcf/windows-7-y-dispositivos-moviles/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 23:25:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[WCF]]></category>
		<category><![CDATA[Windows Mobile]]></category>
		<category><![CDATA[3Metas]]></category>
		<category><![CDATA[Compact Framework]]></category>
		<category><![CDATA[Dispositivos móviles]]></category>
		<category><![CDATA[NetCFSvcUtil]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Windows Mobile 6.5]]></category>

		<guid isPermaLink="false">http://blog.3metas.com/2009/09/14/windows-7-y-dispositivos-moviles/</guid>
		<description><![CDATA[En 3Metas hemos trabajado mucho los últimos meses en el desarrollo de aplicaciones para dispositivos móviles que corren Windows Mobile. Recientemente actualizamos nuestras máquinas de desarrollo a Windows7 y hemos encontrado un problema cuando se consumen servicios de WCF.
Como sabrán para consumir un servicio WCF desde un dispositivo móvil usando el compact framework hay que [...]]]></description>
			<content:encoded><![CDATA[<p>En 3Metas hemos trabajado mucho los últimos meses en el desarrollo de aplicaciones para dispositivos móviles que corren Windows Mobile. Recientemente actualizamos nuestras máquinas de desarrollo a Windows7 y hemos encontrado un problema cuando se consumen servicios de WCF.</p>
<p>Como sabrán para consumir un servicio WCF desde un dispositivo móvil usando el compact framework hay que crear una clase proxy utilizando la utilidad NetCFSvcUtil.exe que hace parte del conjunto <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c8174c14-a27d-4148-bf01-86c2e0953eab&amp;displaylang=en">power toys del compact framework 3.5 de .net</a>.</p>
<p>El problema es que cuando se utiliza esta utilidad en Windows 7 siempre se produce un error como este:</p>
<p><em>Attempting to download metadata from &#8216;http://localhost/DinnerNow/service/DeliveryService.svc&#8217; using WS-Metadata Exchange or DISCO. </em><em><br />
<em>Error: An error occurred in the tool. </em></em></p>
<p><em>Error: Error in the application.</em></p>
<p>Hay una incompatibilidad entre el tool de generación de la  clase proxy y Windows7, afortunadamente ya fue resuelto y puede obtenerse una actualización del tool desde este <a href="http://download.microsoft.com/download/6/2/0/6205ED05-E435-44FC-AA82-B763CA5F8B1A/NetCFSvcUtil.exe">enlace</a>. O se puede generar el archivo proxy en Vista o XP y pasarlo al proyecto en Windows7.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3metas.com/es/blog/technical/wcf/windows-7-y-dispositivos-moviles/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>TFS, control de versiones, branching y otras</title>
		<link>http://www.3metas.com/es/blog/technical/tfs2008/de-tfs-control-de-versiones-branching-y-otras/</link>
		<comments>http://www.3metas.com/es/blog/technical/tfs2008/de-tfs-control-de-versiones-branching-y-otras/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 13:26:00 +0000</pubDate>
		<dc:creator>Juan Carlos Peláez</dc:creator>
				<category><![CDATA[TFS2008]]></category>
		<category><![CDATA[3Metas]]></category>
		<category><![CDATA[Branching]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Source Control]]></category>
		<category><![CDATA[Visual Studio Team Fundation Server]]></category>
		<category><![CDATA[VSTFS2008]]></category>

		<guid isPermaLink="false">http://blog.3metas.com/2009/07/11/de-tfs-control-de-versiones-branching-y-otras/</guid>
		<description><![CDATA[En 3Metas usamos Visual Studio Team Fundation Server como sistema de gestión de proyecto y control de versiones, sin embargo al momento de crear las soluciones cometí un error por no revisar con cuidado la guía de Branching de Patterns And Practices de Microsoft lo que me llevó a quedar con los proyectos y la [...]]]></description>
			<content:encoded><![CDATA[<p>En <a href="http://www.3metas.com/">3Metas</a> usamos Visual Studio Team Fundation Server como sistema de gestión de proyecto y control de versiones, sin embargo al momento de crear las soluciones cometí un error por no revisar con cuidado la guía de <a href="http://www.codeplex.com/BranchingGuidance">Branching de Patterns And Practices de Microsoft</a> lo que me llevó a quedar con los proyectos y la documentación andando pero con un esquema incorrecto de control de código fuente. <strong>La solución es borrar (destruir) los repositorios de Código Fuente (previo backup por supuesto ) y reorganizar el sistema</strong>.</p>
<p>Para destruir un repositorio de código Fuente, se utiliza el comando <a href="http://msdn.microsoft.com/en-us/library/bb386005.aspx">tf destroy</a><strong>,</strong> (Btw: se encuentra en la ruta Program Files\Microsoft Visual Studio 9.0\Common7\IDE&gt;) desde la consola de comandos, una confirmación de borrado aparecerá y luego se listaran los archivos y carpetas que se eliminaron.</p>
<p>Después de borrado puede usarse VS2008 con el Team Explorer para volver a la interfaz de gestión de los sistemas de control de código fuente y allí crear de nuevo el repositorio y configurarlo correctamente. <strong>Es importante anotar que hay que volver a asignar los permisos a los usuarios</strong> que aunque siguen teniendo permisos en el TFS en el Proyecto al que están asignados ahora no tienen permisos en el repositorio de control de versiones. Estos permisos se asignan en la pestana de seguridad de las propiedades del repositorio</p>
<p><a href="http://www.3metas.com/wp-content/uploads/2009/07/clip_image0023.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="clip_image002" src="http://www.3metas.com/wp-content/uploads/2009/07/clip_image002_thumb3.jpg" border="0" alt="clip_image002" width="516" height="309" /></a></p>
<p>(El borrado no es lo mismo, el borrado solo marca el repositorio pero sigue existiendo en el sistema se puede ver aquí: Tools &gt; Options &gt; Source Control &gt; Visual Studio Team Foundation Server and check <em>Show deleted items in the Source Control Explorer que los archivos no se borraron</em>)</p>
<p>(Esto también es diferente a la eliminación del proyecto porque yo no quería perder el portal, documentos, work ítems, etc que ya se habían alimentado al sistema)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3metas.com/es/blog/technical/tfs2008/de-tfs-control-de-versiones-branching-y-otras/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
