 <?xml-stylesheet type="text/css" href="http://avanet.org/Data/style/rss1.css" ?> <?xml-stylesheet type="text/xsl" href="http://avanet.org/Data/style/rss1.xsl" ?>
<rss version="2.0">
  <channel>
    <title>Últimos post</title>
    <link>http://avanet.org/inicio.aspx</link>
    <description>Últimos post</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>mojoPortal Feed Manager module</generator>
    <item>
      <title>HTML5.- Introducción a Javascript en WebMatrix</title>
      <description><![CDATA[<p> </p>
<p><img style="float: left; display: inline;" alt="" src="data:image/jpeg;base64,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" />JavaScript es el lenguaje usado en la Web.</p>
<p>JavaScript se utiliza en miles de millones de páginas Web para añadir funcionalidad, validar formularios, comunicarse con el servidor y mucho más.</p>
<p>JavaScript es fácil de aprender. Tan solo como todo en la vida hay que prácticarlo <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" alt="Smile" src="http://avanet.org/Data/Sites/1/media/wlw/wlemoticon-smile_1.png" /></p>
<p> </p>
<p> </p>
<h2>Qué hace JavaScript en HTML5?</h2>
<p>Bueno JavaScript o tambien abreviado muchas veces JS por la extensión de los archivos “.js”. sirve para desencadenar o activar eventos en base a acciones del cliente (ocurre del lado del navegador) por eso se lo conoce como un lenguaje del lado del cliente. Entonces esto se resume a que JavaScript nos va ayudar a dar dinamismo a la página.</p>
<p>Algo muy importante a rescatar que es muy cierto que hoy en día existe frameworks basador en JavaScript pero antes de eso es muy recomendable conocer lo que es JavaScript para entender como trabaja todo esto.</p>
<p> </p>
<h2>Qué es un evento en JavaScript?</h2>
<p>Es cuando desencademos una porción de código en base a una acción del usuario.</p>
<p> </p>
<h2>Antes de empezar…</h2>
<p>Debemos recordar siempre que en JavaScript:</p>
<ul>
<li>
<div>Es sensible a mayusculas y minusculas (Case Sensitive).</div>
</li>
<li>
<div>Se puede comentatizar de dos maneras:</div>
</li>
</ul>
<p><a href="http://avanet.org/Data/Sites/1/media/wlw/image_117.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" alt="image" src="http://avanet.org/Data/Sites/1/media/wlw/image_thumb_45.png" height="155" width="475" /></a></p>
<ul>
<li>
<div>Los “{ }” se utilizan para definir fragmentos de código.</div>
</li>
<li>
<div>El “;” nos ayuda a marcar el final de una sentincia.</div>
</li>
</ul>
<p><a href="http://avanet.org/Data/Sites/1/media/wlw/image_118.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="image" alt="image" src="http://avanet.org/Data/Sites/1/media/wlw/image_thumb_46.png" height="165" width="470" /></a></p>
<ul>
<li>Existen dos formas de incorporar código JavaScript en nuestro proyecto:</li>
<ul>
<li><strong>Externamente:</strong> cuando se hace referencia aún archivo .js.</li>
<li><strong>Internamente:</strong> cuando el código JavaScript se encuentra en la misma página.</li>
</ul>
</ul>
<p><a href="http://avanet.org/Data/Sites/1/media/wlw/image_119.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" alt="image" src="http://avanet.org/Data/Sites/1/media/wlw/image_thumb_47.png" height="219" width="370" /></a></p>
<p> </p>
<h2>Ejemplo del día</h2>
<p>Ahora daremos paso al ejemplo del día para ir prácticando <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" alt="Smile" src="http://avanet.org/Data/Sites/1/media/wlw/wlemoticon-smile_1.png" /></p>
<h3>Vista desde el editor</h3>
<h3> </h3>
<pre class="csharpcode"><a href="http://avanet.org/Data/Sites/1/media/wlw/image_120.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" alt="image" src="http://avanet.org/Data/Sites/1/media/wlw/image_thumb_48.png" height="265" width="522" /></a></pre>
<style type="text/css"><!--
.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; }
--></style>
<p>Lo que hemos hecho es aperturar los tags desde la línea 7 para crear nuestro código JavaScript y procedimos a crear una función que inspeccionara nuestro documento en busqueda del Id “parrafoPrincipal” para almacenar la fecha actual dentro de la etiqueta HTML que posea ese Id.</p>
<p>Todo esto va ocurrir al realizar clic en el botom que este seria nuestro evento.</p>
<h3>Vista desde el Navegador</h3>
<style type="text/css"><!--
.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; }
--></style>
<p><a href="http://avanet.org/Data/Sites/1/media/wlw/image_121.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" alt="image" src="http://avanet.org/Data/Sites/1/media/wlw/image_thumb_49.png" height="162" width="392" /></a></p>
<h4> </h4>
<h4>Luego de hacer Clic</h4>
<p><a href="http://avanet.org/Data/Sites/1/media/wlw/image_122.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="image" alt="image" src="http://avanet.org/Data/Sites/1/media/wlw/image_thumb_50.png" height="153" width="473" /></a></p>
<p> </p>
<p>Eso es todo por hoy muchach@s recuerden visitar el <a href="http://ptrconcha.wordpress.com/2012/02/08/curso-de-introduccin-a-html5-en-webmatrix/">pensum</a> del curso y de realizar sus consultas o comentarios vía twitter a <a href="https://twitter.com/PeterConchaR">@PeterConchaR</a><strong>  </strong>respondiendo facilmente el tweet de aquí abajito<b>,</b> si te gusto no olvides RT y para no perderte los siguientes post sigueme. <img title="Wink" alt="Wink" src="http://avanet.org/Data/SiteImages/emoticons/tinymce/smiley-wink.gif" /></p>
<blockquote class="twitter-tweet">
<p><a href="https://twitter.com/search/%23HTML5">#HTML5</a>.- Introducción a <a href="https://twitter.com/search/%23Javascript">#Javascript</a> en <a href="https://twitter.com/search/%23WebMatrix">#WebMatrix</a> -&gt; <a title="http://ow.ly/l4YwH" href="http://t.co/R8sTvLMT7x">ow.ly/l4YwH</a> vía @<a href="https://twitter.com/avanet">avanet</a></p>
— Peter Concha Regatto (@PeterConchaR) <a href="https://twitter.com/PeterConchaR/status/334884522728517632">May 16, 2013</a></blockquote>
<script charset="utf-8" type="text/javascript" src="http://avanet.org//platform.twitter.com/widgets.js" async=""></script>
<p>No olvides seguir en twitter a:</p>
<ul>
<li><a href="https://twitter.com/Avanet">@Avanet</a></li>
<li><a href="https://twitter.com/soreygarcia">@SoreyGarcia</a></li>
</ul>
<p>Para estar al día con las entradas de la comunidad <strong><em>Avanet</em></strong>.</p>
<p><br /> WordPress Tags: <a href="http://wordpress.com/tag/HTML5" rel="Tag">HTML5</a>,<a href="http://wordpress.com/tag/Javascript" rel="Tag">Javascript</a>,<a href="http://wordpress.com/tag/WebMatrix" rel="Tag">WebMatrix</a></p><br /><a href='http://avanet.org/html5--introducción-a-javascript-en-webmatrix.aspx'>Peter Concha Regatto</a>&nbsp;&nbsp;<a href='http://avanet.org/html5--introducción-a-javascript-en-webmatrix.aspx'>...</a><a class='tweetthislink' title='Tweet This' href='http://twitter.com/home?status=HTML5.-+Introducci%c3%b3n+a+Javascript+en+WebMatrix+http%3a%2f%2favanet.org%2fhtml5--introducci%c3%b3n-a-javascript-en-webmatrix.aspx'><img src='http://avanet.org/Data/SiteImages/tweetthis3.png' alt='Tweet This' /></a><div class='fblikebutton'><iframe src='http://www.facebook.com/plugins/like.php?href=http%3a%2f%2favanet.org%2fhtml5--introducci%c3%b3n-a-javascript-en-webmatrix.aspx&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;height=35&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden;width:450px; height:35px;'></iframe></div>]]></description>
      <link>http://avanet.org/html5--introducción-a-javascript-en-webmatrix.aspx</link>
      <author>Peter Concha Regatto</author>
      <pubDate>Thu, 16 May 2013 04:09:00 GMT</pubDate>
    </item>
    <item>
      <title>Crud básico con Wcf Data Services, ajax y Jquery</title>
      <description><![CDATA[<p>En este artículo vamos a ver cómo implementar un CRUD básico a través de WCF Data Services, pero en esta ocasión lo vamos a hacer totalmente desde el lado del cliente, usando AJAX para invocar nuestros servicios de datos usando los verbos básicos de http GET, POST, PUT y DELETE, y usando el plugin jqxGrid de Jquery  en una versión no comercial, para mostrar los datos en una grilla, para esto vamos a seguir los siguientes pasos:</p>
<ol>
<li>Crear aplicación Asp.net</li>
<li>Crear modelo de datos con Entity Framework</li>
<li>Crear WCF Data Service</li>
<li>Configurar WCF Data Service para acceso a nuestras entidades.</li>
<li>Referenciar librerías para usar el jqxGrid.</li>
<li>Crear llamados AJAX para interactuar con WCF Data Services.</li>
</ol>
<p>Para los primeros cuatro pasos remitirse a mi anterior artículo:</p>
<p><a href="http://eltavodev.blogspot.com/2013/04/crud-basico-con-wcf-data-services.html">http://eltavodev.blogspot.com/2013/04/crud-basico-con-wcf-data-services.html</a></p>
<p><b>5. Referenciar librerías para usar el jqxGrid.</b></p>
<p>Para usar el plugin jqxGrid, debemos referenciar las siguientes librerías y estilos:</p>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;"><span style="color: blue;">&lt;</span><span style="color: maroon;">link</span> <span style="color: red;">rel</span><span style="color: blue;">=</span><span style="color: blue;">"stylesheet"</span> <span style="color: red;">href</span><span style="color: blue;">=</span><span style="color: blue;">"http://www.jqwidgets.com/jquery-widgets-demo/jqwidgets/styles/jqx.base.css"</span><span style="color: red;">type</span><span style="color: blue;">=</span><span style="color: blue;">"text/css"</span> <span style="color: blue;">/&gt;</span>
<span style="color: blue;">&lt;</span><span style="color: maroon;">script</span> <span style="color: red;">src</span><span style="color: blue;">=</span><span style="color: blue;">"http://www.jqwidgets.com/jquery-widgets-demo/scripts/jquery-1.8.2.min.js" </span><span style="color: red;">type</span><span style="color: blue;">=</span><span style="color: blue;">"text/javascript"</span><span style="color: blue;">&gt;&lt;/</span><span style="color: maroon;">script</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">&lt;</span><span style="color: maroon;">script</span> <span style="color: red;">src</span><span style="color: blue;">=</span><span style="color: blue;">"http://www.jqwidgets.com/jquery-widgets-demo/jqwidgets/jqx-all.js"</span> <span style="color: red;">type</span><span style="color: blue;">=</span><span style="color: blue;">"text/javascript"</span><span style="color: blue;">&gt;&lt;/</span><span style="color: maroon;">script</span><span style="color: blue;">&gt;</span>
</pre>
<p><b>6.</b>   <b>Crear llamados AJAX para interactuar con WCF Data Services.</b></p>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;">En nuestro ejemplo vamos a crear un CRUD básico para la tabla Customers, visualmente es de la siguiente forma:<br /><br /><img style="display: block; margin-left: auto; margin-right: auto;" title="CrudAjax" alt="CrudAjax" src="http://www.avanet.org/Data/Sites/1/media/crudajax.png" height="269" width="550" /></pre>
<p>Para cargar nuestro grid, vamos a incluir los siguientes scripts en el encabezado del HTML:</p>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;">$(document).ready(<span style="color: blue;">function</span> () {
 
            ConsultarClientes();
 
            $(<span style="color: maroon;">"#gridClientes"</span>).bind(<span style="color: maroon;">'rowselect'</span>, <span style="color: blue;">function</span> (event) {
 
                $(<span style="color: maroon;">"#txtID"</span>).val(event.args.row.CustomerID);
                $(<span style="color: maroon;">"#txtNombre"</span>).val(event.args.row.ContactName);
                $(<span style="color: maroon;">"#txtCompania"</span>).val(event.args.row.CompanyName);
                $(<span style="color: maroon;">"#hfAccion"</span>).val(<span style="color: maroon;">"Modificar"</span>);
            });
 
            $(<span style="color: maroon;">'#gridClientes'</span>).on(<span style="color: maroon;">'rowdoubleclick'</span>, <span style="color: blue;">function</span> (event) {
                <span style="color: blue;">if</span> (confirm(<span style="color: maroon;">"Está seguro de eliminar el cliente: "</span> + event.args.owner.rows.records[event.args.rowindex].bounddata.ContactName)) {
                    EliminarCliente(event.args.owner.rows.records[event.args.rowindex].bounddata.CustomerID);
                }
            });
 
        });<br /><br /><br /></pre>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;"><span style="color: darkgreen;">// Cargar grid con los clientes existentes</span>
        <span style="color: blue;">function</span> ConsultarClientes() {
            <span style="color: blue;">var</span> source = {
                type: <span style="color: maroon;">"GET"</span>,
                datatype: <span style="color: maroon;">"json"</span>,
                datafields: [
                    { name: <span style="color: maroon;">'CustomerID'</span> },
                    { name: <span style="color: maroon;">'ContactName'</span> },
                    { name: <span style="color: maroon;">'CompanyName'</span> }
                ],
                url: <span style="color: maroon;">'NorttwindAccess.svc/Customers'</span>,
                cache: <span style="color: blue;">false</span>,
                root: <span style="color: maroon;">'data'</span>
            };
 
            <span style="color: blue;">var</span> dataAdapter = <span style="color: blue;">new</span> $.jqx.dataAdapter(source, { contentType: <span style="color: maroon;">'application/json; charset=utf-8'</span>,
                downloadComplete: <span style="color: blue;">function</span> (data, textStatus, jqXHR) {
                    <span style="color: blue;">return</span> data.d;
                }
            }
            );
 
            $(<span style="color: maroon;">"#gridClientes"</span>).jqxGrid({
                source: dataAdapter,
                columns: [
                    { text: <span style="color: maroon;">'ID'</span>, dataField: <span style="color: maroon;">'CustomerID'</span>, width: 200 },
                    { text: <span style="color: maroon;">'Nombre'</span>, dataField: <span style="color: maroon;">'ContactName'</span>, width: 200 },
                    { text: <span style="color: maroon;">'Compañia'</span>, dataField: <span style="color: maroon;">'CompanyName'</span>, width: 180 }
                ]
            });
        }</pre>
