<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang=""><title type="html">Francesc Jaumot</title><subtitle type="html">Blog dedicado al desarrollo en tecnologías Microsoft por un MSP</subtitle><id>http://geeks.ms/blogs/fjaumot/atom.aspx</id><link rel="alternate" type="text/html" href="http://geeks.ms/blogs/fjaumot/default.aspx" /><link rel="self" type="application/atom+xml" href="http://geeks.ms/blogs/fjaumot/atom.aspx" /><generator uri="http://communityserver.org" version="4.1.31106.3070">Community Server</generator><updated>2009-04-20T13:35:00Z</updated><entry><title>¡Domino propio!</title><link rel="alternate" type="text/html" href="/blogs/fjaumot/archive/2011/08/15/161-domino-propio.aspx" /><id>/blogs/fjaumot/archive/2011/08/15/161-domino-propio.aspx</id><published>2011-08-15T10:34:00Z</published><updated>2011-08-15T10:34:00Z</updated><content type="html">&lt;p&gt;&amp;iexcl;Muy buenas!&lt;/p&gt;
&lt;p&gt;Es lo que tiene el verano y&amp;nbsp;llevaba&amp;nbsp;tiempo con eso en mente, as&amp;iacute; pues, este a&amp;ntilde;o que estoy a tope con las comunidades y con ganas de aprender y crecer m&amp;aacute;s me he creado mi propio dominio&amp;nbsp;&lt;a href="http://www.francescjaumot.net"&gt;www.francescjaumot.net&lt;/a&gt;. Estoy en plena migraci&amp;oacute;n y&amp;nbsp;reorganizaci&amp;oacute;n&amp;nbsp;de toda la informaci&amp;oacute;n que ten&amp;iacute;a en la red, blogs antiguos, post obsoletos... as&amp;iacute; que, &amp;iexcl;estoy con todo ello!&lt;/p&gt;
&lt;p&gt;Esto no quiere decir que mi blog de geeks quede atr&amp;aacute;s pero centrar&amp;eacute; toda mi atenci&amp;oacute;n en mi dominio&amp;nbsp;ya que pretendo que sea el principal tanto en actualizaciones como mejoras.Espero que os guste y me deis todo el feedback posible.&amp;nbsp;Cualquier sugerencia siempre es bien recibida&amp;nbsp;&lt;img src="http://returngis.net/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;iexcl;Saludos!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=199450" width="1" height="1"&gt;</content><author><name>fjaumot</name><uri>http://geeks.ms/members/fjaumot/default.aspx</uri></author></entry><entry><title>[ie9] Jump Lists en la web</title><link rel="alternate" type="text/html" href="/blogs/fjaumot/archive/2010/09/18/ie9-jump-lists-en-la-web.aspx" /><id>/blogs/fjaumot/archive/2010/09/18/ie9-jump-lists-en-la-web.aspx</id><published>2010-09-18T17:45:00Z</published><updated>2010-09-18T17:45:00Z</updated><content type="html">&lt;p&gt;Hola a todos/as!! Internet Explorer 9 ya es beta y trae un monton de novedades. Una de las caracter&amp;iacute;sticas que m&amp;aacute;s me esta llamando la atenci&amp;oacute;n es el &amp;quot;&lt;b&gt;Site Pinning&lt;/b&gt;&amp;quot;. Esto nos permite a&amp;ntilde;adir un acceso directo a la p&amp;aacute;gina en la barra de tareas de la fam&amp;iacute;lia de versiones de Windows 7 y adem&amp;aacute;s &amp;quot;&lt;b&gt;Jump Lists&lt;/b&gt;&amp;quot;. Estas listas proporcionan navegaci&amp;oacute;n directamente de la p&amp;aacute;gina que estamos visitando. Sus usos no tienen l&amp;iacute;mites, lo podemos usar para que nuestro usuario acceda a los sitios m&amp;aacute;s importantes de nuestra web o tambi&amp;eacute;n lo podemos usar de forma din&amp;aacute;mica (esto en el pr&amp;oacute;ximo post) dentro de nuestras aplicaciones web realizadas en cualquier lenguaje.&lt;/p&gt;
&lt;p&gt;&amp;iquest;El c&amp;oacute;digo? Muy sencillo y entendible. Es a base de etiquetas &lt;b&gt;meta&lt;/b&gt;, Microsoft ha a&amp;ntilde;adido una nueva llamada &amp;quot;msapplication-task&amp;quot; que es la que permite realizar esto. He realizado un ejemplo simple, en una p&amp;aacute;gina HTML sin nada de especial a&amp;ntilde;adiendo esto:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;meta name=&amp;quot;application-name&amp;quot; content=&amp;quot;Francesc Jaumot - MSP&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;meta name=&amp;quot;msapplication-tooltip&amp;quot; content=&amp;quot;Francesc Jaumot - Tooltip de ejemplo&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;meta name=&amp;quot;msapplication-task&amp;quot; content=&amp;quot;name=Blog;action-uri=geeks.ms;icon-uri=/imagenes/blogger.ico&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;meta name=&amp;quot;msapplication-task&amp;quot; content=&amp;quot;name=Trabajo;action-uri=indracompany.com;icon-uri=/imagenes/work.ico&amp;quot; /&amp;gt;&lt;br /&gt; &amp;lt;meta name=&amp;quot;msapplication-task&amp;quot; content=&amp;quot;name=Contacto;action-uri=facebook.com;icon-uri=/imagenes/facebook.ico&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;/imagenes/csharp.ico&amp;quot; /&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Y luego arrastrando la pesta&amp;ntilde;a de nuestra p&amp;aacute;gina hac&amp;iacute;a la barra de tareas de Windows 7 obtenemos el siguiente resultado,&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/JumpList.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/JumpList.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;El atributo de &amp;quot;&lt;b&gt;application-name&lt;/b&gt;&amp;quot; es el nombre que queremos que aparezca en la Jump List, si no lo especificamos, nos aparecer&amp;aacute; el t&amp;iacute;tulo de la p&amp;aacute;gina. El &amp;quot;&lt;b&gt;msapplication-tooltip&lt;/b&gt;&amp;quot;, ocpional, es el texto que aprecer&amp;aacute; c&amp;uacute;ando nos situemos con el rat&amp;oacute;n encima y la p&amp;aacute;gina no este abierta. Por &amp;uacute;ltimo, &amp;quot;&lt;b&gt;msapplication-task&lt;/b&gt;&amp;quot; que a&amp;ntilde;ade los &amp;iacute;tem de men&amp;uacute; para la navegaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&amp;iquest;F&amp;aacute;cil verdad? Y, creo, que de gran utilidad.&lt;br /&gt;Un saludo!!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=182115" width="1" height="1"&gt;</content><author><name>fjaumot</name><uri>http://geeks.ms/members/fjaumot/default.aspx</uri></author></entry><entry><title>[sql] Procedimientos almacenados vía CLR</title><link rel="alternate" type="text/html" href="/blogs/fjaumot/archive/2010/09/15/Procedimientos-Almacenados-CLR.aspx" /><id>/blogs/fjaumot/archive/2010/09/15/Procedimientos-Almacenados-CLR.aspx</id><published>2010-09-15T16:22:00Z</published><updated>2010-09-15T16:22:00Z</updated><content type="html">&lt;p class="MsoNormal" style="line-height:normal;"&gt;&lt;span style="font-size:9pt;"&gt;Hola a todos/as!!!! Hoy, voy a explicar una de las tantas cosas que nos
permite hacer SQL Server.Desde la versi&amp;oacute;n de SQL Server 2005 podemos crear
procedimientos almacenados codificados en alg&amp;uacute;n lenguaje .NET. Al poder
codificar el procedimiento almacenado por medio c&amp;oacute;digo. Net nos permite tener
acceso a ficheros de una forma eficaz, realizar validaciones con expresiones
regulares, acceso a servicios web, etc &amp;hellip;.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height:normal;"&gt;&lt;span style="font-size:9pt;"&gt;Voy a realizar un ejemplo de un procedimiento almacenado en SQL Server 2008
que recibe como par&amp;aacute;metro una ruta f&amp;iacute;sica de un fichero, y este es almacenado
en una tabla. La estructura de la tabla es sencilla, tiene un identificador, el
nombre del fichero, el contenido del fichero y el tama&amp;ntilde;o del fichero.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height:normal;"&gt;&lt;span style="font-size:9pt;"&gt;En cualquiera de los IDE de Visual Studio, deberemos elegir c&amp;oacute;mo nuevo
proyecto el tipo &amp;quot;Base de datos&amp;quot; y estableceremos en el la conexi&amp;oacute;n a
la BD con la que queremos albergar el procedimiento almacenado. Para ello,
agregamos un nuevo elemento del tipo Procedimiento almacenado y le indicamos el
nombre del mismo. El c&amp;oacute;digo ser&amp;iacute;a este,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;




&lt;/p&gt;
&lt;p&gt;


&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst" style="margin:0cm 0cm 0.0001pt;text-align:left;" align="left"&gt;&lt;span style="font-size:9pt;color:blue;" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt; &lt;span style="color:blue;"&gt;partial&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;StoredProcedures&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0cm 0cm 0.0001pt;text-align:left;" align="left"&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0cm 0cm 0.0001pt;text-align:left;" align="left"&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;[Microsoft.SqlServer.Server.&lt;span style="color:#2b91af;"&gt;SqlProcedure&lt;/span&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0cm 0cm 0.0001pt;text-align:left;" align="left"&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;"&gt;public&lt;/span&gt;&lt;span style="font-size:9pt;"&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt;
InsertarFicheros()&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0cm 0cm 0.0001pt;text-align:left;" align="left"&gt;&lt;span style="font-size:9pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0cm 0cm 0.0001pt;text-align:left;" align="left"&gt;&lt;span style="font-size:9pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0cm 0cm 0.0001pt;text-align:left;" align="left"&gt;&lt;span style="font-size:9pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="margin-left:0cm;text-align:left;" align="left"&gt;&lt;span style="font-size:9pt;"&gt;};&lt;/span&gt;&lt;span style="font-size:9pt;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Una vez realizato esto, deberemos a&amp;ntilde;adir un par&amp;aacute;metro al procedimiento que va a ser la ruta del fichero. Realizamos una referencia al espacio de nombres &lt;b&gt;System.IO &lt;/b&gt;para acceder al fichero. Dentro del procedimiento, escribimos el c&amp;oacute;digo necesario para obtener el nombre del fichero, su contenido y el tama&amp;ntilde;o, y creamos un objeto SqlCommand para insertar en la tabla de la base de datos. Nos tenemos que fijar que el prcedimiento es est&amp;aacute;tico y publico, para que pueda ser llamado desde cualquier parte. Adem&amp;aacute;s al procedimiento tenemos que indicar el atributo &lt;span style="font-size:9pt;"&gt;&lt;span&gt;&amp;nbsp;
&lt;/span&gt;[Microsoft.SqlServer.Server.&lt;span style="color:#2b91af;"&gt;SqlProcedure&lt;/span&gt;].&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;"&gt;El c&amp;oacute;digo ser&amp;iacute;a este,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;


&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size:9pt;" lang="EN-US"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Microsoft.SqlServer.Server.&lt;span style="color:#2b91af;"&gt;SqlProcedure&lt;/span&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;static&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; InsertarFicheros(&lt;span style="color:blue;"&gt;string&lt;/span&gt;
ruta)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//Obtenemos
el nombre del fichero&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;
NombreFichero = &lt;span style="color:#2b91af;"&gt;Path&lt;/span&gt;.GetFileName(ruta);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//Obtenemos
el contenido del fichero&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;byte&lt;/span&gt;[]
Contenido = &lt;span style="color:#2b91af;"&gt;File&lt;/span&gt;.ReadAllBytes(ruta);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;" lang="EN-US"&gt;using&lt;/span&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt; (&lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt; cn = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
&lt;span style="color:#2b91af;"&gt;SqlConnection&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;context
connection=true&amp;quot;&lt;/span&gt;)) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; sql = &lt;span style="color:#a31515;"&gt;&amp;quot;insert
into Ficheros (Nombre, Fichero, Tama&amp;ntilde;o) VALUES (@Nombre, @Fichero,
@Tama&amp;ntilde;o)&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt; cmd = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
&lt;span style="color:#2b91af;"&gt;SqlCommand&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;cmd.Connection = cn;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;cmd.CommandType = &lt;span style="color:#2b91af;"&gt;CommandType&lt;/span&gt;.Text;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;cmd.CommandText = sql;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;SqlParameter&lt;/span&gt; p;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;p = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlParameter&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;p.ParameterName = &lt;span style="color:#a31515;"&gt;&amp;quot;@Nombre&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;p.Direction = &lt;span style="color:#2b91af;"&gt;ParameterDirection&lt;/span&gt;.Input;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;p.SqlDbType = &lt;span style="color:#2b91af;"&gt;SqlDbType&lt;/span&gt;.VarChar;&lt;/span&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;p.Value = NombreFichero;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;cmd.Parameters.Add(p);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;p = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlParameter&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;p.ParameterName = &lt;span style="color:#a31515;"&gt;&amp;quot;@Fichero&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;p.Direction = &lt;span style="color:#2b91af;"&gt;ParameterDirection&lt;/span&gt;.Input;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;p.SqlDbType = &lt;span style="color:#2b91af;"&gt;SqlDbType&lt;/span&gt;.VarBinary;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;p.Value = Contenido;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cmd.Parameters.Add(p);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;p = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;SqlParameter&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;p.ParameterName = &lt;span style="color:#a31515;"&gt;&amp;quot;@Tama&amp;ntilde;o&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;p.Direction = &lt;span style="color:#2b91af;"&gt;ParameterDirection&lt;/span&gt;.Input;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;p.SqlDbType = &lt;span style="color:#2b91af;"&gt;SqlDbType&lt;/span&gt;.Int;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;p.Value = Contenido.Length;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;cmd.Parameters.Add(p);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;cn.Open();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;"&gt;cmd.ExecuteNonQuery();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cn.Close();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;"&gt;Visto el anterior c&amp;oacute;digo, es
importante destacar varias cosas. Indicamos &lt;b&gt;&amp;ldquo;context
connection=true&amp;rdquo;&lt;/b&gt; como cadena de conexi&amp;oacute;n indicando que la base de datos a
la que queremos conectarnos es la misma en la que nos encontramos. &lt;/span&gt;&lt;span style="font-size:9pt;font-family:Symbol;"&gt;&lt;span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;"&gt;Debemos de crear un objeto command y configurarlo con la sentencia a
ejecutar&lt;/span&gt;&lt;span style="font-size:9pt;"&gt;,y crear los par&amp;aacute;metros necesarios para la sentencia. El
par&amp;aacute;metro fichero es del tipo &lt;b&gt;Varbinary&lt;/b&gt;
para almacenar los bytes del fichero.&lt;/span&gt;&lt;span style="font-size:9pt;font-family:Symbol;"&gt;&lt;span&gt; &lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;"&gt;Abrimos, ejecutamos el procedimiento y cerramos la conexi&amp;oacute;n.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;"&gt;&lt;span&gt;&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;"&gt;Ahora solamente falta, generar el proyecto e implementarlo en la base de
datos. Vamos al men&amp;uacute; Generar, y primero generamos el proyecto y a continuaci&amp;oacute;n
lo implementamos. Si vamos a la base de datos, podemos ver que se ha creado el ensamblado y el procedimiento almacendo.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/Instalado_5F00_SP_5F00_CLR.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/Instalado_5F00_SP_5F00_CLR.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;span style="font-size:9pt;"&gt;Si ejecutamos ahora, nos dar&amp;aacute; el siguiente error:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;color:red;"&gt;Mens. 6263, Nivel 16, Estado 1, L&amp;iacute;nea 1&lt;/span&gt;&lt;span style="font-size:9pt;color:red;"&gt; &lt;br /&gt;La
ejecuci&amp;oacute;n de c&amp;oacute;digo de usuario en .NET Framework est&amp;aacute; deshabilitada. Habilite
la opci&amp;oacute;n de configuraci&amp;oacute;n &amp;quot;clr enabled&amp;quot;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;"&gt;Este problema es porque no tenemos hablitiada la ejecucci&amp;oacute;n de c&amp;oacute;digo .NET (CLR). Para habilitarlo lo podemos realizar de dos formas, una en modo dise&amp;ntilde;o y otra por SQL. Lo que os guste m&amp;aacute;s, yo os explico las dos. Si lo hacemos mediante una instrucci&amp;oacute;n SQL, tan solo debemos utilizar el procedimiento almacenado &lt;b&gt;sp_configure&lt;/b&gt; de la forma siguiente:&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;color:blue;" lang="EN-US"&gt;ALTER&lt;/span&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt; &lt;span style="color:blue;"&gt;DATABASE&lt;/span&gt; &lt;span style="color:teal;"&gt;Prueba&lt;/span&gt; &lt;span style="color:blue;"&gt;SET&lt;/span&gt; &lt;span style="color:blue;"&gt;TRUSTWORTHY&lt;/span&gt; &lt;span style="color:blue;"&gt;ON&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;"&gt;Esto tambi&amp;eacute;n se puede hacer mediante vista dise&amp;ntilde;o en el mismo men&amp;uacute; que he citado anteriormente.&lt;span style="text-decoration:line-through;"&gt; Lo s&amp;eacute;, es largo&lt;/span&gt; Todav&amp;iacute;a no hemos terminado. Falta dar permisos al ensambla que hemos creado para poder tener acceso externo. Esto tambi&amp;eacute;n lo podemos hacer de dos formas; si lo hacemos por c&amp;oacute;digo, debemos ejecutar las siguientes l&amp;iacute;neas de c&amp;oacute;digo:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;


&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;color:blue;"&gt;CREATE&lt;/span&gt;&lt;span style="font-size:9pt;"&gt; &lt;span style="color:blue;"&gt;ASSEMBLY&lt;/span&gt; &lt;span style="color:teal;"&gt;SqlProcedimientos&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-size:9pt;color:blue;"&gt;FROM&lt;/span&gt;&lt;span style="font-size:9pt;"&gt; &lt;span style="color:red;"&gt;&amp;#39;D:\VuestraRutaDeEnsamblado\SqlProcedimientos.dll&amp;#39;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-size:9pt;color:blue;" lang="EN-US"&gt;WITH&lt;/span&gt;&lt;span style="font-size:9pt;" lang="EN-US"&gt; &lt;span style="color:blue;"&gt;PERMISSION_SET&lt;/span&gt; &lt;span style="color:gray;"&gt;=&lt;/span&gt; &lt;span style="color:blue;"&gt;EXTERNAL_ACCESS&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;"&gt;Y si lo hacemos por dise&amp;ntilde;o, debemos hacer click con el bot&amp;oacute;n derecho encima del ensamblado, propiedades y en el conjunto de permisos indicamos Acceso Externo o External Access (dependiendo del idioma de la base de datos).&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/Ensamblado_5F00_CONFIG.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/Ensamblado_5F00_CONFIG.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Y ahora s&amp;iacute;!! Si ejecutamos el procedimiento, nos insertar&amp;aacute; los datos del fichero en nuestra tabla!&lt;/p&gt;
&lt;p&gt;