<p>Con el código anterior cuando carga la página invocamos la función ConsultarClientes(), la cual permite invocar el servicio de datos con la url 'NorttwindAccess.svc/Customers, y luego lo carga en el grid, además de esto adjuntamos dos eventos al grid, <b>rowselect</b> que usamos para cargar el cliente seleccionado en los campos de texto, y el evento <b>rowdobleclick</b> en el cual vamos a realizar la eliminación del cliente cuando se haga doble click sobre él.</p>
<p><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;">Ahora para eliminar un cliente, agregamos la siguiente función:</span></p>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;"><span style="color: #006400; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;">// Eliminar un cliente</span></pre>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;">        <span style="color: blue;">function</span> EliminarCliente(id) {
            $.ajax({
                type: <span style="color: maroon;">"DELETE"</span>,
                url: <span style="color: maroon;">"NorttwindAccess.svc/Customers('"</span> + id + <span style="color: maroon;">"')"</span>,
                data: <span style="color: maroon;">"{}"</span>,
                contentType: <span style="color: maroon;">"application/json; charset=utf-8"</span>,
                dataType: <span style="color: maroon;">"json"</span>,
                success: <span style="color: blue;">function</span> (data) {
                    alert(<span style="color: maroon;">"El cliente se eliminó correctamente."</span>);
                },
                error: <span style="color: blue;">function</span> (msg) {
                    alert(msg.responseText);
                }
            });
        }<br /><br /></pre>
<p>Y para terminar agregamos la siguiente función para guardar y modificar un cliente: </p>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;"><span style="color: darkgreen;">// guardar o modificar un cliente.</span>
        <span style="color: blue;">function</span> GuardarCliente() {
            <span style="color: blue;">var</span> cliente = {
                CustomerID: $(<span style="color: maroon;">"#txtID"</span>).val(),
                ContactName: $(<span style="color: maroon;">"#txtNombre"</span>).val(),
                CompanyName: $(<span style="color: maroon;">"#txtCompania"</span>).val()
            };
            <span style="color: blue;">var</span> verbo = <span style="color: maroon;">"POST"</span>;
            <span style="color: blue;">var</span> mensaje = <span style="color: maroon;">"Cliente ingresado correctamente."</span>;
            <span style="color: blue;">var</span> URL = <span style="color: maroon;">"NorttwindAccess.svc/Customers"</span>;
            <span style="color: blue;">if</span> ($(<span style="color: maroon;">"#hfAccion"</span>).val() == <span style="color: maroon;">"Modificar"</span>) {
                verbo = <span style="color: maroon;">"PUT"</span>;
                mensaje = <span style="color: maroon;">"Cliente modificado correctamente."</span>;
                URL = <span style="color: maroon;">"NorttwindAccess.svc/Customers('"</span>+ $(<span style="color: maroon;">"#txtID"</span>).val() +<span style="color: maroon;">"')"</span>;
            }
 
            $.ajax({
                type: verbo,
                url: URL,
                data: JSON.stringify(cliente),
                contentType: <span style="color: maroon;">"application/json; charset=utf-8"</span>,
                dataType: <span style="color: maroon;">"json"</span>,
                success: <span style="color: blue;">function</span> (data) {
                    $(<span style="color: maroon;">"#hfAccion"</span>).val(<span style="color: maroon;">"Nuevo"</span>);
                    LimpiarCajas();
                    alert(mensaje);
                },
                error: <span style="color: blue;">function</span> (msg) {
                    alert(msg.responseText);
                }
            });
        }<br /><br /></pre>
<p>Con esto damos por terminado nuestro ejemplo de cómo implementar un CRUD básico usando WCF Data Services mediante llamados AJAX, es una forma sencilla de realizar una implementación sin usar código del lado del servidor, espero les sea de gran utilidad, a continuación el link de descarga del código fuente, para mayor detalle, la implementación está en el archivo PruebaClientes.aspx.</p>
<p><a href="https://www.dropbox.com/s/v3wcbg7kh65ktrn/WCFDataServicesExample%20-%20copia.rar">https://www.dropbox.com/s/v3wcbg7kh65ktrn/WCFDataServicesExample%20-%20copia.rar</a></p>
<p>También puedes encontrar este artículo en mi blog: <a href="http://eltavodev.blogspot.com/2013/04/crud-basico-con-wcf-data-services-ajax.html">http://eltavodev.blogspot.com/2013/04/crud-basico-con-wcf-data-services-ajax.html</a></p>
<p><span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px;">Saludos. </span></p><br /><a href='http://www.avanet.org/crud-básico-con-wcf-data-services-ajax-y-jquery.aspx'>tavo</a>&nbsp;&nbsp;<a href='http://www.avanet.org/crud-básico-con-wcf-data-services-ajax-y-jquery.aspx'>...</a><a class='tweetthislink' title='Tweet This' href='http://twitter.com/home?status=Crud+b%c3%a1sico+con+Wcf+Data+Services%2c+ajax+y+Jquery+http%3a%2f%2fwww.avanet.org%2fcrud-b%c3%a1sico-con-wcf-data-services-ajax-y-jquery.aspx'><img src='http://www.avanet.org/Data/SiteImages/tweetthis3.png' alt='Tweet This' /></a><div class='fblikebutton'><iframe src='http://www.facebook.com/plugins/like.php?href=http%3a%2f%2fwww.avanet.org%2fcrud-b%c3%a1sico-con-wcf-data-services-ajax-y-jquery.aspx&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;height=35&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden;width:450px; height:35px;'></iframe></div>]]></description>
      <link>http://www.avanet.org/crud-básico-con-wcf-data-services-ajax-y-jquery.aspx</link>
      <author>tavo</author>
      <pubDate>Wed, 15 May 2013 02:20:00 GMT</pubDate>
    </item>
    <item>
      <title>Crud básico con wcf data services</title>
      <description><![CDATA[<div>
<p> </p>
<p>En este artículo vamos a ver cómo usar WCF Data Services para interactuar con nuestra base de datos mediante REST, para esto vamos a realizar un formulario de CRUD básico y seguiremos los siguientes pasos:</p>
</div>
<div><ol>
<li>Crear aplicación Asp.net</li>
<li>Crear modelo de datos con Entity Framework</li>
<li>Crear WCF Data Service</li>
<li>Configurar WCF Data Service para acceso a nuestras entidades.</li>
<li>Interactuar  con nuestro servicio desde una aplicación asp.net</li>
</ol></div>
<div>
<p> <b>¿Qué es WCF Data Services?</b></p>
</div>
<div>
<p>También conocido como ADO.NET data services, es un componente del .net Framework que permite crear servicios web usando <b>ODATA (Open Data Protocol)</b>, para exponer y consumir datos en la web mediante <b>REST</b>, ODATA expone los datos como recursos que son accesibles y modificados a través de URIs, usando los verbos HTTP GET(Consultar), PUT(Modificar), POST(Ingresar) y DELETE(Eliminar).</p>
</div>
<div>
<p><b><br /></b><b>Creando nuestro modelo de datos con la DB ejemplo Northwind.</b></p>
</div>
<p class="separator">Antes que nada para crear el modelo debemos tener la base de datos Northwind en nuestra instancia de SQl Server, dichas base de datos se adjunta en este artículo para que se sea descargada y restaurada. Una vez tengamos esta DB, en nuestro proyecto web hacemos click derecho, agregar un nuevo elemento y seleccionamos, ADO:NET Entity Data Model.</p>
<div>
<p> <img style="display: block; margin-left: auto; margin-right: auto;" title="Crear Acceso a datos" alt="Crear Acceso a datos" src="http://www.avanet.org/Data/Sites/1/media/creaaccesodatos.png" height="334" width="550" /></p>
</div>
<p class="separator"> Luego configuramos la conexión con la base de datos:</p>
<div>
<p> <img style="display: block; margin-left: auto; margin-right: auto;" title="Crear Acceso a datosII" alt="Crear Acceso a datosII" src="http://www.avanet.org/Data/Sites/1/media/creaaccesodatosii.png" height="490" width="550" /></p>
</div>
<p class="separator"> Y seleccionamos las tablas que necesitemos de nuestra base de datos.</p>
<div>
<p style="text-align: center;"> <img title="AccesoDatosIII" alt="AccesoDatosIII" src="http://www.avanet.org/Data/Sites/1/media/creaaccesodatosiii.png" height="488" width="550" /></p>
</div>
<p class="separator"> <b>Creando nuestro WCF Data Service.</b></p>
<div>
<p>Ahora que tenemos creado nuestro modelo de datos, procedemos a crear nuestro servicio de datos, para esto hacemos clic derecho, agregar nuevo elemento, y elegimos Servicio de datos WCF.</p>
</div>
<div>
<p> <img style="display: block; margin-left: auto; margin-right: auto;" title="CreateWCFDataService" alt="CreateWCFDataService" src="http://www.avanet.org/Data/Sites/1/media/createwcfdataservice.png" height="336" width="550" /></p>
</div>
<div>
<p> Enseguida nos crea nuestro Data service, y nos indica que debemos especificar el origen de datos y configurar los permisos para las entidades que vamos a exponer en el servicio.</p>
</div>
<div>
<p><span style="color: #0000ff; font-family: Consolas;">public</span><span style="font-family: Consolas;"> <span style="color: #0000ff;">class</span> <span style="color: #2b91af;">WcfDataService1</span> : <span style="color: #2b91af;">DataService</span>&lt; <span style="color: #008000;">/* TODO: escriba aquí el nombre de clase del origen de datos */</span> &gt;</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">{</span></p>
</div>
<div>
<p><span style="color: #008000; font-family: Consolas;">    // Se llama a este método una única vez para inicializar directivas aplicables a todo el ámbito del servicio.</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">    </span><span>public</span><span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> InitializeService(<span style="color: #2b91af;">DataServiceConfiguration</span> config)</span></p>
<p><span style="font-family: Consolas;">    {</span></p>
</div>
<div>
<p><span style="color: #008000; font-family: Consolas;">         // TODO: establezca reglas para indicar qué operaciones de servicio y conjuntos de entidades son visibles, actualizables, etc.</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">         <span style="color: #008000;">// Ejemplos:</span></span></p>
</div>
<div>
<p><span style="color: #008000; font-family: Consolas;">         // config.SetEntitySetAccessRule("MiConjuntoDeEntidades", EntitySetRights.AllRead);</span></p>
</div>
<div>
<p><span style="color: #008000; font-family: Consolas;">         // config.SetServiceOperationAccessRule("MiOperaciónDeServicio", ServiceOperationRights.All);</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">         config.DataServiceBehavior.MaxProtocolVersion = <span style="color: #2b91af;">DataServiceProtocolVersion</span>.V2;</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">    }</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">}</span></p>
</div>
<div>
<p> </p>
<p>En nuestro caso el origen de datos es <span style="color: #2b91af; font-family: Consolas;">NorthwindEntities </span>que hace referencia<span style="color: #2b91af; font-family: Consolas;"> </span>al modelo que creamos con entity Framework, y vamos a especificar permisos de crear, leer, actualizar y eliminar datos en la tabla <b>Customers</b> de nuestra DB, la configuración del servicio nos queda así:</p>
</div>
<div>
<p>public <span style="color: #0000ff;">class</span> <span style="color: #2b91af;">NorttwindAccess</span> : <span style="color: #2b91af;">DataService</span>&lt;<span style="color: #2b91af;">NorthwindEntities</span>&gt;<span style="font-family: Consolas;">{</span></p>
</div>
<div>
<p><span style="color: #008000; font-family: Consolas;">        // Se llama a este método una única vez para inicializar directivas aplicables a todo el ámbito del servicio.</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">        </span><span>public</span><span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> InitializeService(<span style="color: #2b91af;">DataServiceConfiguration</span> config)</span><span style="font-family: Consolas;">{</span></p>
</div>
<div>
<p><span style="color: #008000; font-family: Consolas;">          // TODO: establezca reglas para indicar qué operaciones de servicio y conjuntos de entidades son visibles, actualizables, etc.</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">           <span style="color: #008000;">// Ejemplos:</span></span></p>
</div>
<div>
<p><span style="color: #008000; font-family: Consolas;">           // config.SetEntitySetAccessRule("MiConjuntoDeEntidades", EntitySetRights.AllRead);</span></p>
</div>
<div>
<p><span style="color: #008000; font-family: Consolas;">          // config.SetServiceOperationAccessRule("MiOperaciónDeServicio", ServiceOperationRights.All);</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">          config.DataServiceBehavior.MaxProtocolVersion = <span style="color: #2b91af;">DataServiceProtocolVersion</span>.V2;</span></p>
</div>
<div>
<p> <span style="font-family: Consolas;">          config.SetEntitySetAccessRule(</span><span style="color: #a31515;">"Customers"</span><span style="font-family: Consolas;">, </span><span style="color: #2b91af;">EntitySetRights</span><span style="font-family: Consolas;">.All);</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">           config.UseVerboseErrors = <span style="color: #0000ff;">true</span>;</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">        }</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">}</span></p>
</div>
<div>
<p> Cabe resaltar la configuración de UseVerboseErrors en True, esto para lograr obtener el detalle completo de la excepción desde el web services, en caso de que ocurra algún error.</p>
</div>
<div>
<p>Ahora tenemos configurado nuestro servicio de datos, lo podemos probar ingresando a la URL  <a href="http://localhost:1995/NorttwindAccess.svc">http://localhost:1995/NorttwindAccess.svc</a> donde <b>NorttwindAccess</b> es el nombre de nuestro servicio.</p>
</div>
<div>
<p> </p>
</div>
<p class="separator"> <img style="display: block; margin-left: auto; margin-right: auto;" title="testService" alt="testService" src="http://www.avanet.org/Data/Sites/1/media/testservice.png" height="146" width="550" /></p>
<div>
<p>Nos muestra las tablas a la cuales otorgamos permisos, en este caso solo la tabla Customers.</p>
</div>
<div>
<p>También podemos hacer cualquier query a través de la URI de nuestro servicio, algunos ejemplos a continuación:</p>
</div>
<div>
<p> </p>
</div>
<div>
<ul>
<li>Seleccionar todos los registros de la tabla Customers:</li>
</ul>
</div>
<div>
<p>          <a href="http://localhost:1995/NorttwindAccess.svc/Customers">http://localhost:1995/NorttwindAccess.svc/Customers</a></p>
</div>
<div>
<ul>
<li> Seleccionar los registros donde el Campo CustomerID sea igual a “ALFKI”:</li>
</ul>
</div>
<div>
<p>          <a href="http://localhost:1995/NorttwindAccess.svc/Customers('ALFKI')">http://localhost:1995/NorttwindAccess.svc/Customers('ALFKI')</a></p>
</div>
<div>
<ul>
<li>Seleccionar todos los registros de la tabla Customers ordenados por el campo ContactNAme:</li>
</ul>
</div>
<div>
<p><span>          <a href="http://localhost:1995/NorttwindAccess.svc/Customers?$orderby=ContactName">http://localhost:1995/NorttwindAccess.svc/Customers?$orderby=ContactName</a></span></p>
</div>
<div>
<ul>
<li> Seleccionar todos los registros de la tabla Customers donde el campo ContactName termine en “no”:</li>
</ul>
</div>
<div>
<p>          http://localhost:1995/NorttwindAccess.svc/Customers?$filter=endswith(ContactName, 'no')</p>
</div>
<div>
<ul>
<li>Seleccionar los campos CustomerID y ContactName de la tabla Customers:</li>
</ul>
</div>
<div>
<p>          <a href="http://localhost:1995/NorttwindAccess.svc/Customers?$select=CustomerID,ContactName">http://localhost:1995/NorttwindAccess.svc/Customers?$select=CustomerID,ContactName</a></p>
</div>
<div>
<p> Estos son algunos ejemplos de los tantos que se pueden hacer.</p>
</div>
<div>
<p><span style="font-family: Calibri, sans-serif;"> </span></p>
<p>Ahora procedemos a referenciar nuestro nuevo servicio de datos a nuestra aplicación web asp.net, para poder interactuar con él.</p>
</div>
<div>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="serviceReference" alt="serviceReference" src="http://www.avanet.org/Data/Sites/1/media/servicereference.png" height="443" width="550" /> </p>
</div>
<div>
<p>Una vez tenemos nuestro servicio de datos referenciado podemos interactuar con el desde nuestra aplicación.</p>
</div>
<div>
<p>En nuestro ejemplo vamos a crear un CRUD básico para la tabla Customers, visualmente es de la siguiente forma:</p>
</div>
<div>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="CRUD" alt="CRUD" src="http://www.avanet.org/Data/Sites/1/media/crud.png" height="220" width="550" /></p>
</div>
<div> </div>
<div>Para poblar el GridView con todos los Clientes, creamos el siguiente método el cual será invocado en el evento Load de nuestra página.</div>
<div>
<p>private <span style="color: #0000ff;">void</span> LlenarGrid(){</p>
</div>
<div>
<p><span>       var</span><span> serv = <span style="color: #0000ff;">new</span> NorthwindService.<span style="color: #2b91af;">NorthwindEntities</span>(<span style="color: #0000ff;">new</span> <span style="color: #2b91af;">Uri</span>(<span style="color: #a31515;">"http://localhost:1995/NorttwindAccess.svc"</span>));</span></p>
</div>
<div>
<p>       <span style="color: #0000ff;">var</span> clientes = (<span style="color: #0000ff;">from</span> c <span style="color: #0000ff;">in</span> serv.Customers</p>
</div>
<div>
<p><span>                            <span style="color: #0000ff;">orderby</span> c.ContactName</span></p>
</div>
<div>
<p><span>                            <span style="color: #0000ff;">select</span> c).ToList();</span></p>
</div>
<div>
<p><span>       </span><span style="color: #0000ff;">this</span>.gvCustomers.DataSource = clientes;</p>
</div>
<div>
<p><span>       <span style="color: #0000ff;">this</span>.gvCustomers.DataBind();</span></p>
</div>
<div>
<p><span>}</span></p>
</div>
<div>
<p> </p>
<p>Observemos que inicializamos nuestro modelo de datos a partir de nuestro servicios de datos, y sobre el podemos ejecutar cualquier consulta linq to entities, en este caso obtenemos  todos los registros de la tabla Customers y cargamos el GridView con los resultados.</p>
</div>
<div>
<p> </p>
<p>Ahora para eliminar un registro de la tabla Customers, en el vento <span style="font-family: Consolas;">gvCustomers_RowDeleting d</span>e nuestro gridView asignamos el siguiente fragmento de código:</p>
</div>
<div>
<p>try{</p>
</div>
<div>
<p><span>       string</span><span> strID = <span style="color: #0000ff;">this</span>.gvCustomers.Rows[e.RowIndex].Cells[0].Text;</span></p>
</div>
<div>
<p><span>       var</span><span> serv = <span style="color: #0000ff;">new</span> NorthwindService.<span style="color: #2b91af;">NorthwindEntities</span>(<span style="color: #0000ff;">new</span> <span style="color: #2b91af;">Uri</span>(<span style="color: #a31515;">"http://localhost:1995/NorttwindAccess.svc"</span>));</span></p>
</div>
<div>
<p><span>       NorthwindService.<span style="color: #2b91af;">Customers</span> eliminarCliente = (<span style="color: #0000ff;">from</span> c <span style="color: #0000ff;">in</span> serv.Customers</span></p>
</div>
<div>
<p><span>                                                                            <span style="color: #0000ff;">where</span> c.CustomerID.Equals(strID)</span></p>
</div>
<div>
<p><span>                                                                            <span style="color: #0000ff;">select</span> c).Single();</span></p>
</div>
<div>
<p><span>       serv.DeleteObject(eliminarCliente);</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">    serv.SaveChanges();</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">    <span style="color: #0000ff;">this</span>.lblError.Text = <span style="color: #a31515;">"El cliente se elimino correctamente."</span>;</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">    <span style="color: #0000ff;">this</span>.LlenarGrid();</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">}</span><span style="color: #0000ff; font-family: Consolas;">catch</span><span style="font-family: Consolas;"> (<span style="color: #2b91af;">Exception</span> ex)</span><span style="font-family: Consolas;">{</span></p>
</div>
<div>
<p><span style="color: #0000ff; font-family: Consolas;">    this</span><span style="font-family: Consolas;">.lblError.Text = <span style="color: #0000ff;">string</span>.Format(<span style="color: #a31515;">"Ocurrió un error al eliminar el cliete: {0}"</span>, ex.Message);</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">}</span></p>
</div>
<div>
<p> </p>
<p>Para terminar con nuestro ejemplo, vamos a observar el código alojado en el evento click del botón guardar, en el cual se ejecutan las inserciones y actualizaciones a nuestra DB:</p>
</div>
<div>
<p> try{</p>
</div>
<div>
<p><span>       var</span><span> serv = <span style="color: #0000ff;">new</span> NorthwindService.<span style="color: #2b91af;">NorthwindEntities</span>(<span style="color: #0000ff;">new</span> <span style="color: #2b91af;">Uri</span>(<span style="color: #a31515;">"http://localhost:1995/NorttwindAccess.svc"</span>));</span></p>
</div>
<div>
<p><span>       </span><span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">this</span>.hfAccion.Value.Equals(<span style="color: #a31515;">"Nuevo"</span>)){</p>
</div>
<div>
<p><span>           NorthwindService.<span style="color: #2b91af;">Customers</span> customer = <span style="color: #0000ff;">new</span> NorthwindService.<span style="color: #2b91af;">Customers</span></span>{</p>
</div>
<div>
<p><span>                    CustomerID = <span style="color: #0000ff;">this</span>.txtID.Text,</span></p>
</div>
<div>
<p><span>                    ContactName = <span style="color: #0000ff;">this</span>.txtNombre.Text,</span></p>
</div>
<div>
<p><span>                    CompanyName = <span style="color: #0000ff;">this</span>.txtCompania.Text</span></p>
</div>
<div>
<p><span>           };</span></p>
</div>
<div>
<p><span>           serv.AddToCustomers(customer);</span></p>
</div>
<div>
<p><span>       }</span><span style="color: #0000ff;">else</span>{</p>
</div>
<div>            NorthwindService.<span style="color: #2b91af;">Customers</span> modificarCustomer =</div>
<p>            (<span style="color: #0000ff;">from</span> c <span style="color: #0000ff;">in</span> serv.Customers</p>
<div>
<p><span>             <span style="color: #0000ff;">where</span> c.CustomerID.Equals(<span style="color: #0000ff;">this</span>.txtID.Text)</span></p>
</div>
<div>
<p><span>             <span style="color: #0000ff;">select</span> c).Single();</span></p>
</div>
<div>
<p><span>             modificarCustomer.ContactName = <span style="color: #0000ff;">this</span>.txtNombre.Text;</span></p>
</div>
<div>
<p><span>             modificarCustomer.CompanyName = <span style="color: #0000ff;">this</span>.txtCompania.Text;</span></p>
</div>
<div>
<p><span>             serv.UpdateObject(modificarCustomer);</span></p>
</div>
<div>
<p><span>       }</span></p>
</div>
<div>
<p>       serv.SaveChanges();</p>
</div>
<div>
<p><span style="font-family: Consolas;">    <span style="color: #0000ff;">this</span>.lblError.Text = <span style="color: #a31515;">"El cliente se actualizó correctamente."</span>;</span></p>
</div>
<div>
<p><span>       <span style="color: #0000ff;">this</span>.hfAccion.Value = <span style="color: #a31515;">"Nuevo"</span>;</span></p>
</div>
<div>
<p><span>       <span style="color: #0000ff;">this</span>.txtID.Enabled = <span style="color: #0000ff;">true</span>;</span></p>
</div>
<div>
<p><span>       </span><span style="color: #0000ff; font-family: Consolas;">this</span><span style="font-family: Consolas;">.LlenarGrid();</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">}</span><span style="color: #0000ff; font-family: Consolas;">catch</span><span style="font-family: Consolas;"> (<span style="color: #2b91af;">Exception</span> ex)</span><span style="font-family: Consolas;">{</span></p>
</div>
<div>
<p><span style="color: #0000ff; font-family: Consolas;">    this</span><span style="font-family: Consolas;">.lblError.Text = <span style="color: #0000ff;">string</span>.Format(<span style="color: #a31515;">"Ocurrió un error al ingresar el cliete: {0}"</span>, ex.Message);</span></p>
</div>
<div>
<p><span style="font-family: Consolas;">}</span></p>
</div>
<div>
<p> </p>
<p>Con esto doy por terminado el artículo, espero que sea de gran utilidad para muchos, adicional el link de los fuentes de la solución y el .bak de la base de datos a continuación. En un próximo artículo estaré mostrando como consumir estos Data Services  mediante Jquery a través de una petición AJAX.</p>
</div>
<div>
<p><a href="https://www.dropbox.com/s/v3wcbg7kh65ktrn/WCFDataServicesExample%20-%20copia.rar">https://www.dropbox.com/s/v3wcbg7kh65ktrn/WCFDataServicesExample%20-%20copia.rar</a></p>
<p>También puedes observar este articulo en mi blog:</p>
<p><a href="http://eltavodev.blogspot.com/2013/04/crud-basico-con-wcf-data-services.html">http://eltavodev.blogspot.com/2013/04/crud-basico-con-wcf-data-services.html</a></p>
<p> </p>
<p>Saludos.</p>
</div><br /><a href='http://www.avanet.org/crud-básico-con-wcf-data-services.aspx'>tavo</a>&nbsp;&nbsp;<a href='http://www.avanet.org/crud-básico-con-wcf-data-services.aspx'>...</a><a class='tweetthislink' title='Tweet This' href='http://twitter.com/home?status=Crud+b%c3%a1sico+con+wcf+data+services+http%3a%2f%2fwww.avanet.org%2fcrud-b%c3%a1sico-con-wcf-data-services.aspx'><img src='http://www.avanet.org/Data/SiteImages/tweetthis3.png' alt='Tweet This' /></a><div class='fblikebutton'><iframe src='http://www.facebook.com/plugins/like.php?href=http%3a%2f%2fwww.avanet.org%2fcrud-b%c3%a1sico-con-wcf-data-services.aspx&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;height=35&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden;width:450px; height:35px;'></iframe></div>]]></description>
      <link>http://www.avanet.org/crud-básico-con-wcf-data-services.aspx</link>
      <author>tavo</author>
      <pubDate>Tue, 07 May 2013 03:37:00 GMT</pubDate>
    </item>
    <item>
      <title>Llega WebMatrix 3 en Versión Final</title>
      <description><![CDATA[Hola a todo, para los que tenían la versión beta de WebMatrix 3, pueden estar entusiasmados por que ya ha sido liberada la versión final de este producto. El propio Scott Guthrie lo anuncia en Announcing the Release of WebMatrix 3.
Esta versión viene enfocada al trabajo en la nube y a la integración con repositorios de código como Git y TFS, nuestro amigo @chalalo ya nos lo haba mencionado en Se nos viene WebMatrix 3, mucho más pro!. Así que no siendo mas a descargar.

Saludos.
Romny <a href='http://avanet.org/llega-webmatrix-3-en-versión-final.aspx'>Leer más</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://avanet.org/llega-webmatrix-3-en-versión-final.aspx</link>
      <author>Romny Duarte</author>
      <pubDate>Fri, 03 May 2013 03:09:00 GMT</pubDate>
    </item>
    <item>
      <title>Avanet en el Segundo Seminario de Ingenierías Unitrópico 2013</title>
      <description><![CDATA[Hola a todos.
Los chicos de La Fundación Universitaria Internacional del Trópico Americano Unitrópico, en cabeza de su Decanatura de Ingenierías, han invitado a la comunidad de Avanet para que nos vinculemos con una charla en su Segundo Seminario... <a href='http://avanet.org/avanet-en-el-segundo-seminario-de-ingenierías-unitrópico-2013.aspx'>Leer más</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://avanet.org/avanet-en-el-segundo-seminario-de-ingenierías-unitrópico-2013.aspx</link>
      <author>Romny Duarte</author>
      <pubDate>Thu, 02 May 2013 12:30:00 GMT</pubDate>
    </item>
    <item>
      <title>Embeber y reproducir un sonido WAV en una app de Windows Phone 7</title>
      <description><![CDATA[Hace unos días, estuve viendo una app bastante curiosa en mi teléfono llamada Instant Buttons, de la que me surgió la inquietud de conocer cómo hacer para incluir un sonido y reproducirlo en una app. A continuación lo veremos:
Lo primero que... <a href='http://avanet.org/embeber-y-reproducir-un-sonido-wav-en-una-app-de-windows-phone-7.aspx'>Leer más</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://avanet.org/embeber-y-reproducir-un-sonido-wav-en-una-app-de-windows-phone-7.aspx</link>
      <author>Hernan Guzmán</author>
      <pubDate>Wed, 01 May 2013 20:47:00 GMT</pubDate>
    </item>
    <item>
      <title>Primer Workshop de Arquitectura de Software</title>
      <description><![CDATA[El pasado fin de semana realizamos nuestro primer Workshop de Arquitectura de Software en Modo BETA, con el fin de retomar una de las tareas que nos propusimos al inicial la comunidad, de llevar y compartir con otros buenas practicas de ingeniería ... <a href='http://avanet.org/primer-workshop-de-arquitectura-de-software.aspx'>Leer más</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://avanet.org/primer-workshop-de-arquitectura-de-software.aspx</link>
      <author>Sorey García</author>
      <pubDate>Thu, 25 Apr 2013 15:03:00 GMT</pubDate>
    </item>
    <item>
      <title>ASP.NET Web Helpers Library en ASP.NET Web Forms</title>
      <description><![CDATA[Hola a todos los compañeros geeks.
Muchos conocen los ASP.NET Web Helpers Library y saben que son una serie de funcionalidades para trabajar con la parte social, como Twitter y Facebook, pero están para trabajar con ASP.NET Web pages, por consiguiente para poderlas usar en nuestras aplicaciones de ASP.NET and Web Forms tenemos que hacer los siguiente pasos.
Creado nuestro sitio web con ASP.NET and Web Forms, Vamos al administrador de paquetes de nuget.

Buscamos el paquete de ASP.NET Web... <a href='http://avanet.org/aspnet-web-helpers-library-en-aspnet-web-form.aspx'>Leer más</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://avanet.org/aspnet-web-helpers-library-en-aspnet-web-form.aspx</link>
      <author>Romny Duarte</author>
      <pubDate>Thu, 25 Apr 2013 00:52:00 GMT</pubDate>
    </item>
    <item>
      <title>Global Windows Azure Bootcamp - Medellín</title>
      <description><![CDATA[Este próximo sábado 27 de abril, se llevara a cabo el Global Windows Azure Bootcamp en más de 70 ciudades a nivel mundial, en este evento aprenderás a desarrollar aplicaciones que utilicen Windows Azure. El evento tendrá varios entrenadores con gran ... <a href='http://avanet.org/global-windows-azure-bootcamp-medellín.aspx'>Leer más</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://avanet.org/global-windows-azure-bootcamp-medellín.aspx</link>
      <author>khriztianmoreno</author>
      <pubDate>Mon, 22 Apr 2013 14:05:00 GMT</pubDate>
    </item>
    <item>
      <title>Estado Civil: Reinstalar</title>
      <description><![CDATA[Uno como usuario establece una relación con los aparatos, utensilios y demás objetos que lo rodean, con el paso del tiempo estas relaciones son completamente simbióticas hasta el punto que nos sentimos disgustados cuando lavan nuestra cobija, pero... <a href='http://avanet.org/estado-civil-reinstalar.aspx'>Leer más</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://avanet.org/estado-civil-reinstalar.aspx</link>
      <author>Edilay</author>
      <pubDate>Fri, 19 Apr 2013 19:51:00 GMT</pubDate>
    </item>
    <item>
      <title>Completa libreria para manejo de texto en .net #TextManager</title>
      <description><![CDATA[TextManager es una librería que contiene diferentes herramientas que te ayudan a manipular texto de una manera mas fácil y rápida en .net
Contiene herramientas como:
- Contador de letras
- Contador de palabras
- Búsqueda de palabras repetidas continuas
- Realiza búsquedas exactas o también puede omitir mayúsculas y minúsculas
- Comprueba diferentes formatos o tipos de datos como boo, int, double, short o datetime.
- Convertir numeros escritos en letras a enteros
 
Algunas... <a href='http://avanet.org/-completa-libreria-para-manejo-de-texto-en-net-textmanager.aspx'>Leer más</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://avanet.org/-completa-libreria-para-manejo-de-texto-en-net-textmanager.aspx</link>
      <author>Miguel Teheran</author>
      <pubDate>Fri, 19 Apr 2013 19:33:00 GMT</pubDate>
    </item>
    <item>
      <title>Enviar correo electrónico a una carpeta del sistema en C#</title>
      <description><![CDATA[<p>Hay ocasiones en las que necesitamos probar partes de nuestro código que incluyen la funcionalidad de envío de correos electrónicos y no siempre se puede contar en los ambientes de desarrollo o pruebas con un servidor de correo SMTP. Una alternativa para probar nuestras funcionalidades en ese contexto, es almacenando los mensajes de correo en una carpeta específica del servidor.</p>
<p>Para hacer esto, es tan sencillo como agregar la siguiente sección en el archivo de configuración de la aplicación:</p>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;"><span style="color: blue;">&lt;</span><span style="color: #a31515;">system.net</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">    &lt;</span><span style="color: #a31515;">mailSettings</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">        &lt;</span><span style="color: #a31515;">smtp</span><span style="color: blue;"> </span><span style="color: red;">deliveryMethod</span><span style="color: blue;">=</span>"<span style="color: blue;">SpecifiedPickupDirectory</span>"<span style="color: blue;">&gt;</span>
<span style="color: blue;">            &lt;</span><span style="color: #a31515;">specifiedPickupDirectory</span><span style="color: blue;"> </span><span style="color: red;">pickupDirectoryLocation</span><span style="color: blue;">=</span>"<span style="color: blue;">C:\TempMail</span>"<span style="color: blue;"> /&gt;</span>
<span style="color: blue;">        &lt;/</span><span style="color: #a31515;">smtp</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">    &lt;/</span><span style="color: #a31515;">mailSettings</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">  &lt;/</span><span style="color: #a31515;">system.net</span><span style="color: blue;">&gt;</span></pre>
<p>Y podemos hacer la prueba agregando un código básico para generar un correo electrónico:</p>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;">            <span style="color: blue;">using</span> (<span style="color: #2b91af;">SmtpClient</span> client = <span style="color: blue;">new</span> <span style="color: #2b91af;">SmtpClient</span>())
            {
                <span style="color: blue;">string</span> from = <span style="color: #a31515;">"me@localhost.com"</span>;
                <span style="color: blue;">string</span> to = <span style="color: #a31515;">"you@remote.com"</span>;
                <span style="color: blue;">string</span> subject = <span style="color: #a31515;">"Sending to local directory"</span>;
                <span style="color: blue;">string</span> body = <span style="color: #a31515;">"It works!"</span>;
 
                <span style="color: #2b91af;">MailMessage</span> message = <span style="color: blue;">new</span> <span style="color: #2b91af;">MailMessage</span>(from, to, subject, body);
 
                client.Send(message);
            }</pre>
<p>Luego de esto, podemos ir a buscar el mensaje en la carpeta específicada, y encontraremos el archivo del correo electrónico generado:</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" alt="" src="http://www.avanet.org/Data/Sites/1/imagenes/mcs/savemailtofolder01.png" /></p>
<p> </p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" alt="" src="http://www.avanet.org/Data/Sites/1/imagenes/mcs/savemailtofolder02.png" height="423" width="516" /></p>
<p>Para tener en cuenta:</p>
<ul>
<li>La carpeta especificada en el web.config debe existir, ya que no es creada automáticamente.</li>
<li>Desde ASP.NET, el servidor IIS debe estar configurado para tener permisos de escritura en la carpeta especificada.</li>
</ul>
<p>Espero que sea de utilidad!</p>
<p><a title="@hernandgr" href="http://twitter.com/hernandgr" target="_blank">@hernandgr</a></p><br /><a href='http://www.avanet.org/enviar-correo-electronico-a-una-carpeta-del-sistema-en-c-sharp.aspx'>Hernan Guzmán</a>&nbsp;&nbsp;<a href='http://www.avanet.org/enviar-correo-electronico-a-una-carpeta-del-sistema-en-c-sharp.aspx'>...</a><a class='tweetthislink' title='Tweet This' href='http://twitter.com/home?status=Enviar+correo+electr%c3%b3nico+a+una+carpeta+del+sis...+http%3a%2f%2fwww.avanet.org%2fenviar-correo-electronico-a-una-carpeta-del-sistema-en-c-sharp.aspx'><img src='http://www.avanet.org/Data/SiteImages/tweetthis3.png' alt='Tweet This' /></a><div class='fblikebutton'><iframe src='http://www.facebook.com/plugins/like.php?href=http%3a%2f%2fwww.avanet.org%2fenviar-correo-electronico-a-una-carpeta-del-sistema-en-c-sharp.aspx&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;height=35&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden;width:450px; height:35px;'></iframe></div>]]></description>
      <link>http://www.avanet.org/enviar-correo-electronico-a-una-carpeta-del-sistema-en-c-sharp.aspx</link>
      <author>Hernan Guzmán</author>
      <pubDate>Tue, 16 Apr 2013 03:56:00 GMT</pubDate>
    </item>
    <item>
      <title>Creando un servicio WCF básico con JSON</title>
      <description><![CDATA[<p style="text-align: justify;">En este tutorial, veremos cómo crear de forma sencilla un servicio WCF que haga uso de <em>JSON</em>.</p>
<p style="text-align: justify;">El primer paso es crear una solución de código web en blanco en Visual Studio</p>
<p style="text-align: justify;"><img alt="" src="http://www.avanet.org/Data/Sites/1/imagenes/mcs/wcfjson01.png" height="457" width="750" /></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">Luego de esto, adicionamos un nuevo ítem, y seleccionamos en el tipo un Servicio WCF</p>
<p style="text-align: justify;"><img alt="" src="http://www.avanet.org/Data/Sites/1/imagenes/mcs/wcfjson02.png" height="457" width="750" /></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">Para comenzar a desarrollar el ejemplo, adicionaremos una clase Persona con unos datos básicos, de la siguiente forma:</p>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;"><span style="color: blue;">using</span> System.Runtime.Serialization;
 
<span style="color: blue;">namespace</span> EjemploWcfJSon.Entidades
{
    [<span style="color: #2b91af;">DataContract</span>]
    <span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">Persona</span>
    {
        [<span style="color: #2b91af;">DataMember</span>]
        <span style="color: blue;">public</span> <span style="color: blue;">int</span> IdPersona { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
 
        [<span style="color: #2b91af;">DataMember</span>]
        <span style="color: blue;">public</span> <span style="color: blue;">string</span> Nombre { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
 
        [<span style="color: #2b91af;">DataMember</span>]
        <span style="color: blue;">public</span> <span style="color: blue;">string</span> Direccion { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
 
        [<span style="color: #2b91af;">DataMember</span>]
        <span style="color: blue;">public</span> <span style="color: blue;">string</span> Edad { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
    }
}
</pre>
<p style="text-align: justify;">Es importante anotar que para un correcto funcionamiento en WCF, la clase debe llevar obligatoriamente el atributo <strong>DataContract</strong> y las propiedades el atributo <strong>DataMember</strong>.</p>
<p style="text-align: justify;">Luego de esto, adicionamos en la interface del servicio la firma del método a implementar para el ejemplo, de la siguiente forma:</p>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;">    [<span style="color: #2b91af;">ServiceContract</span>]
    <span style="color: blue;">public</span> <span style="color: blue;">interface</span> <span style="color: #2b91af;">IPersona</span>
    {
        [<span style="color: #2b91af;">OperationContract</span>]
        [<span style="color: #2b91af;">WebGet</span>(UriTemplate = <span style="color: #a31515;">"ConsultarPersonas"</span>, 
                RequestFormat = <span style="color: #2b91af;">WebMessageFormat</span>.Json, 
                ResponseFormat = <span style="color: #2b91af;">WebMessageFormat</span>.Json)]
        <span style="color: #2b91af;">List</span>&lt;Entidades.<span style="color: #2b91af;">Persona</span>&gt; ConsultarPersonas();
    }</pre>
<p style="text-align: justify;">En esta clase, resaltamos el uso del atributo <strong>WebGet</strong>, en el cual especificamos el formato que queremos utilizar en nuestro servicio, el cual es <em>JSON</em> en este caso.</p>
<p style="text-align: justify;">Luego, lo que haremos es escribir el código del servicio que implementará la interface. En este, adicionamos un código para que retorne una colección de datos de ejemplo de la siguiente forma:</p>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;">        <span style="color: blue;">public</span> <span style="color: #2b91af;">List</span>&lt;Entidades.<span style="color: #2b91af;">Persona</span>&gt; ConsultarPersonas()
        {
            <span style="color: #2b91af;">List</span>&lt;Entidades.<span style="color: #2b91af;">Persona</span>&gt; personas = <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span>&lt;Entidades.<span style="color: #2b91af;">Persona</span>&gt;();
 
            personas.Add(<span style="color: blue;">new</span> Entidades.<span style="color: #2b91af;">Persona</span>() { IdPersona = 1, Nombre = <span style="color: #a31515;">"Hernan"</span>, Direccion = <span style="color: #a31515;">"Carrera 50"</span>, Edad = <span style="color: #a31515;">"26"</span> });
            personas.Add(<span style="color: blue;">new</span> Entidades.<span style="color: #2b91af;">Persona</span>() { IdPersona = 1, Nombre = <span style="color: #a31515;">"Jose"</span>, Direccion = <span style="color: #a31515;">"Calle 70"</span>, Edad = <span style="color: #a31515;">"54"</span> });
            personas.Add(<span style="color: blue;">new</span> Entidades.<span style="color: #2b91af;">Persona</span>() { IdPersona = 1, Nombre = <span style="color: #a31515;">"Jaime"</span>, Direccion = <span style="color: #a31515;">"Carrera 7"</span>, Edad = <span style="color: #a31515;">"13"</span> });
            personas.Add(<span style="color: blue;">new</span> Entidades.<span style="color: #2b91af;">Persona</span>() { IdPersona = 1, Nombre = <span style="color: #a31515;">"Alejandro"</span>, Direccion = <span style="color: #a31515;">"Calle 30"</span>, Edad = <span style="color: #a31515;">"29"</span> });
            personas.Add(<span style="color: blue;">new</span> Entidades.<span style="color: #2b91af;">Persona</span>() { IdPersona = 1, Nombre = <span style="color: #a31515;">"Cesar"</span>, Direccion = <span style="color: #a31515;">"Carrera 10"</span>, Edad = <span style="color: #a31515;">"35"</span> });
 
            <span style="color: blue;">return</span> personas;
        }   </pre>
<p style="text-align: justify;">Finalmente, debemos adicionar una configuración al web.config para que nuestro servicio WCF tenga un endpoint configurado para funcionar con JSON. La modificación se hace agregando alguna configuración en los elementos &lt;endpointBehaviors /&gt;, &lt;bindings /&gt; y &lt;services /&gt;</p>
<p style="text-align: justify;">El archivo web.config resultante se verá así:</p>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;"><span style="color: blue;">&lt;?</span><span style="color: #a31515;">xml</span><span style="color: blue;"> </span><span style="color: red;">version</span><span style="color: blue;">=</span>"<span style="color: blue;">1.0</span>"<span style="color: blue;">?&gt;</span>
<span style="color: blue;">&lt;</span><span style="color: #a31515;">configuration</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">  &lt;</span><span style="color: #a31515;">system.web</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">    &lt;</span><span style="color: #a31515;">compilation</span><span style="color: blue;"> </span><span style="color: red;">debug</span><span style="color: blue;">=</span>"<span style="color: blue;">true</span>"<span style="color: blue;"> </span><span style="color: red;">targetFramework</span><span style="color: blue;">=</span>"<span style="color: blue;">4.5</span>"<span style="color: blue;"> /&gt;</span>
<span style="color: blue;">    &lt;</span><span style="color: #a31515;">httpRuntime</span><span style="color: blue;"> </span><span style="color: red;">targetFramework</span><span style="color: blue;">=</span>"<span style="color: blue;">4.5</span>"<span style="color: blue;"> /&gt;</span>
<span style="color: blue;">  &lt;/</span><span style="color: #a31515;">system.web</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">  &lt;</span><span style="color: #a31515;">system.serviceModel</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">    &lt;</span><span style="color: #a31515;">serviceHostingEnvironment</span><span style="color: blue;"> </span><span style="color: red;">aspNetCompatibilityEnabled</span><span style="color: blue;">=</span>"<span style="color: blue;">true</span>"
<span style="color: blue;">        </span><span style="color: red;">multipleSiteBindingsEnabled</span><span style="color: blue;">=</span>"<span style="color: blue;">true</span>"<span style="color: blue;"> /&gt;    </span>
<span style="color: blue;">    &lt;</span><span style="color: #a31515;">behaviors</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">      &lt;</span><span style="color: #a31515;">serviceBehaviors</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">        &lt;</span><span style="color: #a31515;">behavior</span><span style="color: blue;"> </span><span style="color: red;">name</span><span style="color: blue;">=</span>""<span style="color: blue;">&gt;</span>
<span style="color: blue;">          &lt;</span><span style="color: #a31515;">serviceMetadata</span><span style="color: blue;"> </span><span style="color: red;">httpGetEnabled</span><span style="color: blue;">=</span>"<span style="color: blue;">true</span>"<span style="color: blue;"> </span><span style="color: red;">httpsGetEnabled</span><span style="color: blue;">=</span>"<span style="color: blue;">true</span>"<span style="color: blue;"> /&gt;</span>
<span style="color: blue;">          &lt;</span><span style="color: #a31515;">serviceDebug</span><span style="color: blue;"> </span><span style="color: red;">includeExceptionDetailInFaults</span><span style="color: blue;">=</span>"<span style="color: blue;">false</span>"<span style="color: blue;"> /&gt;</span>
<span style="color: blue;">        &lt;/</span><span style="color: #a31515;">behavior</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">      &lt;/</span><span style="color: #a31515;">serviceBehaviors</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">      &lt;</span><span style="color: #a31515;">endpointBehaviors</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">        &lt;</span><span style="color: #a31515;">behavior</span><span style="color: blue;"> </span><span style="color: red;">name</span><span style="color: blue;">=</span>"<span style="color: blue;">web</span>"<span style="color: blue;">&gt;</span>
<span style="color: blue;">          &lt;</span><span style="color: #a31515;">webHttp</span><span style="color: blue;">/&gt;</span>
<span style="color: blue;">        &lt;/</span><span style="color: #a31515;">behavior</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">      &lt;/</span><span style="color: #a31515;">endpointBehaviors</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">    &lt;/</span><span style="color: #a31515;">behaviors</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">    &lt;</span><span style="color: #a31515;">bindings</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">      &lt;</span><span style="color: #a31515;">webHttpBinding</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">        &lt;</span><span style="color: #a31515;">binding</span><span style="color: blue;"> </span><span style="color: red;">name</span><span style="color: blue;">=</span>"<span style="color: blue;">webHttpBindingJson</span>"<span style="color: blue;"> </span><span style="color: red;">crossDomainScriptAccessEnabled</span><span style="color: blue;">=</span>"<span style="color: blue;">true</span>"<span style="color: blue;">/&gt;</span>
<span style="color: blue;">      &lt;/</span><span style="color: #a31515;">webHttpBinding</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">    &lt;/</span><span style="color: #a31515;">bindings</span><span style="color: blue;">&gt;    </span>
<span style="color: blue;">    &lt;</span><span style="color: #a31515;">services</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">      &lt;</span><span style="color: #a31515;">service</span><span style="color: blue;"> </span><span style="color: red;">name</span><span style="color: blue;">=</span>"<span style="color: blue;">EjemploWcfJson.Servicio.Persona</span>"<span style="color: blue;"> &gt;</span>
<span style="color: blue;">        &lt;</span><span style="color: #a31515;">endpoint</span><span style="color: blue;"> </span><span style="color: red;">address</span><span style="color: blue;">=</span>""<span style="color: blue;"> </span><span style="color: red;">binding</span><span style="color: blue;">=</span>"<span style="color: blue;">webHttpBinding</span>"<span style="color: blue;"> </span><span style="color: red;">bindingConfiguration</span><span style="color: blue;">=</span>"<span style="color: blue;">webHttpBindingJson</span>"<span style="color: blue;"> </span><span style="color: red;">contract</span><span style="color: blue;">=</span>"<span style="color: blue;">EjemploWcfJson.Servicio.IPersona</span>"<span style="color: blue;"> </span><span style="color: red;">behaviorConfiguration</span><span style="color: blue;">=</span>"<span style="color: blue;">web</span>"<span style="color: blue;">/&gt;</span>
<span style="color: blue;">      &lt;/</span><span style="color: #a31515;">service</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">    &lt;/</span><span style="color: #a31515;">services</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">  &lt;/</span><span style="color: #a31515;">system.serviceModel</span><span style="color: blue;">&gt;</span>
<span style="color: blue;">&lt;/</span><span style="color: #a31515;">configuration</span><span style="color: blue;">&gt;</span></pre>
<p style="text-align: justify;">Una vez hecho esto, ya podemos ejecutar el servicio desde un navegador, y veremos la respuesta con los datos en formato JSON.</p>
<p style="text-align: justify;"><img alt="" src="http://www.avanet.org/Data/Sites/1/imagenes/mcs/wcfjson03.png" height="184" width="852" /></p>
<p style="text-align: justify;">Si la prueba la hacemos en Internet Explorer, obtendremos un archivo para descarga, que podemos abrir con un editor de texto y veremos que contiene los mismos datos.</p>
<p style="text-align: justify;">Espero que este ejemplo sea de utilidad. El código del mismo lo pueden encontrar en mi cuenta de <a title="GitHub" href="https://github.com/hernandgr/SampleCode" target="_blank">GitHub</a>.</p>
<p style="text-align: justify;"><a title="@hernandgr" href="http://twitter.com/hernandgr" target="_blank">@hernandgr</a></p><br /><a href='http://www.avanet.org/creando-un-servicio-wcf-basico-con-json.aspx'>Hernan Guzmán</a>&nbsp;&nbsp;<a href='http://www.avanet.org/creando-un-servicio-wcf-basico-con-json.aspx'>...</a><a class='tweetthislink' title='Tweet This' href='http://twitter.com/home?status=Creando+un+servicio+WCF+b%c3%a1sico+con+JSON+http%3a%2f%2fwww.avanet.org%2fcreando-un-servicio-wcf-basico-con-json.aspx'><img src='http://www.avanet.org/Data/SiteImages/tweetthis3.png' alt='Tweet This' /></a><div class='fblikebutton'><iframe src='http://www.facebook.com/plugins/like.php?href=http%3a%2f%2fwww.avanet.org%2fcreando-un-servicio-wcf-basico-con-json.aspx&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;height=35&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden;width:450px; height:35px;'></iframe></div>]]></description>
      <link>http://www.avanet.org/creando-un-servicio-wcf-basico-con-json.aspx</link>
      <author>Hernan Guzmán</author>
      <pubDate>Mon, 15 Apr 2013 01:40:00 GMT</pubDate>
    </item>
    <item>
      <title>Manipular hojas de Excel usando la librería EPPlus</title>
      <description><![CDATA[<p>A continuación quiero hacer una breve introducción a una librería para realizar operaciones con hojas de Excel muy interesante que encontré, motivado por una necesidad específica que tenía en mi trabajo:</p>
<p>En internet se encuentra una gran variedad de componentes libres que permiten realizar fácilmente operaciones con hojas de Excel. Entre las ventajas que brindan estos componentes, la mayor es la de no depender de tener que instalar software adicional ni de hacer implementaciones complejas, ya que el objetivo de estos componentes es encapsular esa complejidad en métodos mas sencillos que permiten a los desarrolladores concentrarse realmente en lo que necesitan hacer y brindando mayor productividad.</p>
<p>Es así como llegué a encontrar la librería EPPlus en Codeplex. Dicha librería tiene buena reputación en diferentes fuentes que encontré en internet realizando mi investigación, y en Codeplex se puede corroborar que es un proyecto que ya lleva un buen tiempo, con varias versiones de por medio, buenas calificaciones y con más de 30.000 descargas hoy en día.</p>
<p style="color: #000000; font-family: 'Trebuchet MS'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">Entre las caracterí­sticas que permite manejar EPPlus, según su documentación, están:</p>
<ul style="color: #000000; font-family: 'Trebuchet MS'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
<li>Manejo de rangos</li>
<li>Aplicar estilos</li>
<li>Gráficos</li>
<li>Imágenes</li>
<li>Tablas</li>
<li>Protección</li>
<li>Encripctación</li>
<li>Tablas Pivot</li>
<li>Validación de datos</li>
<li>VBA</li>
</ul>
<p style="color: #000000; font-family: 'Trebuchet MS'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">A continuación, un ejemplo de un "Hola mundo" con EPPlus:</p>
<pre style="font-family: Consolas; font-size: 13; color: black; background: white;">        <span style="color: blue;">private</span> <span style="color: blue;">void</span> CreateExcel()
        {
            <span style="color: blue;">string</span> rutaArchivo = <span style="color: #a31515;">@"D:\Documento.xlsx"</span>;
 
            <span style="color: blue;">using</span> (<span style="color: #2b91af;">ExcelPackage</span> package = <span style="color: blue;">new</span> <span style="color: #2b91af;">ExcelPackage</span>(<span style="color: blue;">new</span> <span style="color: #2b91af;">FileInfo</span>(rutaArchivo)))
            {
                <span style="color: blue;">var</span> worksheet = package.Workbook.Worksheets.Add(<span style="color: #a31515;">"Contenido"</span>);
                worksheet.Cells[<span style="color: #a31515;">"B1"</span>].Value = <span style="color: #a31515;">"Hello world!"</span>;
                package.Save();
            }
        }<br /><img style="display: block; margin-left: auto; margin-right: auto;" alt="" src="http://www.avanet.org/Data/Sites/1/imagenes/mcs/updateexceleppplus.png" height="172" width="305" /></pre>
<p style="color: #000000; font-family: 'Trebuchet MS'; font-size: small; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">Este es sólo un mínimo ejemplo de lo que permite hacer esta librería. Los invito a visitar su página, donde pueden encontrar más documentación y ejemplos: <a style="color: #65a606;" href="http://epplus.codeplex.com/">http://epplus.codeplex.com/</a></p><br /><a href='http://www.avanet.org/manipular-hojas-de-excel-usando-la-librería-epplus.aspx'>Hernan Guzmán</a>&nbsp;&nbsp;<a href='http://www.avanet.org/manipular-hojas-de-excel-usando-la-librería-epplus.aspx'>...</a><a class='tweetthislink' title='Tweet This' href='http://twitter.com/home?status=Manipular+hojas+de+Excel+usando+la+librer%c3%ada+EPPlus+http%3a%2f%2fwww.avanet.org%2fmanipular-hojas-de-excel-usando-la-librer%c3%ada-epplus.aspx'><img src='http://www.avanet.org/Data/SiteImages/tweetthis3.png' alt='Tweet This' /></a><div class='fblikebutton'><iframe src='http://www.facebook.com/plugins/like.php?href=http%3a%2f%2fwww.avanet.org%2fmanipular-hojas-de-excel-usando-la-librer%c3%ada-epplus.aspx&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;height=35&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden;width:450px; height:35px;'></iframe></div>]]></description>
      <link>http://www.avanet.org/manipular-hojas-de-excel-usando-la-librería-epplus.aspx</link>
      <author>Hernan Guzmán</author>
      <pubDate>Sat, 06 Apr 2013 21:51:00 GMT</pubDate>
    </item>
    <item>
      <title>Sensibilización en Metodologías Ágiles</title>
      <description><![CDATA[Quisiera aclarar, que no soy ni mucho menos experta en metodologías ágiles. Como saben quienes leen mi blog, el tema de la Ingeniería de Software me encanta, y desde hace ya casi un año ando interesandome día con día en el tema de metodologías... <a href='http://avanet.org/sensibilización-en-metodologías-ágiles.aspx'>Leer más</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://avanet.org/sensibilización-en-metodologías-ágiles.aspx</link>
      <author>Sorey García</author>
      <pubDate>Fri, 08 Mar 2013 13:05:00 GMT</pubDate>
    </item>
    <item>
      <title>Cambiar de partición la base de datos del servicio de búsqueda</title>
      <description><![CDATA[<p style="text-align: justify;">Esta semana en el trabajo, tuvimos la necesidad de mover las bases de datos del servicio de búsqueda de SharePoint a otra partición del disco duro del servidor, en nuestro caso se debido a que nuestro servidor backend se quedaba corto en disco y por eso mirábamos la forma de tener esta bases de datos en otro partición.</p>
<p style="text-align: justify;">Muchos pueden pensar que por que no se crearon las bases de datos antes en la partición que necesitábamos, pues bien esto tiene su simple respuesta. Justo en el momento que se crea el servicio de búsqueda de SharePoint, este crea las bases de datos con la instancia por defecto que esta especificada en el servidor de bases de datos en la administración central de SharePoint.</p>
<p style="text-align: justify;">Cuando creamos nuestro servicio de búsqueda el sistema nos crea tres bases de datos que son las que quereos mover.</p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="SPDB" alt="" src="http://avanet.org/Data/Sites/1/sharepoint/spsdb1.png" height="51" width="456" /></p>
<p style="text-align: justify;">Ahora si lo que nos interesa, vamos a ver cómo mover la base de datos a una nueva partición.</p>
<h3 style="text-align: justify;">Para detener la aplicación de servicio de búsqueda</h3>
<p style="text-align: justify;">Comprobamos que la cuenta de usuario que está realizando este procedimiento pertenece al grupo de administradores de la granja de servidores de SharePoint.</p>
<p style="text-align: justify;"><i>Para cada aplicación de servicio cuya base de datos planea cambiar, debe detener el servicio o deshabilitar la aplicación de servicio</i>. En este caso como vamos a detener los siguientes servicios, en este caso como vamos a detener los siguientes servicios:</p>
<ol style="text-align: justify;">
<li>SharePoint 2010 Timer</li>
<li>SharePoint 2010 Administration</li>
<li>SharePoint Server Search 14</li>
</ol>
<p style="text-align: justify;"><strong>Nota</strong>: Para detener estos servicios puede ayudarse de la herramienta <a href="http://sharepointserviceman.codeplex.com/">SharePoint 2010 Service Manager</a> que puede descargarse desde CodePlex. </p>
<p><span style="text-align: justify;">Luego de esto para mover una base de datos es necesario desasociarla de SQL Server, mover los archivos a la nueva ubicación mediante el Explorador de Windows y, a continuación, adjuntar la base de datos a la nueva instancia de SQL Server.</span></p>
<p style="text-align: justify;">En SQL Server Management Studio, abra la instancia de SQL Server de origen y, a continuación, expanda el nodo <strong>Bases de datos</strong>.</p>
<p style="text-align: justify;">Hacemos clic con el botón secundario en la base de datos, seleccione <strong>Tareas</strong> y, a continuación, hacemos clic en <strong>Desasociar</strong>. Repetimos este paso para cada base de datos del servicio de búsqueda. </p>
<p><img style="display: block; margin-left: auto; margin-right: auto;" title="SPDB2" alt="" src="http://avanet.org/Data/Sites/1/sharepoint/spsdb2.png" height="479" width="479" /></p>
<h3 style="text-align: justify;">Para mover los archivos de base de datos a una nueva ubicación mediante el Explorador de Windows</h3>
<ol style="text-align: justify;">
<li style="text-align: left;">En el Explorador de Windows, buscamos los archivos .<strong>mdf </strong> y .<strong>ldf</strong> correspondientes a las bases de datos de la aplicación de servicio, por lo general están en :  <strong><em>C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA</em></strong></li>
<li>Seleccionamos los archivos .<strong>mdf</strong> y .<strong>ldf</strong> correspondientes a las bases de datos que deseamos  mover y, a continuación, los copiamos al directorio de destino. </li>
</ol>
<p><img style="display: block; margin-left: auto; margin-right: auto;" alt="" src="http://avanet.org/Data/Sites/1/sharepoint/spsdb3.png" height="129" width="489" /></p>
<h3 style="text-align: justify;">Para adjuntar una base de datos a una nueva instancia de SQL Server</h3>
<ol style="text-align: justify;">
<li>En Management Studio, abrimos la instancia de SQL Server de destino.</li>
<li>Hacemos clic con el botón secundario del mouse en el nodo <strong>Bases de datos</strong>, elijimos <strong>Tareas</strong> y, a continuación, hacemos clic en <strong>Adjuntar</strong>.<img style="display: block; margin-left: auto; margin-right: auto;" alt="" src="http://avanet.org/Data/Sites/1/sharepoint/spsdb4.png" height="190" width="245" /></li>
<li>En el cuadro de diálogo <strong>Adjuntar base de datos</strong>, vamos a la ubicación a la que transfirió los archivos .mdf  y .ldf, seleccionamos el archivo .mdf correspondiente a la base de datos que deseamos adjuntar y, a continuación, hacemos clic en <strong>Aceptar</strong>.<img style="display: block; margin-left: auto; margin-right: auto;" alt="" src="http://avanet.org/Data/Sites/1/sharepoint/spsdb5.png" height="305" width="550" /></li>
<li>Repetimos el procedimiento para cada base de datos del servicio de búsqueda. </li>
<li>Activamos nuevamete los servicios de SharePoint que bajamos en la primera parte del post.</li>
</ol>
<p>Eso es todo!</p>
<p>Referencia: <a title="MSDN" href="http://technet.microsoft.com/en-us/library/ff851878.aspx">http://technet.microsoft.com/en-us/library/ff851878.aspx</a> </p><br /><a href='http://avanet.org/cambiar-de-partición-la-base-de-datos-del-servicio-de-búsqueda.aspx'>khriztianmoreno</a>&nbsp;&nbsp;<a href='http://avanet.org/cambiar-de-partición-la-base-de-datos-del-servicio-de-búsqueda.aspx'>...</a><a class='tweetthislink' title='Tweet This' href='http://twitter.com/home?status=Cambiar+de+partici%c3%b3n+la+base+de+datos+del+servicio+...+http%3a%2f%2favanet.org%2fcambiar-de-partici%c3%b3n-la-base-de-datos-del-servicio-de-b%c3%basqueda.aspx'><img src='http://avanet.org/Data/SiteImages/tweetthis3.png' alt='Tweet This' /></a><div class='fblikebutton'><iframe src='http://www.facebook.com/plugins/like.php?href=http%3a%2f%2favanet.org%2fcambiar-de-partici%c3%b3n-la-base-de-datos-del-servicio-de-b%c3%basqueda.aspx&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;height=35&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden;width:450px; height:35px;'></iframe></div>]]></description>
      <link>http://avanet.org/cambiar-de-partición-la-base-de-datos-del-servicio-de-búsqueda.aspx</link>
      <author>khriztianmoreno</author>
      <pubDate>Thu, 07 Mar 2013 00:28:00 GMT</pubDate>
    </item>
    <item>
      <title>Evento Virtual Gratuito - Avanet Ecuador</title>
      <description><![CDATA[La comunidad de Avanet bajo el mensaje “Hemos estado aprendiendo cosas que queremos compartir contigo”
Tiene el gusto de invitarte a su ciclo de conferencias online GRATIS que se darán en 2 sesiones a impartirce el Sábado 2 y Domingo 3 de... <a href='http://avanet.org/evento-virtual-gratuito-avanet-ecuador.aspx'>Leer más</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://avanet.org/evento-virtual-gratuito-avanet-ecuador.aspx</link>
      <author>Sorey García</author>
      <pubDate>Thu, 28 Feb 2013 14:14:00 GMT</pubDate>
    </item>
    <item>
      <title>Eliminar un Team Project en Team Foundation Service</title>
      <description><![CDATA[Hola a todos, la verdad tenia una subscripción a Team Foundation Service pero no es hasta ahora que en mi nueva empresa donde laboro que la voy a usar en pleno.
Estaba trabajando creando un nuevo proyecto, enlazándolo con VS2012 y empezando a trabajar en el mismo, por cosas del destino cambie cosas y quise borrar dicho proyecto, o sorpresa me lleve cuando vi que no había una opción para borrar dicho proyecto, ni en el VS2012 ni en la pagina de la administración.
La única opción que encontré fue por línea de comandos y esta son las instrucciones.
Abrimos la ventana de comandos de VS2012 y con esta instrucción procederemos a eliminar dicho proyecto.
tfsdeleteproject /collection:https://&lt;TuColección&gt;.visualstudio.com/DefaultCollection &lt;NombreProyectoEquipo&gt;
Después del... <a href='http://avanet.org/eliminar-un-team-project-en-team-foundation-service.aspx'>Leer más</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://avanet.org/eliminar-un-team-project-en-team-foundation-service.aspx</link>
      <author>Romny Duarte</author>
      <pubDate>Mon, 25 Feb 2013 12:35:00 GMT</pubDate>
    </item>
    <item>
      <title>Netfilter/Iptables (Firewall en CentOS)</title>
      <description><![CDATA[Que es un Firewall?

 Un firewall también es conocido como muro de fuego, este funciona entre las redes conectadas permitiendo o denegando las comunicaciones entre dichas redes. También un firewall es considerado un filtro que controla el... <a href='http://www.avanet.org/netfilteriptables-firewall-en-centos.aspx'>Leer Mas</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://www.avanet.org/netfilteriptables-firewall-en-centos.aspx</link>
      <author>Engel aus Metall</author>
      <pubDate>Tue, 19 Feb 2013 05:44:00 GMT</pubDate>
    </item>
    <item>
      <title>Borrar registro e instalaciones de Wine (OS Ubuntu)</title>
      <description><![CDATA[Este post esta dirigido para lo usuarios de ubuntu que usan el paquete WINE para instalar programas de windows o suelen usarlo para correr juegos que son de la plataformas de windows. Y por algun motivo desean borrar los registro de instalacion del... <a href='http://www.avanet.org/borrar-registro-e-instalaciones-de-wine-os-ubuntu.aspx'>Leer Mas</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://www.avanet.org/borrar-registro-e-instalaciones-de-wine-os-ubuntu.aspx</link>
      <author>Engel aus Metall</author>
      <pubDate>Tue, 19 Feb 2013 05:19:00 GMT</pubDate>
    </item>
    <item>
      <title>Error al instalar MySql desde WebMatrix</title>
      <description><![CDATA[Hola a todos. Comenzando año, con nuevo trabajo y nuevos post.
En  mi nuevo trabajo tengo que trabajar con todo, tecnologías OpenSource con tecnologías Microsoft. Así que bueno obviamente hay que preparar el entorno de trabajo. Me dispuse a instalar todo y que mejor forma que desde WebMatrix hacerlo.
Para esto decidí crear un sitio a partir de una plantilla y escogí WordPress para esto.

Después de un rato que WebMatrix se pusiera a descargar e instalar MySql, me doy con la sorpresa que... <a href='http://avanet.org/error-al-instalar-mysql-desde-webmatrix.aspx'>Leer más</a><div class='excerptspacer'>&nbsp;</div>]]></description>
      <link>http://avanet.org/error-al-instalar-mysql-desde-webmatrix.aspx</link>
      <author>Romny Duarte</author>
      <pubDate>Mon, 11 Feb 2013 13:39:00 GMT</pubDate>
    </item>
    <item>
      <title>Los nuevos actores de la ingeniería de software</title>
      <description><![CDATA[<p>Por estos días se están publicando las memorias oficiales de <a href="http://www.col30.co/">Colombia 3.0</a> en el <a href="http://www.youtube.com/user/minticolombia/">canal de you tube de MinTIC</a>, entre ellas mi conferencia sobre <b>los nuevos actores de la industria del software</b>, punto de vista que amplié alguna vez en la revista <a href="http://www.slideshare.net/soreygarcia/0-hackers-developers-magazine">HDMagazine</a> con mi artículo sobre <a href="http://www.slideshare.net/soreygarcia/0-hackers-developers-magazine">la crisis del software.</a><br /> <br /> Espero lo disfruten, y debatan si lo consideran o por que no que me regalen sus opiniones.</p>
<div style="text-align: center;"> </div>
<div style="text-align: center;"><iframe src="http://www.youtube.com/embed/oVGGu74shCY" width="560" height="315" frameborder="0"></iframe></div>
<p><br /> Aquí además les dejo la presentación nuevamente por si les resulta de interés</p>
<p style="text-align: center;"><iframe src="http://www.slideshare.net/slideshow/embed_code/14949875?rel=0" width="427" height="280" style="border: 1px solid #CCC; border-width: 1px 1px 0; margin-bottom: 5px;" scrolling="no" frameborder="0"></iframe></p>
<div style="margin-bottom: 5px; text-align: center;"><strong> <a title="Nuevos actores de la ingenieria de software" href="http://www.slideshare.net/soreygarcia/nuevos-actores-de-la-ingenieria-de-software" target="_blank">Nuevos actores de la ingenieria de software</a> </strong> from <strong><a href="http://www.slideshare.net/soreygarcia" target="_blank">Sorey Garcia</a></strong></div>
<p style="text-align: center;">&gt;</p><br /><a href='http://avanet.org/los-nuevos-actores-de-la-industria-del-software.aspx'>Sorey García</a>&nbsp;&nbsp;<a href='http://avanet.org/los-nuevos-actores-de-la-industria-del-software.aspx'>...</a><a class='tweetthislink' title='Tweet This' href='http://twitter.com/home?status=Los+nuevos+actores+de+la+ingenier%c3%ada+de+software+http%3a%2f%2favanet.org%2flos-nuevos-actores-de-la-industria-del-software.aspx'><img src='http://avanet.org/Data/SiteImages/tweetthis3.png' alt='Tweet This' /></a><div class='fblikebutton'><iframe src='http://www.facebook.com/plugins/like.php?href=http%3a%2f%2favanet.org%2flos-nuevos-actores-de-la-industria-del-software.aspx&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;height=35&amp;action=like&amp;colorscheme=light' scrolling='no' frameborder='0' allowTransparency='true' style='border:none; overflow:hidden;width:450px; height:35px;'></iframe></div>]]></description>
      <link>http://avanet.org/los-nuevos-actores-de-la-industria-del-software.aspx</link>
      <author>Sorey García</author>
      <pubDate>Sun, 03 Feb 2013 08:27:00 GMT</pubDate>
    </item>
  </channel>
</rss>