&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;"&gt;exec&lt;/span&gt;&lt;span style="font-size:9pt;"&gt; &lt;span style="color:teal;"&gt;InsertarFicheros&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;C:\GraciasPorLeerMe.jpg&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast" style="margin-left:72pt;text-align:center;" align="center"&gt;&lt;span style="font-size:9pt;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=178294" width="1" height="1"&gt;</content><author><name>fjaumot</name><uri>http://geeks.ms/members/fjaumot/default.aspx</uri></author></entry><entry><title>[sql] Envío de mail desde SQL Server 2008</title><link rel="alternate" type="text/html" href="/blogs/fjaumot/archive/2009/10/26/sql-env-237-o-de-mail-desde-sql-server-2008.aspx" /><id>/blogs/fjaumot/archive/2009/10/26/sql-env-237-o-de-mail-desde-sql-server-2008.aspx</id><published>2009-10-25T23:55:00Z</published><updated>2009-10-25T23:55:00Z</updated><content type="html">&lt;p&gt;Hola de nuevo a todos/as!!&lt;/p&gt;
&lt;p&gt;Esta vez toca SQL Server 2008. Hace unos d&amp;iacute;as un exprofesor m&amp;iacute;o y amigo mio &lt;strong&gt;Jose Cousi&amp;ntilde;o &lt;/strong&gt;,que&amp;nbsp;podriamos decir que ha sido mi mentor en .net y al c&amp;uacute;al le debo mucho :) , me explico&amp;nbsp;c&amp;oacute;mo enviar correos des de SQL Server. El caso es que m&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;uchas veces necesitamos mandar correos cuando se realiza una operaci&amp;oacute;n en nuestra base de datos, y el env&amp;iacute;o de correo&amp;nbsp;lo realizamos desde la aplicaci&amp;oacute;n, pero debemos de saber que se puede hacer desde el mismo servidor de bases de datos. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;Para enviar los correos desde el servidor debemos de hacer varias cosas:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;1.&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;Crear un &lt;b style="mso-bidi-font-weight:normal;"&gt;Profile&lt;/b&gt; para mandar los correos (Un Profile es un perfil de base de datos)&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;2.&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;Env&amp;iacute;o del correo con el procedimiento almacenado &lt;b style="mso-bidi-font-weight:normal;"&gt;msdb.dbo.sp_send_dbmail&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Para crear el Profile hay dos formas, por dise&amp;ntilde;o o por c&amp;oacute;digo.&amp;nbsp;Nosotros&amp;nbsp;&amp;uacute;nicamente vermos c&amp;oacute;mo se hace por dise&amp;ntilde;o si a algui&amp;eacute;n le interesa por c&amp;oacute;digo que lo pida y lo env&amp;iacute;o.. A ello! los pasos a seguir ser&amp;aacute;n los siguientes:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;1.&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;En Sql Server Managment Studio, vamos al nodo &lt;b style="mso-bidi-font-weight:normal;"&gt;Administraci&amp;oacute;n&lt;/b&gt; / &lt;b style="mso-bidi-font-weight:normal;"&gt;Correo electr&amp;oacute;nico de base de datos&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/profile.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/profile.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;2. Bot&amp;oacute;n derecho envima del nodo &amp;quot;Correo electr&amp;oacute;nico de base de datos&amp;quot;, y seleccionamos &lt;strong&gt;&amp;quot;Configurar Correo Electr&amp;oacute;nico de base de datos&amp;quot;. &lt;/strong&gt;Aparece un asistente que vamos a explicar detalladamente.&amp;nbsp;En el primer forumlario pulsamos siguiente,&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/asistentea.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/asistentea.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. En el siguiente formulario, tenemos las siguientes opciones&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-SIZE:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;a.&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Instalar Correo electr&amp;oacute;nico de base de datos&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;b.&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Administrar cuentas y perfiles de Correo electr&amp;oacute;nico&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;c.&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Administrar seguridad de Perfil&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;d.&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Ver o cambiar par&amp;aacute;metros del sistema&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Seleccionamos la primera opci&amp;oacute;n para crear el &lt;strong&gt;Profile&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;4. En el siguiente formulario vamos a crear ya el &lt;strong&gt;Profile&lt;/strong&gt; y luego le a&amp;ntilde;adiremos la cuenta de correo&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/profileb.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/profileb.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;&lt;br /&gt;&lt;br /&gt;Rellenamos el nombre de Perfil y pulsamos el bot&amp;oacute;n agregar, en el cual vamos a configurar una cuenta de correo. Esta cuenta de correo puede ser cualquiera, pero generalmente cuando lo utilicemos en una empresa, utilizaremos una cuenta del servidor Exchange corporativo. &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;Para indicar la cuenta de correo, tendremos que rellenar el siguiente formulario&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/asistentec.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/asistentec.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;br /&gt;&lt;br /&gt;-&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Nombre de cuenta: Nombre de la cuenta de correo&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Descripci&amp;oacute;n: Breve descripci&amp;oacute;n del nombre de cuenta.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Servidor smtp saliente&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Direcci&amp;oacute;n de correo electr&amp;oacute;nico: direcci&amp;oacute;n de la cuenta de correo que enviar&amp;aacute; los correos, ejemplo &lt;span style="color:#0000ff;"&gt;sql@servidor.com&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Nombre para mostrar: ponemos el nombre que se quiere mostrar, por ejemplo &amp;ldquo;Correo Sql&amp;rdquo;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Nombre del servidor: Indicamos el servidor smtp que utilizaremos para enviar al correo.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;&lt;/span&gt;&lt;/span&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Autenticaci&amp;oacute;n: Muchas veces nuestro servidor smtp necesita autenticaci&amp;oacute;n para poder enviar los correos. Las posibilidades son&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Autenticaci&amp;oacute;n de Windows.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Autenticaci&amp;oacute;n b&amp;aacute;sica: Tenemos que indicar usuario y password&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Autenticaci&amp;oacute;n an&amp;oacute;nima: La cuenta de correo no necesita auteticaci&amp;oacute;n&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;font-size:9pt;mso-fareast-font-family:Calibri;mso-fareast-language:EN-US;mso-ansi-language:ES;mso-bidi-language:AR-SA;"&gt;&lt;span style="FONT-SIZE:9pt;mso-bidi-font-family:Arial;"&gt;Una vez configurado todos los valores necesarios, aceptamos y pulsamos siguiente para que se cree el &lt;b style="mso-bidi-font-weight:normal;"&gt;Profile&lt;/b&gt;. &lt;/span&gt;&lt;/span&gt;Bien, ya tenemos configurado todo para que nos funcione, ahora veremos c&amp;oacute;mo se env&amp;iacute;a el correo y ya estar&amp;aacute; listo para usar. &lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;Para enviar el correo debemos ejecutar el procedimiento alamacenado de la base de datos &lt;b style="mso-bidi-font-weight:normal;"&gt;msdb&lt;/b&gt; &amp;ldquo;&lt;b style="mso-bidi-font-weight:normal;"&gt;sp_send_dbmail&lt;/b&gt;&amp;rdquo;. Este procedimiento almacenado tiene algunos par&amp;aacute;metros importantes:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;font-size:9pt;mso-bidi-font-family:Arial;"&gt;@profile_name:&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt; nombre del Profile con el que se va a enviar el correo.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;font-size:9pt;mso-bidi-font-family:Arial;"&gt;@recipients:&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt; lista de direcciones de correo electr&amp;oacute;nico, separadas por punto y coma, a las que se va enviar el correo.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;font-size:9pt;mso-bidi-font-family:Arial;"&gt;@copy_recipients:&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt; lista de direcciones de correo electr&amp;oacute;nico, separadas por punto y coma a las que se va a mandar el correo en &amp;ldquo;con copia&amp;rdquo;.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;font-size:9pt;mso-bidi-font-family:Arial;"&gt;@subject: &lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;asunto del correo.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;font-size:9pt;mso-bidi-font-family:Arial;"&gt;@body:&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt; cuerpo del correo.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;font-size:9pt;mso-bidi-font-family:Arial;"&gt;@body_format:&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt; Indica el formato del correo. Solamente puede tener alguno de estos dos valores: TEXT O HTML.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;font-size:9pt;mso-bidi-font-family:Arial;"&gt;@importance:&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt; indica la importancia del correo. Solamente puede contener alguno de estos valores: low, normal o high.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;font-size:9pt;mso-bidi-font-family:Arial;"&gt;@sesitivity:&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt; indica la confidencialidad del correo. Solamente puede contener alguno de estos valores: normal, personal, pr&amp;iacute;vate o confidential.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;font-size:9pt;mso-bidi-font-family:Arial;"&gt;@file_attachments:&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt; Lista de nombre, separados por punto y coma de los archivos que se adjuntan al correo. Se debe de indicar las rutas absolutas.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;font-size:9pt;mso-bidi-font-family:Arial;"&gt;@query:&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt; consulta que se ejecuta para rellenar el correo.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-fareast-font-family:Arial;mso-bidi-font-family:Arial;"&gt;&lt;span style="mso-list:Ignore;"&gt;-&lt;span style="font:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:blue;font-size:9pt;mso-bidi-font-family:Arial;"&gt;@mailitem_id:&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt; identificador del correo que se ha enviado.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;Veamos un ejemplo que env&amp;iacute;a un correo en formato html.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" align="left"&gt;&lt;span lang="EN-US" style="color:blue;font-size:9pt;mso-bidi-font-family:Arial;mso-fareast-language:ES;mso-no-proof:yes;mso-ansi-language:EN-US;"&gt;EXEC&lt;/span&gt;&lt;span lang="EN-US" style="font-size:9pt;mso-bidi-font-family:Arial;mso-fareast-language:ES;mso-no-proof:yes;mso-ansi-language:EN-US;"&gt; &lt;span style="color:teal;"&gt;msdb&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;dbo&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;sp_send_dbmail&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="color:teal;font-size:9pt;mso-bidi-font-family:Arial;mso-fareast-language:ES;mso-no-proof:yes;mso-ansi-language:EN-US;"&gt;@profile_name&lt;/span&gt;&lt;span lang="EN-US" style="font-size:9pt;mso-bidi-font-family:Arial;mso-fareast-language:ES;mso-no-proof:yes;mso-ansi-language:EN-US;"&gt; &lt;span style="color:gray;"&gt;=&lt;/span&gt; &lt;span style="color:red;"&gt;&amp;#39;NombreProfile&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size:9pt;mso-bidi-font-family:Arial;mso-fareast-language:ES;mso-no-proof:yes;mso-ansi-language:EN-US;"&gt;&lt;span style="color:teal;"&gt;@recipients&lt;/span&gt; &lt;span style="color:gray;"&gt;=&lt;/span&gt; &lt;span style="color:red;"&gt;&amp;#39;contoso@contoso.com&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color:teal;font-size:9pt;mso-bidi-font-family:Arial;mso-fareast-language:ES;mso-no-proof:yes;"&gt;@body&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;mso-fareast-language:ES;mso-no-proof:yes;"&gt; &lt;span style="color:gray;"&gt;=&lt;/span&gt; &lt;span style="color:red;"&gt;&amp;#39;&amp;lt;p style=&amp;quot;color:blue&amp;quot;&amp;gt;Esto es una prueba de html&amp;lt;/p&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;mso-fareast-language:ES;mso-no-proof:yes;"&gt;&lt;span style="color:teal;"&gt;@body_format&lt;/span&gt; &lt;span style="color:gray;"&gt;=&lt;/span&gt; &lt;span style="color:red;"&gt;&amp;#39;HTML&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;mso-fareast-language:ES;mso-no-proof:yes;"&gt;&lt;span style="color:teal;"&gt;@subject&lt;/span&gt; &lt;span style="color:gray;"&gt;=&lt;/span&gt; &lt;span style="color:red;"&gt;&amp;#39;Correo de prueba desde Sql Server&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="color:teal;font-size:9pt;mso-bidi-font-family:Arial;mso-fareast-language:ES;mso-no-proof:yes;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;Para poder&amp;nbsp;ejecutar el procedimiento almacenado,&amp;nbsp;el usuario debe tener permisos en la base de datos msdb para &lt;b style="mso-bidi-font-weight:normal;"&gt;execute&lt;/b&gt;. S&lt;/span&gt;i el usuario con el que estamos ejecutando el procedimiento almacenado no tiene&lt;/span&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;&amp;nbsp;permisos sobre el procedimiento almacenado &lt;b style="mso-bidi-font-weight:normal;"&gt;sp_send_dbmail&lt;/b&gt;&amp;nbsp;dar&amp;aacute; un error. Para solucionarlo tenemos que ir a la base de datos &lt;b style="mso-bidi-font-weight:normal;"&gt;msdb&lt;/b&gt;, a su nodo &lt;b style="mso-bidi-font-weight:normal;"&gt;seguridad&lt;/b&gt;, y damos bot&amp;oacute;n derecho encima del usuario y seleccionamos propiedades. En la pantalla que aparece seleccionamos la funci&amp;oacute;n &lt;b style="mso-bidi-font-weight:normal;"&gt;DatabaseMailUserRole&lt;/b&gt;, y con eso ya podemos ejecutar el procedimiento almacenado.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-size:9pt;mso-bidi-font-family:Arial;"&gt;&amp;iexcl;Espero que os guste y poda&amp;iacute;s utilizarlo en vuestros code&amp;#39;s! :)&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=158884" width="1" height="1"&gt;</content><author><name>fjaumot</name><uri>http://geeks.ms/members/fjaumot/default.aspx</uri></author><category term="sql server" scheme="http://geeks.ms/blogs/fjaumot/archive/tags/sql+server/default.aspx" /></entry><entry><title>[.net] MTOM cómo codificación de ficheros en WCF</title><link rel="alternate" type="text/html" href="/blogs/fjaumot/archive/2009/09/15/MTOM-en-WCF.aspx" /><link rel="enclosure" type="application/octet-stream" length="60820" href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.15.55.78/MTOM.rar" /><id>/blogs/fjaumot/archive/2009/09/15/MTOM-en-WCF.aspx</id><published>2009-09-15T19:31:00Z</published><updated>2009-09-15T19:31:00Z</updated><content type="html">&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;MTOM (Mecanismo de optimizaci&amp;oacute;n de transmisi&amp;oacute;n del mensaje), como su nombre indica, es un mecanismo para transmitir datos binarios grandes con basicHttpBinding. De forma predeterminada, basicHttpBinding env&amp;iacute;a y recibe los mensajes en XML y este tipo de encoding del mensaje debe ser habilitado en la configuraci&amp;oacute;n de nuestro proyecto c&amp;oacute;mo veremos m&amp;aacute;s adelante.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;El objetivo de usar MTOM en vez de otro encoding de mensajes, no es otro que optimizar la transmisi&amp;oacute;n de grandes cargas binarias. Al contrario, esta codificaci&amp;oacute;n cu&amp;aacute;ndo se usa para peque&amp;ntilde;as cargas a&amp;ntilde;ade una sobrecarga innecesaria en nuestro mensaje por lo que debemos saber cu&amp;aacute;ndo debemos usarlo, aunque teniendo en cuenta los documentos que se usan hoy en d&amp;iacute;a y la calidad de las fotograf&amp;iacute;as seguramente lo us&amp;eacute;is la gran mayor&amp;iacute;a de las veces.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Antes de empezar os recomiendo que os baj&amp;eacute;is el c&amp;oacute;digo de ejemplo y lo vais siguiendo con lo que explicar&amp;eacute;. Como ver&amp;eacute;is dentro de la soluci&amp;oacute;n que he creado, hay dos carpetas: Cliente y Servidor. La primera de ellas tendr&amp;aacute; un proyecto WinForms que nos servir&amp;aacute; para subir/bajar archivos y la segunda el servicio WCF. Lo primero que vamos a ver es un sencillo servicio en WCF que nos permitir&amp;aacute; subir y bajar archivos de cualquier tipo. Es facil, la interface &lt;b&gt;IService.cs &lt;/b&gt;tendr&amp;aacute; dos m&amp;eacute;todos; uno para subir ficheros con el atributo&lt;b&gt; IsOneWay = true &lt;/b&gt;para indicar que este m&amp;eacute;todo no va a devolver mensaje de respuesta y otro para obtener el fichero. Adem&amp;aacute;s dos clases, &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#2b91af;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;PeticionDescarga &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;y &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#2b91af;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Fichero&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;. Esta &amp;uacute;ltima implementara la interfaz &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#2b91af;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;IDisposable &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;para asegurarnos que al terminar la transmisi&amp;oacute;n podremos vaciar el flujo de datos.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;C&amp;oacute;mo MTOM transmite el mensaje por SOAP debemos formatear las clases c&amp;oacute;mo tal, as&amp;iacute; que la clase &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#2b91af;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Fichero &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;contendr&amp;aacute; las propiedades NombreFichero y Peso con el atributo&amp;nbsp;[&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#2b91af;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;MessageHeader&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;(MustUnderstand = &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;true&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;)] que nos indica que ambas propiedades pertenecer&amp;aacute;n a la cabecera SOAP (Header)&amp;nbsp;del mensaje y nos&amp;nbsp;permite especificar si el Header&amp;nbsp;deber&amp;aacute; ser analizado y comprendido por el destinatario o no. S&amp;iacute; esta a true, al enviar los datos se espera que el receptor comprenda la cabecera y los tenga en el DataContract. La propiedad FicheroBytes tiene el atributo&amp;nbsp;[&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#2b91af;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;MessageBodyMember&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;()]&amp;nbsp;que nos indica que ser&amp;aacute; el cuerpo del mensaje.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10.5pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Ahora viene lo complicado, &amp;iquest;C&amp;oacute;mo hacemos que nuestro servicio transfiera sus datos a trav&amp;eacute;s de la codificaci&amp;oacute;n MTOM? Configurando el binding de nuestro servicio. Para ello nos situamos en el archivo Web.config y nos deber&amp;aacute; quedar, adem&amp;aacute;s de las otras etiquetas, la configuraci&amp;oacute;n del servicio as&amp;iacute;:&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10.5pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;system.serviceModel&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;bindings&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;basicHttpBinding&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;binding&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;name&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;MTOMBinding&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;maxReceivedMessageSize&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;1048576&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;messageEncoding&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Mtom&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;transferMode&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Streamed&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;binding&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;basicHttpBinding&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;bindings&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;services&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;service&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;name&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Service&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;behaviorConfiguration&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;ServiceBehavior&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;endpoint&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;address&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;binding&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;basicHttpBinding&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;bindingConfiguration&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;MTOMBinding&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;contract&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;IService&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;service&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;services&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;behaviors&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;serviceBehaviors&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;behavior&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;name&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;ServiceBehavior&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;serviceMetadata&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;httpGetEnabled&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;true&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;serviceDebug&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;includeExceptionDetailInFaults&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;true&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;behavior&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;serviceBehaviors&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;behaviors&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;system.serviceModel&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;;color:black;font-size:12pt;mso-ansi-language:EN-US;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Como ve&amp;iacute;s, le indicamos que la codificaci&amp;oacute;n del mensaje ser&amp;aacute; con MTOM y a trav&amp;eacute;s del transporte http. Las propiedades a&amp;nbsp;destacar&amp;nbsp;y de importacia s&amp;oacute;n &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;maxReceivedMessageSize &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;que nos indica el &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-bidi-font-size:11.0pt;"&gt;tama&amp;ntilde;o m&amp;aacute;ximo del mensaje total&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; expresado en bytes&amp;nbsp;y&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;transferMode &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;que lo estableceremos a &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Streamed &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;indicando as&amp;iacute; que no ser&amp;aacute; un transporte almacenado en un b&amp;uacute;fer si no que ser&amp;aacute; transmitido, es decir, solo deber&amp;aacute;n ser almacenadas las cabeceras SOAP y el cuerpo del mensaje ser&amp;aacute; transmitido c&amp;uacute;ando se haga la petici&amp;oacute;n. C&amp;oacute;mo le hemos indicado que ser&amp;aacute; transmitido ahora &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;maxBufferSize &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;deber&amp;aacute; ser menor o igual que &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;maxReceivedMessageSize&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;ya que a diferencia de este, &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;maxBufferSize&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-bidi-font-size:11.0pt;"&gt; &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;unicamente limita el&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-bidi-font-size:11.0pt;"&gt; tama&amp;ntilde;o m&amp;aacute;ximo de la cabecera&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; SOAP. Para que lo poda&amp;iacute;s entender mejor, &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;maxBufferSize &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;configura el b&amp;uacute;fer de WCF&amp;nbsp;que almacena la cabecera del mensaje mientras se procesa el mensaje&amp;nbsp;en el extremo del cliente y no la totalidad del mismo mensaje. As&amp;iacute; pues, nuestra cabecera SOAP contendr&amp;aacute; el nombre del fichero y el peso tal y c&amp;oacute;mo hemos configurado la interficie &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#2b91af;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;IService&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10.5pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;El servicio no tiene m&amp;aacute;s, lo que haremos ahora es la implementaci&amp;oacute;n de la interface y el c&amp;oacute;digo de los m&amp;eacute;todos que no explicar&amp;eacute; ya que son muy b&amp;aacute;sicos, aunque pod&amp;eacute;is preguntar si ten&amp;eacute;is cualquier duda por supuesto y adem&amp;aacute;s lo m&amp;aacute;s complejo lo he comentado. Algo simple, dentro de &lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-bidi-font-size:11.0pt;"&gt;Service.cs &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;tendremos implementados los m&amp;eacute;todos SubirFichero y DescargarFichero.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;El m&amp;eacute;todo SubirFichero, recibir&amp;aacute; una instancia de la clase &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#2b91af;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Fichero &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;con la informaci&amp;oacute;n del archivo a subir: su nombre, tama&amp;ntilde;o y el contenido en un stream de bytes. Este m&amp;eacute;todo tendr&amp;aacute; un &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#2b91af;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;FileStream &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;que va a escribir a disco en una ruta concreta&amp;nbsp;el stream de bytes recibido, o sea, el archivo. Y el m&amp;eacute;todo DescargarFichero har&amp;aacute; todo lo contrario, recibir&amp;aacute; una instancia de la clase &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#2b91af;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;PeticionDescarga&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;con el nombre del archivo a obtener y va a crear una instancia de la clase &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:#2b91af;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Fichero&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;,es decir, el nombre, su longitud y el contenido en un stream devolviendo esta instancia c&amp;oacute;mo resultado de la llamada al m&amp;eacute;todo.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10.5pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Hasta aqu&amp;iacute; todo lo que se refiere al servicio, ya lo tenemos terminado y ahora nos toca hacer la parte de cliente. WCF siempre debe de tener&amp;nbsp;almenos un&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-bidi-font-size:11.0pt;"&gt;EndPoint &lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;as&amp;iacute; que a esta aplicaci&amp;oacute;n cliente le a&amp;ntilde;adiremos una referencia a un servicio, el que hemos hecho, del que deberemos obtener la URL para saber d&amp;oacute;nde est&amp;aacute; hospedado. La podremos ver en la barra de&amp;nbsp;direcciones ejecutando el servicio independientemente. Aunque el servicio este configurado, el cliente tiene total libertad para decidir c&amp;oacute;mo actuar con el servicio c&amp;oacute;mo por ejemplo en nuestro caso le estamos indicando que &amp;uacute;nicamente (como servicio) podremos recibir 1Mb y mediante Streamed. El cliente debe responder con acuerdo a nuestras configuraciones pero por ejemplo puede hacer que el tama&amp;ntilde;o m&amp;aacute;ximo que se envi&amp;eacute; al servicio sea de 0,5Mb.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10.5pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Bien, los parametros a configurar del lado cliente van a ser el &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;maxBufferSize&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;, &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;maxReceivedMessageSize &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;y &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;transferMode&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;.&amp;nbsp;Se debe indicar que el tama&amp;ntilde;o maximo sea igual o menor que el tama&amp;ntilde;o que permite el servico (&amp;gt;= 1mb), en caso contrario el servicio lanzar&amp;aacute; una excepci&amp;oacute;n indicando que no soporta un tama&amp;ntilde;o superior. Con el &amp;uacute;ltimo par&amp;aacute;metro debemos tener cuidado, debe ser &lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:red;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;transferMode&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:blue;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;StreamedResponse&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot; porqu&amp;eacute; nuestro servicio espera recibir las cabeceras SOAP en un buffer y recibir la transmisi&amp;oacute;n del mensaje al momento del env&amp;iacute;o. De esta forma evitamos tener un buffer con miles de bytes debido al gran peso del fichero. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Comentar que las carpetas de subida y descarga se crearan dentro de los proyectos correspondientes. La de subida dentro del App_Code del servicio y la de descarga dentro del bin del cliente.&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Para obtener el c&amp;oacute;digo, que esta adjunto, debe&amp;iacute;s abrir el archivo &lt;strong&gt;MTOM.rar&lt;/strong&gt; y copiar cada una de las subcarpetas que contiene&amp;nbsp;Projects y WebSites&amp;nbsp;dentro de las carpetas de proyecto de Visual Studio 2008 y abrir la soluci&amp;oacute;n &lt;strong&gt;Ficheros.sln&lt;/strong&gt;. Est&amp;aacute; echo con el Framework 3.5 y c#, como no :)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:10pt;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Espero que no dud&amp;eacute;is en preguntar y que os guste el post! Happy code!&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=155578" width="1" height="1"&gt;</content><author><name>fjaumot</name><uri>http://geeks.ms/members/fjaumot/default.aspx</uri></author></entry><entry><title>[p&amp;p] Smart Client en nuestros desarrollos II</title><link rel="alternate" type="text/html" href="/blogs/fjaumot/archive/2009/08/04/segunda-entrega.aspx" /><id>/blogs/fjaumot/archive/2009/08/04/segunda-entrega.aspx</id><published>2009-08-04T11:03:00Z</published><updated>2009-08-04T11:03:00Z</updated><content type="html">&lt;p&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Una vez tengamos el hotfix explicado en la &lt;a href="http://geeks.ms/blogs/fjaumot/archive/2009/04/21/SCSF-en-nuestros-desarrollos.aspx" title="[p&amp;amp;p] Smart Client en nuestros desarrollos"&gt;&lt;span style="COLOR:blue;"&gt;primera entrega&lt;/span&gt;&lt;/a&gt;, seguimos con el objetivo de ver SCSF y crear una peque&amp;ntilde;a agenda de contactos, para comenzar deberemos crear un nuevo proyecto:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div style="MARGIN:0cm 0cm 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;En VS2008, vamos al men&amp;uacute; &lt;b&gt;Archivo &lt;/b&gt;y dentro de &amp;eacute;l &lt;b&gt;Nuevo &lt;/b&gt;y por &amp;uacute;ltimo &lt;b&gt;Proyecto..&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="MARGIN:0cm 0cm 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;En Nuevo proyecto, debemos situarnos en &lt;b&gt;Tipos de Proyecto&lt;/b&gt; de &lt;b&gt;Guidance Package &lt;/b&gt;y dentro &lt;b&gt;Custom&lt;/b&gt; &lt;b&gt;Smart Client Facotry Guidance Package - April 2008 [fixed for SP1]&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="MARGIN:0cm 0cm 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:Arial;mso-fareast-language:ES;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Seleccionamos &lt;b&gt;Smart Client Application (C#) &lt;/b&gt;y aceptamos&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="MARGIN:0cm 0cm 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;" class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Nos aparece un wizard, por defecto debemos des seleccionar &lt;b&gt;Create a separate module to define the layout for the shell&lt;/b&gt;&amp;nbsp;y seleccionamos &lt;b&gt;Show Documentation after recipe completes&lt;/b&gt; y hacemos click en finalizar.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE:9pt;COLOR:black;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;nbsp;Nos deber&amp;iacute;a quedar la soluci&amp;oacute;n de la siguiente forma:&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/solucionSmartClientOK.JPG"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/CreacionProyectoFixAbril.jpg"&gt;&lt;img border="0" src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/CreacionProyectoFixAbril.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/solucionSmartClient.JPG"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/solucionSmartClientOK.JPG"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Comenzaremos explicando cada uno de los proyectos, que son y que sirven. Vemos que tenemos 4 proyectos dentro de la soluci&amp;oacute;n:&lt;b&gt; Infrastructure.Interface&lt;/b&gt;, &lt;b&gt;Infrastructure.Library&lt;/b&gt;, &lt;b&gt;Infrastructure.Module&lt;/b&gt; y &lt;b&gt;Shell.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;En &lt;b&gt;Infrastructure.Interface&lt;/b&gt;, contiene los elementos que deben estar expuestos a otros m&amp;oacute;dulos de la aplicaci&amp;oacute;n. En&lt;b&gt; Infraestrucutre.Module&lt;/b&gt;, es un componente de interfaz de usuario del m&amp;oacute;dulo que act&amp;uacute;a como contenedor para la aplicaci&amp;oacute;n de los elementos que se comparten en todos los proyectos de la aplicaci&amp;oacute;n cliente. En &lt;b&gt;Infrastructure.Library &lt;/b&gt;tenemos la aplicaci&amp;oacute;n de componentes comunes utilizados por un conjunto de aplicaciones clientes inteligentes, como por ejemplo, un servicio para recuperar el perfil de un cat&amp;aacute;logo de servicios Web. Y por &amp;uacute;ltimo, tenemos el &lt;b&gt;Shell &lt;/b&gt;que es el elemento principal de la aplicaci&amp;oacute;n que se encarga de la UI y de&amp;nbsp;cargar y ejecutar la aplicaci&amp;oacute;n.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Antes de empezar con nada, os voy a explicar la distribuci&amp;oacute;n de la user interface y c&amp;oacute;mo est&amp;aacute; pensada. Si nos fijamos en el proyecto del Shell, veremos que contiene un &lt;b&gt;ShellForm.cs &lt;/b&gt;que no es nada m&amp;aacute;s que la ventana principal de la aplicaci&amp;oacute;n. Esta contiene, de arriba hacia abajo, &lt;b&gt;mainMenuStrip &lt;/b&gt;que ser&amp;aacute; el men&amp;uacute; principal de la aplicaci&amp;oacute;n, &lt;b&gt;mainToolStrip&lt;/b&gt; que ser&amp;aacute; la barra de herramientas de la aplicaci&amp;oacute;n, leftWorkspace que se usa para ubicar el acceso a todos los apartados de la aplicaci&amp;oacute;n, &lt;b&gt;rightWorkspace&lt;/b&gt; que muestra la informaci&amp;oacute;n solicitada des de cualquier acci&amp;oacute;n de los elementos citados anteriormente y por &amp;uacute;ltimo, &lt;b&gt;mainStatusStrip&lt;/b&gt; para ubicar los estados de carga de ventanas, una barra de progreso... Aunque parezca sencillo, es b&amp;aacute;sico saber ubicar cada elemento en su sitio para que nos quede una user interface m&amp;aacute;s amigable y usable para facilitar el trabajo al usuario final.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;C&amp;oacute;mo la idea de SCSF es crear la aplicaci&amp;oacute;n por m&amp;oacute;dulos, b&amp;aacute;sicamente para que equipos grandes de&amp;nbsp;desarrollo puedan trabajar de forma simult&amp;aacute;nea sobre el mismo proyecto,&amp;nbsp;lo primero que haremos ser&amp;aacute; a&amp;ntilde;adir un m&amp;oacute;dulo de negocio a nuestro proyecto, para ello a&amp;ntilde;adimos una nueva carpeta dentro de source que se llame Modulos, esto es opcional y es solamente para una mejor organizaci&amp;oacute;n de nuestro proyecto, y haremos click con el bot&amp;oacute;n derecho en la nueva carpeta y en el submenu de &lt;b&gt;Smart Client Factory&lt;/b&gt; a&amp;ntilde;adiremos &amp;quot;&lt;b&gt;Add Business Module C#&lt;/b&gt;&amp;quot; con el nombre &lt;b&gt;ModuleContactos&lt;/b&gt; desmarcando la opci&amp;oacute;n de &amp;quot;&lt;b&gt;Create an interface library for this module&lt;/b&gt;&amp;quot; quedando as&amp;iacute; la estructura del proyecto:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/Module.jpg"&gt;&lt;img border="0" src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/Module.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Es importante leer las definiciones explicadas en la primera parte para entender los diferentes conceptos que voy a explicar. Cu&amp;aacute;ndo hemos creado el modulo, adem&amp;aacute;s de una serie de carpetas que trataremos m&amp;aacute;s adelante, podremos ver que nos ha creado dos clases. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;La primera de ellas es el &lt;b&gt;Module&lt;/b&gt; que hereda siempre de &lt;b&gt;ModuleInit &lt;/b&gt;y ser&amp;aacute; el encargado de gestionar el modulo. En el m&amp;eacute;todo Load podemos ver c&amp;oacute;mo crea un WorkItem que ser&amp;aacute; el encargado de&amp;nbsp;guiar a&amp;nbsp;todo nuestro m&amp;oacute;dulo y siempre tendremos uno de diferente para cada modulo creado. Y la segunda de ellas, el &lt;b&gt;ModuleController&lt;/b&gt; que contiene los m&amp;eacute;todos necesarios para personalizar el comportamiento de nuestro modulo durante la ejecuci&amp;oacute;n, como por ejemplo, los men&amp;uacute;s.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Antes de seguir con nuestro modulo,&amp;nbsp;hay un archivo muy importante dentro del proyecto Shell a tener en cuenta, este es el &lt;b&gt;ProfileCatalog.xml &lt;/b&gt;que si lo edit&amp;aacute;is podr&amp;eacute;is ver que ha a&amp;ntilde;adido una secci&amp;oacute;n en Modules con un archivo con el nombre de nuestro modulo, as&amp;iacute; &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;ModuleInfo&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:red;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;AssemblyFile&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;=&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;SmartClientDevelopmentSolution.ModuleContactos.dll&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; /&amp;gt;. &lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;En SCSF cu&amp;aacute;ndo se ejecuta nuestra soluci&amp;oacute;n, este va a consultar a este fichero para saber que m&amp;oacute;dulos se deben inicializar que son los que van a ser usados en nuestra aplicaci&amp;oacute;n.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Seguimos con el modulo. La mayor&amp;iacute;a de aplicaciones basadas en Windows hacen uso de elementos de la interfaz de usuario com&amp;uacute;n a trav&amp;eacute;s de una aplicaci&amp;oacute;n. Aunque shell es la que realmente contiene los men&amp;uacute;s, WorkSpace, se pueden crear instancias y acceder a estas propiedades des de nuestros m&amp;oacute;dulos para adaptar la interfaz tal y como necesitemos. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Vamos a poner un men&amp;uacute; para nuestro modulo. Nos situamos en &lt;b&gt;ModuleController.cs &lt;/b&gt;en el m&amp;eacute;todo, &lt;b&gt;ExtendMenu() &lt;/b&gt;y en &amp;eacute;l, con la clase &lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;ToolStripMenuItem &lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;crearemos el elemento principal de nuestro men&amp;uacute; y los elementos hijos. Para ello, usaremos el constructor de la clase indicando el nombre del&amp;nbsp;men&amp;uacute; y opcionalmente el icono que se visualizar&amp;aacute;. CAB (Composite UI Application Block) tiene una gesti&amp;oacute;n propia para los eventos de nuestros men&amp;uacute;s. Antes de poder gestionar estos eventos, si nos ubicamos en el directorio &lt;b&gt;Constants&lt;/b&gt; de ModuleContactos en &lt;b&gt;UIExtensionSiteNames.cs&lt;/b&gt; y vemos la definici&amp;oacute;n (Ir a definici&amp;oacute;n...) de la clase que hereda,&amp;nbsp;veremos que este contiene varios ficheros con constantes que &amp;uacute;nicamente son textos, &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;const&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;string&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt; MainMenu = &lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;&amp;quot;MainMenu&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;const&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;string&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt; MainToolbar = &lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;&amp;quot;MainToolbar&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;const&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;string&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt; MainStatus = &lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;&amp;quot;MainStatus&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Esto es porqu&amp;eacute; CAB usa esas constantes para saber en qu&amp;eacute; barra de men&amp;uacute; estamos usando o queremos usar. Hay varios archivos de constantes, &lt;b&gt;UIExtensionSiteNames.cs&lt;/b&gt; contiene los elementos de la pantalla principal para que puedan ser extendidos, &lt;b&gt;CommandNames.cs&lt;/b&gt; contiene los nombres de los eventos que vamos a necesitar en nuestro m&amp;oacute;dulo, &lt;b&gt;WorkspaceNames.cs&lt;/b&gt; contiene los espacios d&amp;oacute;nde vamos a ubicar nuestras vistas y &lt;b&gt;EventTopicNames.cs&lt;/b&gt; que contiene los eventos comunes que suceden en la pantalla principal, como por ejemplo, actualizar la barra de estado. &lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Si volvemos a nuestro m&amp;eacute;todo, ExtendMenu(), a&amp;ntilde;adiremos un men&amp;uacute; principal para el m&amp;oacute;dulo y dos &amp;iacute;tems m&amp;aacute;s, nuestro c&amp;oacute;digo va a quedar as&amp;iacute;:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;ToolStripMenuItem &lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;rootMenuItem; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;ToolStripMenuItem &lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;itemGestContactos;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;ToolStripMenuItem &lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;itemBuscContactos;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:green;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;//Item principal&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&lt;br /&gt;rootMenuItem = &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;new&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;ToolStripMenuItem&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;(&lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;Contactos&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;, (&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Bitmap&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;)&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;recursos&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;.ResourceManager.GetObject(&lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;book_open&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;));&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:green;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;//Items hijos&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;itemGestContactos = &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;new&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;ToolStripMenuItem&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;(&lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;Gesti&amp;oacute;n contactos&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;,(&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Bitmap&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;)&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;recursos&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;.ResourceManager.GetObject(&lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;group&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;));&lt;br /&gt;rootMenuItem.DropDownItems.Add(itemGestContactos);&lt;br /&gt;itemBuscContactos = &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;new&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;ToolStripMenuItem&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;(&lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;Buscar&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;, (&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Bitmap&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;)&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;recursos&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;.ResourceManager.GetObject(&lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;folder_find&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;));&lt;br /&gt;rootMenuItem.DropDownItems.Add(itemBuscContactos);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Una vez tenemos el men&amp;uacute; principal y tambi&amp;eacute;n sus elementos hijos, debemos indicar a CAB d&amp;oacute;nde se va a ubicar dicho men&amp;uacute;. Tal y c&amp;oacute;mo he dicho anteriormente, siempre nos maneja un WorkItem el cual nos proporciona el objeto necesario del Shell para modificar su presentaci&amp;oacute;n.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;WorkItem.UIExtensionSites[&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;UIExtensionSiteNames&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;.MainMenu].Add(rootMenuItem); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;A trav&amp;eacute;s del WorkItem principal del m&amp;oacute;dulo accedemos a la propiedad &lt;b&gt;UIExtensionSites&lt;/b&gt; d&amp;oacute;nde le indicaremos (fijaos que lo hacemos con la constante) el men&amp;uacute; del Shell d&amp;oacute;nde se a&amp;ntilde;adir&amp;aacute; el nuevo elemento. En este caso le pasamos el rootMenuItem con dos items hijos para que nos quede un men&amp;uacute; c&amp;oacute;mo este:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/menuI.jpg"&gt;&lt;img border="0" src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/menuI.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;C&amp;oacute;mo tendremos eventos propios, lo que haremos es ubicarnos en el directorio Constants en &lt;b&gt;CommandNames.cs &lt;/b&gt;y a&amp;ntilde;adiremos dos nuevas constantes, una para gestionar el click de &amp;quot;Gesti&amp;oacute;n contactos&amp;quot; y otra para gestionar el &amp;quot;Buscar&amp;quot;:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;public const&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;string&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; gestContactos = &lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;GestionContactos&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;public&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;const&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;string&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; buscContactos = &lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;BuscarContactos&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;nbsp;&amp;iquest;Y ahora c&amp;oacute;mo&amp;nbsp;hacemos la relaci&amp;oacute;n con el item del men&amp;uacute;&amp;nbsp;y evento? Muy f&amp;aacute;cil. Seguimos dentro del m&amp;eacute;todo ExtendMenu() y a&amp;ntilde;adiremos estas dos l&amp;iacute;neas de c&amp;oacute;digo. Fijaos que ahora hemos accedido a la propiedad &lt;b&gt;Commands &lt;/b&gt;y con las constantes creadas anteriormente, le hemos indicado que hemos a&amp;ntilde;adido a esos elementos un evento. Saber que&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;Click&amp;quot; &lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;o el nombre del evento que sea es case sensitive, o sea, que &lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;&amp;quot;click&amp;quot; &lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;no sirve y da lugar a error. Os recomiendo que os cre&amp;eacute;is una clase en el directorio Constants de Interface para la gesti&amp;oacute;n correcta de los eventos ya que los usareis en toda la aplicaci&amp;oacute;n.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;WorkItem.Commands[&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;CommandNames&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;.gestContactos].AddInvoker(itemGestContactos, &lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;&amp;quot;Click&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;);&lt;br /&gt;WorkItem.Commands[&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;CommandNames&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;.buscContactos].AddInvoker(itemBuscContactos, &lt;/span&gt;&lt;span style="font-size:9pt;color:#a31515;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;&amp;quot;Click&amp;quot;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;mso-ansi-language:EN-US;" lang="EN-US"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Ahora, solo nos queda un paso. Indicar a CAB la acci&amp;oacute;n que debe realizar cu&amp;aacute;ndo el itemGestContactos invoque el evento click. Nada complejo, nos debemos crear un m&amp;eacute;todo p&amp;uacute;blico que devuelva vac&amp;iacute;o y en la firma del m&amp;eacute;todo indicar que es un manejador, por ejemplo,&amp;nbsp;para la constante gestContactos:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;[&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;CommandHandler&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;(&lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;CommandNames&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;.gestContactos)]&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;public&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; &lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;void&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; gestContactos(&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;object&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; sender, &lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;EventArgs&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size:9pt;color:green;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;//C&amp;oacute;digo de las acciones&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;Por defecto y al estar indicado en el ProfileCatalog, al cargarse nuestro m&amp;oacute;dulo, en el m&amp;eacute;todo &lt;b&gt;Run() &lt;/b&gt;se llama al m&amp;eacute;todo ExtendMenu() para que inicialice la Shell adaptada para cada uno de nuestros desarrollos. Har&amp;aacute; lo mismo para la ToolStrip que usar&amp;aacute; &lt;/span&gt;&lt;span style="font-size:9pt;color:#2b91af;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;ToolStripButton &lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;para a&amp;ntilde;adir botones en la barra de herramientas. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-language:ES;"&gt;En la entrega III seguiremos con la gesti&amp;oacute;n de los menus&amp;nbsp;y introduciremos ya&amp;nbsp;las vistas.&lt;br /&gt;&lt;strong&gt;Enjoy ;)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=147955" width="1" height="1"&gt;</content><author><name>fjaumot</name><uri>http://geeks.ms/members/fjaumot/default.aspx</uri></author></entry><entry><title>[.net] Concurrencia y procesos asíncronos</title><link rel="alternate" type="text/html" href="/blogs/fjaumot/archive/2009/05/26/net-concurrencia-y-procesos-as-237-ncronos.aspx" /><id>/blogs/fjaumot/archive/2009/05/26/net-concurrencia-y-procesos-as-237-ncronos.aspx</id><published>2009-05-26T18:48:00Z</published><updated>2009-05-26T18:48:00Z</updated><content type="html">&lt;div class="snap_preview"&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Una de las cosas que m&amp;aacute;s quebraderos de cabeza nos pueden ocasionar a todos nosotros es la concurrencia de usuarios en las aplicaciones que dise&amp;ntilde;emos. Por suerte, adem&amp;aacute;s de conocer los algoritmos m&amp;aacute;s t&amp;iacute;picos (Panader&amp;iacute;a, Dekker, Patterson, Productor-Consumidor&amp;hellip;), .NET nos facilita bastante la implementaci&amp;oacute;n de esta tarea. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Hace pocos d&amp;iacute;as en un dise&amp;ntilde;o t&amp;eacute;cnico de una aplicaci&amp;oacute;n Web, el cliente nos plantaba un proceso cr&amp;iacute;tico que tendr&amp;iacute;a la aplicaci&amp;oacute;n y que deber&amp;iacute;a ser estable pasase lo que pasase. Adem&amp;aacute;s, con una dificultad a&amp;ntilde;adida, el proceso pod&amp;iacute;a durar horas y al finalizar deber&amp;iacute;a mostrar un mensaje al usuario.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Dado esto, encontr&amp;eacute; la soluci&amp;oacute;n m&amp;aacute;s viable para el proceso: trabajar en segundo plano sincr&amp;oacute;nicamente.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Para ello, deberemos hacer uso de los delegados y de las librer&amp;iacute;as &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;System.Threading, System.Runtime.Remoting.Messaging &lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;y de&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;System.Runtime.CompilerServices.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;&amp;nbsp;&lt;span id="more-35"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Como primer paso, adem&amp;aacute;s de crear una nueva aplicaci&amp;oacute;n de consola en C#, deberemos crear una clase con un delegado:&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;;"&gt;public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ClassAsyncCallback&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;delegate&lt;/span&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;deleg&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;El segundo paso, es crear los m&amp;eacute;todos que se van a usar en el proceso s&amp;iacute;ncrono dentro de la clase; uno que llamar&amp;aacute; a la funci&amp;oacute;n que va a realizar el trabajo y otro que ser&amp;aacute; llamado al terminar el primer proceso:&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;" lang="EN-GB"&gt;[&lt;span style="color:#2b91af;"&gt;MethodImpl&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;MethodImplOptions&lt;/span&gt;.Synchronized)]&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;;"&gt;public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;bool&lt;/span&gt; ProcessCritial()&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-indent:35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:green;font-family:&amp;#39;;"&gt;//Ejecutamos el proceso&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;br /&gt;Acordaros de que un delegado es tipo que hace referencia a un m&amp;eacute;todo, es decir, el comportamiento del delegado y el m&amp;eacute;todo es exactamente el mismo y adem&amp;aacute;s, este debe tener la misma firma, valor devuelto, par&amp;aacute;metros&amp;hellip;que el m&amp;eacute;todo.&lt;/span&gt; &lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;En este m&amp;eacute;todo, aparece algo nuevo, es el atributo declarativo en la declaraci&amp;oacute;n del m&amp;eacute;todo &lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;[&lt;span style="color:#2b91af;"&gt;MethodImpl&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;MethodImplOptions&lt;/span&gt;.Synchronized)]&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;. Este atributo sirve para indicar que ese m&amp;eacute;todo estar&amp;aacute; sincronizado y que todo lo implementado en &amp;eacute;l es un proceso cr&amp;iacute;tico. Funciona del mismo modo que la clase &lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:&amp;#39;;"&gt;Monitor&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;, internamente, declara un sem&amp;aacute;foro que gestiona la entrada &amp;uacute;nica de un subproceso en &amp;eacute;l m&amp;eacute;todo y pone en espera al resto. Al finalizar, libera el m&amp;eacute;todo y deja entrar al siguiente proceso. As&amp;iacute; sucesivamente. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;El motivo de utilizar este atributo en vez la clase &lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:&amp;#39;;"&gt;Monitor &lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;es muy simple, este atributo bloquea el m&amp;eacute;todo hasta que devuelve un valor, que en mi caso es lo que necesitaba,&lt;span&gt;&amp;nbsp; &lt;/span&gt;adem&amp;aacute;s que &lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:&amp;#39;;"&gt;Monitor &lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;nos condiciona a usar adem&amp;aacute;s &lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;;"&gt;lock &lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;para el bloqueo de una variable para saber si el m&amp;eacute;todo esta libre o no y como bien pod&amp;eacute;is deducir, no es una buena practica.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Bien, ahora solo nos queda crear el m&amp;eacute;todo que mostrara el mensaje al usuario:&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;;" lang="EN-GB"&gt;public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;" lang="EN-GB"&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; ProcessFinish(&lt;span style="color:#2b91af;"&gt;IAsyncResult&lt;/span&gt; ar)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-indent:35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:green;font-family:&amp;#39;;"&gt;//Mostramos alerta al usuario&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Como veis, este proceso recibe como par&amp;aacute;metro &lt;span style="color:#2b91af;"&gt;IA&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:&amp;#39;;"&gt;syncResult &lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;que nos indica el estado de la operaci&amp;oacute;n as&amp;iacute;ncrona. &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Por ahora, nos centraremos en como llamar de forma as&amp;iacute;ncrona estos m&amp;eacute;todos des del Main de la aplicaci&amp;oacute;n:&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;;" lang="EN-GB"&gt;static&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;" lang="EN-GB"&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Main(&lt;span style="color:blue;"&gt;string&lt;/span&gt;[] args)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:&amp;#39;;" lang="EN-GB"&gt;ClassAsyncCallback&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;" lang="EN-GB"&gt; Mvar = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ClassAsyncCallback&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;" lang="EN-GB"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;deleg&lt;/span&gt; call = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;deleg&lt;/span&gt;(Mvar.ProcessCritial);&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-indent:35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:&amp;#39;;" lang="EN-GB"&gt;AsyncCallback&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;" lang="EN-GB"&gt; cb = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;AsyncCallback&lt;/span&gt;(Mvar.ProcessFinish);&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;" lang="EN-GB"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;IAsyncResult&lt;/span&gt; ar = call.BeginInvoke(cb, &lt;span style="color:blue;"&gt;null&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Bien, llegados hasta aqu&amp;iacute; ya tenemos la forma de ejecutar el proceso as&amp;iacute;ncrono preparado para la concurrencia de usuarios. Como veis, deberemos crear una nueva instancia del delegado declarado anteriormente y pasarle el nombre del m&amp;eacute;todo. Con la clase &lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:&amp;#39;;"&gt;AsyncCallback &lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;y pas&amp;aacute;ndole el nombre del m&amp;eacute;todo,&lt;span&gt;&amp;nbsp; &lt;/span&gt;ya tendremos el objeto que realizara la llamada.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Mediante &lt;span style="color:#2b91af;"&gt;IA&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:&amp;#39;;"&gt;syncResult &lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;y con BeginInvoke, ejecutaremos el proceso as&amp;iacute;ncrono. Como primer par&amp;aacute;metro le pasaremos el m&amp;eacute;todo que se debe llamar al finalizar y con el objeto delegado llamaremos el m&amp;eacute;todo que debe ser llamado asincr&amp;oacute;nicamente.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Tal y como hemos dicho, ProcessFinsih es el encargado de mostrar la alerta al usuario seg&amp;uacute;n el resultado del m&amp;eacute;todo ProcessCrtical. Para recoger el valor devuelto por este dentro de ProcessFinsih, debemos modificar el m&amp;eacute;todo de la siguiente forma:&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;;" lang="EN-GB"&gt;public&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;" lang="EN-GB"&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; ProcessFinish(&lt;span style="color:#2b91af;"&gt;IAsyncResult&lt;/span&gt; ar)&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;{&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-indent:35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:#2b91af;font-family:&amp;#39;;" lang="EN-GB"&gt;deleg&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;" lang="EN-GB"&gt; resultado = (&lt;span style="color:#2b91af;"&gt;deleg&lt;/span&gt;)((&lt;span style="color:#2b91af;"&gt;AsyncResult&lt;/span&gt;)ar).AsyncDelegate;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-indent:35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;;"&gt;if&lt;/span&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt; (resultado.EndInvoke(ar))&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-indent:35.4pt;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green;"&gt;//Mostramos alerta al usuario&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:&amp;#39;;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Con AsyncDelegate lo que hacemos es recoger el objeto delegado que se ha invocado en la llamada as&amp;iacute;ncrona y se debe convertir al tipo de delegado declarado por nosotros para poder obtener el resultado de ProcessCrtical; si es true le mostraremos la alerta al usuario.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;No es muy complicado ni nada dificultoso, hay que decir que este tipo de problemas es muy t&amp;iacute;pico en bastantes aplicaciones, sobretodo si hay procesos que requieran una gran cantidad de tiempo. Adem&amp;aacute;s de solventar un posible problema de concurrencia de usuarios, evitamos que nuestro cliente tenga que esperar &lt;strong&gt;&lt;em&gt;x&lt;/em&gt;&lt;/strong&gt; tiempo a que termine este proceso para seguir trabajando con la aplicaci&amp;oacute;n por lo que mejoramos el rendimiento de la misma.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Pues nada, a disfrutarlo y ya sab&amp;eacute;is&amp;hellip; si hay dudas, preguntar.&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;text-align:justify;" class="MsoNormal"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&amp;iexcl;&amp;iexcl;Enjoy!!&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=149382" width="1" height="1"&gt;</content><author><name>fjaumot</name><uri>http://geeks.ms/members/fjaumot/default.aspx</uri></author></entry><entry><title>[p&amp;p] Smart Client en nuestros desarrollos</title><link rel="alternate" type="text/html" href="/blogs/fjaumot/archive/2009/04/21/SCSF-en-nuestros-desarrollos.aspx" /><id>/blogs/fjaumot/archive/2009/04/21/SCSF-en-nuestros-desarrollos.aspx</id><published>2009-04-21T07:34:00Z</published><updated>2009-04-21T07:34:00Z</updated><content type="html">&lt;p&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/fjaumot/solucionSmartClient.JPG"&gt;&lt;/a&gt;&amp;iexcl;Buenos d&amp;iacute;as!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Como muchos ya sab&amp;eacute;is, &lt;strong&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Microsoft&lt;/span&gt;&lt;/strong&gt; dentro de su &lt;strong&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;MSDN &lt;/span&gt;&lt;/strong&gt;tiene un departamento de arquitectura, &lt;strong&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Microsoft Patterns&amp;nbsp;and Practices (p&amp;amp;p)&lt;/span&gt;&lt;/strong&gt;,&amp;nbsp;que ofrecen a los desarrolladores (nosotros)&amp;nbsp;buenas pr&amp;aacute;cticas para obtener una soluci&amp;oacute;n de la forma m&amp;aacute;s eficiente para nuestro d&amp;iacute;a a d&amp;iacute;a y adem&amp;aacute;s aplicando de una forma pr&amp;aacute;ctica patrones para una soluci&amp;oacute;n com&amp;uacute;n de nuestros problemas del d&amp;iacute;a a d&amp;iacute;a. En p&amp;amp;p&amp;nbsp;existen proyectos como Enterprise Library, Web Client Software Factory... y la que voy a tratar ahora, &lt;strong&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Smart Client Software Factory (SCSF)&lt;/span&gt;&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;SCSF, nos propone una alternativa a la forma de trabajo de winforms. De forma diaria, cuando se desarrolla un aplicaci&amp;oacute;n para &amp;eacute;l desktop creamos nuestra soluci&amp;oacute;n con un proyecto para la interface de usuario (UI), para nuestra l&amp;oacute;gica de negocio (BL) y para el acceso a datos (DAL). En nuestro proyecto de UI tendremos el winforms con &amp;quot;n&amp;quot; elementos en el formulario (&lt;strong&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;MeForm.cs&lt;/span&gt;&lt;/strong&gt;)&amp;nbsp;y cada uno tendr&amp;aacute; su code behind d&amp;oacute;nde implementaremos, por ejemplo, el evento button_Click de nuestro bot&amp;oacute;n del formulario que llamar&amp;aacute; a BL y esta a DAL.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Con SCSF, adem&amp;aacute;s de aplicar buenas pr&amp;aacute;cticas de una forma f&amp;aacute;cil en nuestros clientes&amp;nbsp;complejos desktop basado en &lt;strong&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Composite UI Application Block (CAB)&lt;/span&gt;&lt;/strong&gt;, obtenemos una arquitectura de nuestra aplicaci&amp;oacute;n m&amp;aacute;s usable, m&amp;aacute;s universal y con m&amp;aacute;s facilidad de mantener; podemos decir que nos ayuda en el ciclo de vida de nuestra aplicaci&amp;oacute;n. &lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;SCSF, usa y se basa principalmente en Composite UI Application Block y para ello debemos introducir una s&amp;eacute;rie de definiciones algo complejas. &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;WorkItem: &lt;/strong&gt;es un contenedor para el manejo de de objetos, que son necesarios para el cumplimiento de una tarea determinada. Tales objetos son objetos de estado, vista y sus presentadores, o comandos para lanzar una acci&amp;oacute;n. En resumen, es una clase que resume la l&amp;oacute;gica de un caso de uso que conoce todos los diferentes aspectos.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;Service: &lt;/strong&gt;Un servicio encapsula la funcionalidad que es com&amp;uacute;n para toda la aplicaci&amp;oacute;n cliente, por un m&amp;oacute;dulo espec&amp;iacute;fico, o simplemente WorkItems.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;Module: &lt;/strong&gt;M&amp;uacute;ltiples WorkItems pueden resumirse en una sola unidad de despliegue. CAB trabaja b&amp;aacute;sicamente a nivel de m&amp;oacute;dulos por lo tanto encontrar la forma de encapsular los WorkItems en los m&amp;oacute;dulos es fundamental.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;ProfileCatalog:&lt;/strong&gt; es s&amp;oacute;lo la configuraci&amp;oacute;n que especifica que los m&amp;oacute;dulos y los servicios tienen que ser cargados en la solicitud. Es un archivo XML que reside en el directorio de aplicaci&amp;oacute;n.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;ModuleLoader:&lt;/strong&gt; Se trata un servicio general CAB, que es responsable de cargar todos los m&amp;oacute;dulos descritos en un cat&amp;aacute;logo de peril.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;ModuleInt:&lt;/strong&gt; Cada m&amp;oacute;dulo tiene una clase ModuleInt que se encarga de cargar todos los servicios y WorkItems de un m&amp;oacute;dulo. Adem&amp;aacute;s tambi&amp;eacute;n&amp;nbsp;es responsable de la interfaz de usuario.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;Command: &lt;/strong&gt;es una clase de CAB que aplica el patr&amp;oacute;n &lt;a href="http://es.wikipedia.org/wiki/Command_(patr%C3%B3n_de_dise%C3%B1o)" title="Patr&amp;oacute;n command"&gt;Command&lt;/a&gt;, de forma resumida, CAB encapsula este patr&amp;oacute;n [CommandHandler] como atributo de m&amp;oacute;dulo que permite llamar a una operaci&amp;oacute;n de un objeto sin saber c&amp;uacute;al el contenido de la operaci&amp;oacute;n ni el receptor de la misma.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;Shell Application: &lt;/strong&gt;La aplicaci&amp;oacute;n de Shell es la principal que se encarga de inicializar la aplicaci&amp;oacute;n. Es la responsable de la carga din&amp;aacute;mica de m&amp;oacute;dulos y de la puesta en marcha de los servicios para la aplicaci&amp;oacute;n cliente inteligente, adem&amp;aacute;s de iniciar el formulario principal, el Shell.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;Shell: &lt;/strong&gt;Proporciona la interfaz de usuario que es com&amp;uacute;n a todos los m&amp;oacute;dulos de carga din&amp;aacute;mica. La Shell sioempre contiene el WorkItem principal, servicios, m&amp;oacute;dulos y el registro de los mismos.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;Workspace: &lt;/strong&gt;es un control que es el principal responsable para mostrar elmentos de la interfaz de usuario creados por los WorkItems. El WorkItem se a&amp;ntilde;ade al Shell y act&amp;uacute;a como contenedor de la interfaz de usuario proporcionada por WorkItems. Si queremos que un control de usuario sea un workspace, solo debemos implementar la interfaz IWorkspace.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;UIExtensionSite: &lt;/strong&gt;son marcadores de posici&amp;oacute;n especiales para la amplicaci&amp;oacute;n de partes fijas del Shell, tales como los men&amp;uacute;s, barras de herramientas... Se diferenci&amp;aacute;n de los workspace por que estos est&amp;aacute;n destinados a ser utilizados por todas las partes de la interfaz de usuario que no deben ser anuladas por los WorkItems, si no que deben ser ampliadas. Por ejemplo, podemos hacer un override del m&amp;eacute;todo principal de creaci&amp;oacute;n de men&amp;uacute;s y a parte de los base podemos a&amp;ntilde;adir otra opci&amp;oacute;n necesaria para ese WorkItem.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;EventBrokers:&lt;/strong&gt; Hay dos, &lt;strong&gt;EventPublication&lt;/strong&gt; y &lt;strong&gt;EventSubscription&lt;/strong&gt;. El primero de ellos se lleva a cabo a trav&amp;eacute;s de .NET Framework marcando los eventos con el atributo [EventPublication] y el segundo, para cualquier clase que quiera suscribirse a un evento tiene que aplicar un manejador de evento que conicida con el la firma del m&amp;eacute;todo del evento publicado y debe marcar este evento con [EventSubscription].&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;View: &lt;/strong&gt;Es un control de usuario que se encarga de presentar una parte o todo el modelo para el usuario y permite al usuario modificar su contenido a trav&amp;eacute;s de una interfaz de usuario. La vista s&amp;oacute;lo implementa la interfaz de usuario l&amp;oacute;gica y las relaciones con la l&amp;oacute;gica de negocio reca&amp;eacute;n en el presenter.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;SmartPart: &lt;/strong&gt;es un control de usuario con el atributo [SmartPart] aplicado dejando de forma opcional la implementaci&amp;oacute;n de ISmartPartInfoProvider que proporciona informaci&amp;oacute;n adicional acerca de s&amp;iacute; misma, como un t&amp;iacute;tulo o una descripci&amp;oacute;n.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;Presenter: &lt;/strong&gt;Es una clase que implementa la l&amp;oacute;gica de modificaci&amp;oacute;n de un modelo. Cada m&amp;oacute;dulo, tiene su presenter y una presenter puede usarse des de varias vistas.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;ObjectBuilder: &lt;/strong&gt;Componente fundamental de CAB, que act&amp;uacute;a como una f&amp;aacute;brica para crear objetos espec&amp;iacute;ficos que requieren un constrictor o que necesitan funciones espec&amp;iacute;ficas, como la instanciaci&amp;oacute;n autom&amp;aacute;tica y que depende de la inicializaci&amp;oacute;n de objetos al crear instancias.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;DependencyInjection:&lt;/strong&gt; Es un &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Inyecci%C3%B3n_de_dependencias" title="Dependency Injection"&gt;patr&amp;oacute;n&lt;/a&gt; que permite a una f&amp;aacute;brica crear autom&amp;aacute;ticamente o inicializar las propiedades o los miembros de objetos con objetos de su cargo. ObjectBuilder le proporciona esta funcionalidad y sus dependencias vendr&amp;aacute;n descritas en un fichero de configuraci&amp;oacute;n.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;Bussiness Module:&lt;/strong&gt; M&amp;oacute;dulos de negocio, esencialmente proyectos DLL que contienen una unidad del negocio junto con sus vistas. Cada m&amp;oacute;dulo de negocio, contiene un WorkItemController principal.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;strong&gt;Foundation Module:&lt;/strong&gt; No contiene ni vistas ni WorkItems. Se utilizan para contener servicios globales que se usan en todos los m&amp;oacute;dulos como por ejemplo Acceso a Datos, Logging, Seguridad...&lt;br /&gt;Ambos, Bussiness y Foundation Module, contienen una clase Module que hereda de ModuleInit con un m&amp;eacute;todo Load para que CAB los pueda cargar.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Principalmente, SCSF, utiliza el patr&amp;oacute;n &lt;strong&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Modelo - Vista - Presentador&lt;/span&gt;&lt;/strong&gt; (MVP) entre otros. Una &lt;strong&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;vista (View)&lt;/span&gt;&lt;/strong&gt;, gestiona los controles en el formulario y cede la responsabilidad de la l&amp;oacute;gica de la UI al presentador a trav&amp;eacute;s de los eventos del cliente. El &lt;strong&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;presentador (presenter)&lt;/span&gt;&lt;/strong&gt;, contiene la l&amp;oacute;gica capaz de responder estos eventos&amp;nbsp;y gestiona el estado de la vista a trav&amp;eacute;s del &lt;strong&gt;&lt;span style="font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;modelo&amp;nbsp; (Module) &lt;/span&gt;&lt;/strong&gt;que tiene las entidades empresariales (datos). El presentador, no hace una referencia directa de la vista, si no que hace referencia a una interfaz para la vista (IView) que se encarga de los cambios de estado.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;iquest;Y porqu&amp;eacute; trabajar de este modo? Como tenemos separado la UI de la l&amp;oacute;gica de la pantalla, podemos portar la aplicaci&amp;oacute;n a diferentes tipos de presentaci&amp;oacute;n sea WebClient, WPF Client, Silverlight Client... y adem&amp;aacute;s este modelo nos permite probar todo el funcionamiento de la pantalla sin tener UI, solo haciendo pruebas sobre el presentador. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Veremos poco a poco nuevos conceptos que iremos aprendiendo a lo largo de las diferentes entregas. Para empezar debere&amp;iacute;s instalar el &lt;a title="Instalaci&amp;oacute;n de smart client" target="_blank" href="http://smartclient.codeplex.com/Wiki/View.aspx?title=Installing%20the%20Smart%20Client%20Software%20Factory&amp;amp;referringTitle=Smart%20Client%20Software%20Factory"&gt;&lt;strong&gt;smart client software factory&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;d&amp;oacute;nde en el enlaze viene muy bien explicado. Ahora se debe actualizar,&amp;nbsp;e&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;sto se debe a que para que os compile, se deb&amp;iacute;a modificar el proyecto... Lo tene&amp;iacute;s &lt;a href="http://e.tsi.lv/~aar/Smart%20Client%20Software%20Factory%20-%20April%202008%20fixed%20for%20SP1.msi" title="SCSF con SP1"&gt;aqu&amp;iacute;&lt;/a&gt;, y aunque no es oficial, funciona perfectamente aplicando los &lt;a title="SP1 Fix Smart Client" target="_blank" href="http://smartclient.codeplex.com/Wiki/View.aspx?title=Known%20Issues:%20SC-SF%20April%202008%20with%20Visual%20Studio%202008%20and%20SP1%20Beta&amp;amp;referringTitle=SCSF%20Knowledge%20Base#RecipesNotDisplayed"&gt;cambios recomendados&lt;/a&gt; por Microsoft. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Hasta aqu&amp;iacute; &lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;la teor&amp;iacute;a. Ahora, nos toca la parte m&amp;aacute;s divertida, pero, ser&amp;aacute; en la segunda entrega d&amp;oacute;nde usemos lo anterior en un proyecto real.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:black;font-family:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Espero vuestras dudas o comentarios ;)&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=147143" width="1" height="1"&gt;</content><author><name>fjaumot</name><uri>http://geeks.ms/members/fjaumot/default.aspx</uri></author></entry><entry><title>Mi comienzo en Geeks·ms</title><link rel="alternate" type="text/html" href="/blogs/fjaumot/archive/2009/04/20/mi-comienzo-en-geeks-183-ms.aspx" /><id>/blogs/fjaumot/archive/2009/04/20/mi-comienzo-en-geeks-183-ms.aspx</id><published>2009-04-20T11:35:00Z</published><updated>2009-04-20T11:35:00Z</updated><content type="html">&lt;p&gt;Con este post doy comienzo a mi andadura por esta gran fam&amp;iacute;lia de &lt;strong&gt;Geeks&amp;middot;ms&lt;/strong&gt;. Me siento muy contento de poder contar con un blog aqu&amp;iacute; y espero poder estar a la altura porqu&amp;eacute; con el nivel de los &lt;a target="_self" href="http://geeks.ms/blogs/Bloggers.aspx" title="Bloggers Geeks&amp;middot;ms"&gt;bloggers&lt;/a&gt;&amp;nbsp;que hay aqu&amp;iacute; ser&amp;aacute; todo un reto! Gracias a &lt;strong&gt;Rodrigo Corral&lt;/strong&gt; por darme la oportunidad!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=147096" width="1" height="1"&gt;</content><author><name>fjaumot</name><uri>http://geeks.ms/members/fjaumot/default.aspx</uri></author></entry></feed>
