<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>THE .NET WAY &#187; .NET Framework</title>
	<atom:link href="http://www.thedotnetway.net/tag/net-framework/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thedotnetway.net</link>
	<description>El blog Tecnológico de Emilio Torrens y Jordi Cladera</description>
	<lastBuildDate>Thu, 29 Jul 2010 08:27:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Firmar Ensamblados y meterlos en el GAC</title>
		<link>http://www.thedotnetway.net/2010/03/26/firmar-ensamblados-y-meterlos-en-el-cag/</link>
		<comments>http://www.thedotnetway.net/2010/03/26/firmar-ensamblados-y-meterlos-en-el-cag/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 10:25:46 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Trucos]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/2010/03/26/firmar-ensamblados-y-meterlos-en-el-cag/</guid>
		<description><![CDATA[Si quieres meter las dll en el GAC para que sean compartidos por todas las aplicaciones de la maquina tienes que tener en cuenta un par de cosas: Las dll que pongas en el GAC tienen que estar firmadas, el proceso es sencillo, vas a las propiedades del proyecto y la firmas, todo visual. Todas [...]]]></description>
			<content:encoded><![CDATA[<p>Si quieres meter las dll en el <a href="http://msdn.microsoft.com/es-es/library/yf1d93sz(VS.80).aspx" target="_blank">GAC</a> para que sean compartidos por todas las aplicaciones de la maquina tienes que tener en cuenta un par de cosas:</p>
<ul>
<li>Las dll que pongas en el GAC tienen que estar firmadas, el proceso es sencillo, vas a las propiedades del proyecto y la firmas, todo visual.</li>
<li>Todas las referencias que use tu dll tienen que estar firmadas también, todas las del Framework lo están ya, así que solo te tienes que preocupar de las tuyas y de las de 3ros que estés usando.</li>
<li>Tienes que poner una versión fija a la dll (que no se autoincremente en cada compilación, eso lo haces en AssemblyInfo quitando el * en la versión) ya que las aplicaciones quedaran referenciadas a esa versión y así no necesitaras actualizar las aplicaciones cuando actualices la dll en el GAC.</li>
</ul>
<p>No es un tema complicado, el único “problema” que encontramos fue cuando generamos una dll de serializarión con los tipos con el <a href="http://msdn.microsoft.com/en-us/library/bk3w6240(VS.80).aspx" target="_blank">sgen,</a> ya que esa dll tiene que estar firmada también, para eso tienes que firmar  primero la dll sin las referencias a la dll de serializacion, después generar la dll de serializacion firmada y volver a poner las referencias, eso solo es necesaria hacerlo la primera vez, después cuando modifiquemos algún tipo y queramos actualizar la dll de serialización como están las dos firmadas no importa quitar referencias.</p>
<p>Para generar la dll de serializacion firmada el comando es este:</p>
<p>sgen.exe /assembly:&#8221;$(TargetDir)$(TargetFileName)&#8221; /compiler:&#8221;\&#8221;/keyfile:$(ProjectDir)Signature.snk&#8221;\&#8221; /force</p>
<p>Para meterlas en el GAC basta que las arrastres a la carpeta Windows/Assembly.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2010/03/26/firmar-ensamblados-y-meterlos-en-el-cag/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Capturar evento click derecho con SilverLight</title>
		<link>http://www.thedotnetway.net/2010/03/17/capturar-evento-click-derecho/</link>
		<comments>http://www.thedotnetway.net/2010/03/17/capturar-evento-click-derecho/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 15:40:31 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Trucos]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/2010/03/17/capturar-evento-click-derecho/</guid>
		<description><![CDATA[Aquí vemos como capturar el evento del botón derecho en silverlight. Este evento desde la salida de silverlight ha estado inactivo, y dicen que en la siguiente versión, silverlight 4, estará disponible (también dijeron eso en la versión 3). Cuando haces click derecho en la aplicación Silverlight te muestra un menú contextual y un dialogo [...]]]></description>
			<content:encoded><![CDATA[<p>Aquí vemos como capturar el evento del botón derecho en silverlight.</p>
<p>Este evento desde la salida de silverlight ha estado inactivo, y dicen que en la siguiente versión, silverlight 4, estará disponible (también dijeron eso en la versión 3).</p>
<p>Cuando haces click derecho en la aplicación Silverlight te muestra un menú contextual y un dialogo de configuración.</p>
<p>¿Y si quieres usar el botón derecho en tu aplicación silverlight? El proceso es muy sencillo, y aquí os detallare unos pasos que deberéis de seguir para poder utilizar dicho evento y mostrar un menú contextual propio.</p>
<p><strong>Paso 1: </strong>Tenemos que establecer el control de Silverlight para ventanas. En la pagina web del proyecto (suele ser default.aspx) que contiene el control Silverlight añadir la etiqueta<em>windowless=&#8221;true&#8221;. </em></p>
<p><strong>Paso 2: </strong>Introducimos el contextmenu donde queramos capturar el evento click derecho. Dentro del xaml creamos una nueva clase llamada ContextMenuInterceptor. En el constructor de esta clase capturamos un evento llamado &#8220;OnContextMenu&#8221; con HtmlPage.Document.AttachEvent (deberás agregar la referencia System.Window.Browser).</p>
<p>Dentro de este evento llamamos a e.PeventDefault(). Esto cancela la propagación del evento click derecho para que silverlight no lo reciba (así no mostrará su menu contextual).</p>
<p>En este punto, es cuando usted esta capturando el evento y podra mostrar o hacer cualquier cosa. En el ejemplo que pongo a continuación utilizo yo un TextBlock para mostrar cuando capturamos el click derecho.</p>
<p>Page.xml.cs</p>
<pre class="csharpcode"><span class="kwrd">using</span> System;
<span class="kwrd">using</span> System.Collections.Generic;
<span class="kwrd">using</span> System.Linq;
<span class="kwrd">using</span> System.Net;
<span class="kwrd">using</span> System.Windows;
<span class="kwrd">using</span> System.Windows.Controls;
<span class="kwrd">using</span> System.Windows.Documents;
<span class="kwrd">using</span> System.Windows.Input;
<span class="kwrd">using</span> System.Windows.Media;
<span class="kwrd">using</span> System.Windows.Media.Animation;
<span class="kwrd">using</span> System.Windows.Shapes;
<span class="kwrd">using</span> System.Windows.Browser;

<span class="kwrd">namespace</span> SilverlightApplication15
{
    <span class="kwrd">public</span> <span class="kwrd">partial</span> <span class="kwrd">class</span> Page : UserControl
    {
        ContextMenuInterceptor _cmi = <span class="kwrd">null</span>;
        <span class="kwrd">public</span> Page()
        {
            InitializeComponent();
            _cmi = <span class="kwrd">new</span> ContextMenuInterceptor(MyField);
        }
    }       

    <span class="kwrd">public</span> <span class="kwrd">class</span> ContextMenuInterceptor
    {
        TextBlock TextField;

        <span class="kwrd">public</span> ContextMenuInterceptor(TextBlock textField)
        {
            TextField = textField;
            HtmlPage.Document.AttachEvent(<span class="str">"oncontextmenu"</span>, <span class="kwrd">this</span>.OnContextMenu);
        }

        <span class="kwrd">private</span> <span class="kwrd">void</span> OnContextMenu(<span class="kwrd">object</span> sender, HtmlEventArgs e)
        {
            TextField.Text = <span class="str">"Right Clicked Blocked at "</span>+e.OffsetX+<span class="str">","</span>+e.OffsetY;
            e.PreventDefault();
        }
    }
}<!-- .csharpcode, .csharpcode pre { 	font-size: small; 	color: black; 	font-family: consolas, "Courier New", courier, monospace; 	background-color: #ffffff; 	/*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt  { 	background-color: #f4f4f4; 	width: 100%; 	margin: 0em; } .csharpcode .lnum { color: #606060; } --></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2010/03/17/capturar-evento-click-derecho/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dependency Injection con Microsoft.Practices.Unity</title>
		<link>http://www.thedotnetway.net/2010/03/11/dependency-injection-con-microsoft-practices-unity/</link>
		<comments>http://www.thedotnetway.net/2010/03/11/dependency-injection-con-microsoft-practices-unity/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 11:43:00 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Trucos]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/2010/03/11/dependency-injection-con-microsoft-practices-unity/</guid>
		<description><![CDATA[Microsoft.Practices.Unity&#160; nos permite mapear una Clase a un Interface a través de una configuración en el .config de la aplicación, de esta manera podemos cambiar el comportamiento o el escenario en el que esta se ejecuta la aplicación tocando solo esa configuración. Aquí dejo un ejemplo básico: 1-Creamos el Interface public interface IMessage { string [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://unity.codeplex.com/" target="_blank">Microsoft.Practices.Unity</a>&#160; nos permite mapear una Clase a un Interface a través de una configuración en el .config de la aplicación, de esta manera podemos cambiar el comportamiento o el escenario en el que esta se ejecuta la aplicación tocando solo esa configuración.</p>
<p>Aquí dejo un ejemplo básico:</p>
<p>1-Creamos el Interface </p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">interface</span> IMessage
{
    <span class="kwrd">string</span> Get();
}</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>2-Creamos las clases que implementan el interface </p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> Message1 : IMessage
{
    <span class="kwrd">public</span> <span class="kwrd">string</span> Get()
    {
        <span class="kwrd">return</span> <span class="str">&quot;Desde Message 1&quot;</span>;
    }
}

<span class="kwrd">public</span> <span class="kwrd">class</span> Message2 : IMessage
{
    <span class="kwrd">public</span> <span class="kwrd">string</span> Get()
    {
        <span class="kwrd">return</span> <span class="str">&quot;Desde Message 2&quot;</span>;
    }
}</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>3-Creamos la clase donde usaremos el Interface, en esta debemos definir un campo del tipo del interface marcado como [Dependency] y un método de load para cargar la clase que corresponde en el interface</p>
</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> Message
{
    [Dependency]
    <span class="kwrd">public</span> IMessage IMessage { get; set; }

    <span class="kwrd">public</span> <span class="kwrd">static</span> Message Instance
    {
        get
        {
            <span class="kwrd">using</span> (IUnityContainer container = <span class="kwrd">new</span> UnityContainer())
            {
                UnityConfigurationSection ConfigurationSection =
                    (UnityConfigurationSection)
                    ConfigurationManager.GetSection(<span class="str">&quot;DITest&quot;</span>);
                ConfigurationSection.Containers.Default.Configure(container);
                Message objMessage = container.Resolve&lt;Message&gt;();
                <span class="kwrd">return</span> objMessage;
            }
        }
    }
}</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>4-Creamos el archivo de configuración donde hacemos el mapeo</p>
<pre class="csharpcode">&lt;?xml version=<span class="str">&quot;1.0&quot;</span> encoding=<span class="str">&quot;utf-8&quot;</span> ?&gt;
&lt;configuration&gt;
  &lt;configSections&gt;
  &lt;section name=<span class="str">&quot;DITest&quot;</span>
           type=<span class="str">&quot;Microsoft.Practices.Unity.Configuration.
                       UnityConfigurationSection,
                 Microsoft.Practices.Unity.Configuration&quot;</span>/&gt;
  &lt;/configSections&gt;
  &lt;DITest&gt;
    &lt;containers&gt;
      &lt;container&gt;
        &lt;types&gt;
          &lt;type type=<span class="str">&quot;DITest.IMessage,DITest&quot;</span>
                mapTo=<span class="str">&quot;DITest.Message2,DITest&quot;</span>/&gt;
        &lt;/types&gt;
      &lt;/container&gt;
    &lt;/containers&gt;
  &lt;/DITest&gt;
&lt;/configuration&gt;</pre>
<p>5-Probamos el código desde la consola y vamos cambiando el “mapTo” del archivo de configuración para ir viendo el cambio</p>
<pre class="csharpcode"><span class="kwrd">class</span> Program
{
    <span class="kwrd">static</span> <span class="kwrd">void</span> Main(<span class="kwrd">string</span>[] args)
    {
        Console.WriteLine(Message.Instance.IMessage.Get());
        Console.ReadLine();
    }
}</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2010/03/11/dependency-injection-con-microsoft-practices-unity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Publicado Sculpture 2.1 Final</title>
		<link>http://www.thedotnetway.net/2010/01/04/publicado-sculpture-2-1-final/</link>
		<comments>http://www.thedotnetway.net/2010/01/04/publicado-sculpture-2-1-final/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 16:02:14 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[RAD]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/2010/01/04/publicado-sculpture-2-1-final/</guid>
		<description><![CDATA[La gente de dawliasoft anuncio hace poco que publicaban la nueva versión de Sculpture, así que me la voy bajando a ver que tal … Nuevas funcionalidades en esta reléase Documentación completa en PDF Soporte para Oracle Herencia multinivel en NHibernate y Entity Framework Soporta los mas comunes escenarios de concurrencia (All, Dirty, y Version) [...]]]></description>
			<content:encoded><![CDATA[<p>La gente de <a href="http://www.dawliasoft.com" target="_blank">dawliasoft</a> anuncio hace poco que publicaban la nueva versión de Sculpture, así que me la voy bajando a ver que tal …</p>
<p>Nuevas funcionalidades en esta reléase</p>
<ul>
<li>Documentación completa en PDF</li>
<li>Soporte para Oracle</li>
<li>Herencia multinivel en NHibernate y Entity Framework</li>
<li>Soporta los mas comunes escenarios de concurrencia (All, Dirty, y Version) para NHibernate</li>
<li>Soporta vistas en MSSQL y MySQL</li>
</ul>
<p>Puedes descargarla desde <a href="http://www.dawliasoft.com/Downloads/tabid/61/Default.aspx" target="_blank">Aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2010/01/04/publicado-sculpture-2-1-final/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SoapHeader, SoapExtensions y Herencia</title>
		<link>http://www.thedotnetway.net/2009/12/03/soapheader-soapextensions-y-herencia/</link>
		<comments>http://www.thedotnetway.net/2009/12/03/soapheader-soapextensions-y-herencia/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 10:31:37 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Trucos]]></category>
		<category><![CDATA[WebServices]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/2009/12/03/soapheader-soapextensions-y-herencia/</guid>
		<description><![CDATA[Hace unos días Jordi escribió sobre las SoapExtensions y yo sobre las SoapHeaders, hoy le añadimos herencia y vemos como ahorrarnos bastante código y trabajo en una capa de servicios. La idea es que todos los métodos de todos los servicios web de la aplicación se autentifiquen en el mismo sitio y no tener que [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unos días Jordi escribió sobre las <a href="http://www.thedotnetway.net/2009/10/07/soap-extension/" target="_blank">SoapExtensions</a> y yo sobre las <a href="http://www.thedotnetway.net/2009/11/27/cabeceras-en-mensajes-soap/" target="_blank">SoapHeaders</a>, hoy le añadimos herencia y vemos como ahorrarnos bastante código y trabajo en una capa de servicios. <img src='http://www.thedotnetway.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>La idea es que todos los métodos de todos los servicios web de la aplicación se autentifiquen en el mismo sitio y no tener que poner el código de autentificación en cada método, además no queremos usar cookies ni mantenimiento de sesión.</p>
<p>Para esto usaremos una Cabecera Soap donde el cliente nos enviara Usuario y Contraseña, debemos crear la clase cabecera:</p>
<p><span style="color: blue">public class </span><span style="color: #2b91af">SoapHeaderCredentials </span>: <span style="color: #2b91af">SoapHeader      <br /></span>{     <br />&#160;&#160;&#160; <span style="color: blue">public string </span>Password = <span style="color: #a31515">&quot;&quot;</span>;     <br />&#160;&#160;&#160; <span style="color: blue">public string </span>UserName = <span style="color: #a31515">&quot;&quot;</span>;     <br />}</p>
<p> <a href="http://11011.net/software/vspaste"></a>
<p>Cada servicio web tiene que tener una propiedad con la Cabecera, para ahorrarnos el escribirlo cada vez, creamos una clase que herede de WebService, que contenga la propiedad y heredamos los servicios web de esa clase:</p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">MyWebService </span>: System.Web.Services.<span style="color: #2b91af">WebService
</span>{
    <span style="color: blue">public </span><span style="color: #2b91af">SoapHeaderCredentials </span>soapHeaderCredentials;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">Service </span>: <span style="color: #2b91af">MyWebService</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Después creamos una Extensión Soap de autentificación (en este caso la llamamos AuthenticationExtension), Jordi ya <a href="http://www.thedotnetway.net/2009/10/07/soap-extension/" target="_blank">explica aquí</a> como crearlas así que solo pongo el código que nos interesa, que es donde buscamos la Cabecera Soap en el Método ProcessMessage:</p>
<pre class="code"><span style="color: blue">case </span><span style="color: #2b91af">SoapMessageStage</span>.AfterDeserialize:
{
    <span style="color: blue">var </span>o = <span style="color: blue">from </span>h <span style="color: blue">in </span>message.Headers.Cast&lt;<span style="color: #2b91af">SoapHeader</span>&gt;()
            <span style="color: blue">where </span>h.GetType() == <span style="color: blue">typeof</span>(<span style="color: #2b91af">SoapHeaderCredentials</span>)
            <span style="color: blue">select </span>h ;
    <span style="color: #2b91af">SoapHeaderCredentials </span>soapHeaderCredentials =
        (<span style="color: #2b91af">SoapHeaderCredentials</span>) o.First();
    AuthenticateUser(
        <span style="color: blue">new </span><span style="color: #2b91af">Credentials</span>()
        {
          UserName = soapHeaderCredentials.UserName,
          Password = soapHeaderCredentials.Password,
        }, </pre>
<pre class="code">      );
    <span style="color: blue">break</span>;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a></p>
<p>Después solo queda añadir los dos atributos [SoapHeader(&quot;soapHeaderCredentials&quot;)]&#160; y [AuthenticationExtension()] a nuestros WebMethods, eso hará que los métodos tengan la cabecera de usuario y contraseña y que ejecuten el código de autentificación al recibir un mensaje:</p>
<pre class="code">[<span style="color: #2b91af">WebMethod</span>]
[<span style="color: #2b91af">SoapHeader</span>(<span style="color: #a31515">&quot;soapHeaderCredentials&quot;</span>)]
[<span style="color: #2b91af">AuthenticationExtension</span>()]
<span style="color: blue">public string </span>HelloWorld()
{
    <span style="color: blue">return </span><span style="color: #a31515">&quot;Hello World&quot;</span>;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Y listo <img src='http://www.thedotnetway.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2009/12/03/soapheader-soapextensions-y-herencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Serializar y Deserializar nuestras clases</title>
		<link>http://www.thedotnetway.net/2009/11/30/serializar-y-deserializar-nuestras-clases/</link>
		<comments>http://www.thedotnetway.net/2009/11/30/serializar-y-deserializar-nuestras-clases/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 16:47:01 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Trucos]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/2009/11/30/serializar-y-deserializar-nuestras-clases/</guid>
		<description><![CDATA[Es sencillo obtener una representación XML de nuestras clases con el método ToString, solo hemos de sobrescribirlo por este: public override string ToString() { XmlSerializer ser = new XmlSerializer(this.GetType()); StringWriter sw = new StringWriter(); ser.Serialize(sw, this); sw.Flush(); sw.Close(); return sw.ToString(); } También podemos crearlas desde su representación XML: public static MyClass CreateFromXml(string xml) { XmlSerializer [...]]]></description>
			<content:encoded><![CDATA[<p>Es sencillo obtener una representación XML de nuestras clases con el método ToString, solo hemos de sobrescribirlo por este:</p>
<pre class="code"><span style="color: blue">public override string </span>ToString()
{
    <span style="color: #2b91af">XmlSerializer </span>ser = <span style="color: blue">new </span><span style="color: #2b91af">XmlSerializer</span>(<span style="color: blue">this</span>.GetType());
    <span style="color: #2b91af">StringWriter </span>sw = <span style="color: blue">new </span><span style="color: #2b91af">StringWriter</span>();

    ser.Serialize(sw, <span style="color: blue">this</span>);

    sw.Flush();
    sw.Close();
    <span style="color: blue">return </span>sw.ToString();
}</pre>
<p>También podemos crearlas desde su representación XML:</p>
<div align="left">
<pre class="code"><span style="color: blue">public static </span><span style="color: #2b91af">MyClass </span>CreateFromXml(<span style="color: blue">string </span>xml)
{
    <span style="color: #2b91af">XmlSerializer </span>ser = <span style="color: blue">new </span><span style="color: #2b91af">XmlSerializer</span>(<span style="color: blue">typeof</span>(<span style="color: #2b91af">MyClass</span>));
    <span style="color: #2b91af">StringWriter </span>sw = <span style="color: blue">new </span><span style="color: #2b91af">StringWriter</span>();

    <span style="color: blue">return </span>(<span style="color: #2b91af">MyClass</span>) ser.Deserialize(<span style="color: blue">new </span><span style="color: #2b91af">StringReader</span>(xml));
}</pre>
<p>  <a href="http://11011.net/software/vspaste"></a></div>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Todo el Código de ejemplo:</p>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">MyClass
</span>{
    <span style="color: blue">public string </span>Data1 { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }
    <span style="color: blue">public string </span>Data2 { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }

    <span style="color: blue">public static </span><span style="color: #2b91af">MyClass </span>CreateFromXml(<span style="color: blue">string </span>xml)
    {
        <span style="color: #2b91af">XmlSerializer </span>ser = <span style="color: blue">new </span><span style="color: #2b91af">XmlSerializer</span>(<span style="color: blue">typeof</span>(<span style="color: #2b91af">MyClass</span>));
        <span style="color: #2b91af">StringWriter </span>sw = <span style="color: blue">new </span><span style="color: #2b91af">StringWriter</span>();

        <span style="color: blue">return </span>(<span style="color: #2b91af">MyClass</span>) ser.Deserialize(<span style="color: blue">new </span><span style="color: #2b91af">StringReader</span>(xml));
    }

    <span style="color: blue">public override string </span>ToString()
    {
        <span style="color: #2b91af">XmlSerializer </span>ser = <span style="color: blue">new </span><span style="color: #2b91af">XmlSerializer</span>(<span style="color: blue">this</span>.GetType());
        <span style="color: #2b91af">StringWriter </span>sw = <span style="color: blue">new </span><span style="color: #2b91af">StringWriter</span>();

        ser.Serialize(sw, <span style="color: blue">this</span>);

        sw.Flush();
        sw.Close();
        <span style="color: blue">return </span>sw.ToString();
    }

    <span style="color: blue">public void </span>Test()
    {
        <span style="color: #2b91af">MyClass </span>c = <span style="color: blue">new </span><span style="color: #2b91af">MyClass</span>();
        c.Data1 = <span style="color: #a31515">&quot;Hola&quot;</span>;
        c.Data2 = <span style="color: #a31515">&quot;Como Estas&quot;</span>;

        <span style="color: blue">string </span>xMyClass = c.ToString();

        <span style="color: #2b91af">MyClass </span>copy = <span style="color: #2b91af">MyClass</span>.CreateFromXml(xMyClass);
    }
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Nos puede ser muy útil para temas de log, guardar los datos en las desconexiones, para debugear o para transportar la clases en XML entre aplicaciones.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2009/11/30/serializar-y-deserializar-nuestras-clases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cabeceras en mensajes SOAP</title>
		<link>http://www.thedotnetway.net/2009/11/27/cabeceras-en-mensajes-soap/</link>
		<comments>http://www.thedotnetway.net/2009/11/27/cabeceras-en-mensajes-soap/#comments</comments>
		<pubDate>Fri, 27 Nov 2009 12:38:14 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[WebServices]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/2009/11/27/cabeceras-en-mensajes-soap/</guid>
		<description><![CDATA[Añadir cabeceras personalizadas a los mensajes de nuestros servicios web es realmente sencillo, en esas cabeceras podemos transportar cualquier dato que nos interese tokens, usuario y contraseña, lo que sea.. Hay que hacer lo siguiente: 1- Crear la clase con los datos que herede de SoapHeader public class SoapHeaderData: SoapHeader { public string Data1; public [...]]]></description>
			<content:encoded><![CDATA[<p>Añadir cabeceras personalizadas a los mensajes de nuestros servicios web es realmente sencillo, en esas cabeceras podemos transportar cualquier dato que nos interese tokens, usuario y contraseña, lo que sea..</p>
<p>Hay que hacer lo siguiente:</p>
<p>1- Crear la clase con los datos que herede de SoapHeader</p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">SoapHeaderData</span>: <span style="color: #2b91af">SoapHeader
</span>{
    <span style="color: blue">public string </span>Data1;
    <span style="color: blue">public string </span>Data2;
    <span style="color: blue">public string </span>Data3;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a>2- Crear una propiedad en el servicio web con esa clase y la etiqueta SoapHeader con el nombre de la propiedad al método web, en esa propiedad tendremos los datos</p>
<pre class="code">[<span style="color: #2b91af">WebServiceBinding</span>(ConformsTo = <span style="color: #2b91af">WsiProfiles</span>.BasicProfile1_1)]
<span style="color: blue">public class </span><span style="color: #2b91af">Service </span>: System.Web.Services.<span style="color: #2b91af">WebService
</span>{
    <span style="color: blue">public </span><span style="color: #2b91af">SoapHeaderData </span>HeaderData;

    [<span style="color: #2b91af">WebMethod</span>]
    [<span style="color: #2b91af">SoapHeader</span>(<span style="color: #a31515">&quot;HeaderData&quot;</span>)]
    <span style="color: blue">public string </span>HelloWorld() {
        <span style="color: blue">return </span><span style="color: #a31515">&quot;Hello World &quot; </span>+ HeaderData.Data1 + <span style="color: #a31515">&quot;, &quot; </span>+
                                HeaderData.Data2 + <span style="color: #a31515">&quot;, &quot; </span>+
                                HeaderData.Data3;
    }
}</pre>
<p><a href="http://11011.net/software/vspaste"></a>Solo haciendo esto ya tenemos la cabecera en nuestra petición SOAP: </p>
<p><a href="http://www.thedotnetway.net/wp-content/uploads/2009/11/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.thedotnetway.net/wp-content/uploads/2009/11/image_thumb.png" width="474" height="238" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2009/11/27/cabeceras-en-mensajes-soap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2010 y .NET Framework 4</title>
		<link>http://www.thedotnetway.net/2009/10/30/visual-studio-2010-y-net-framework-4/</link>
		<comments>http://www.thedotnetway.net/2009/10/30/visual-studio-2010-y-net-framework-4/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 11:21:04 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/2009/10/30/visual-studio-2010-y-net-framework-4/</guid>
		<description><![CDATA[Cada vez queda menos para que tengamos disponible la nueva versión de VS, junto con .NET Framework 4.0, C# 4.0, ASP.NET 4.0 etc, así que lo mejor es irse preparando, por ese motivo la gente de Microsoft lanza los “Kits de Entrenamiento”. &#160;Aquí podéis encontrar el ultimo, de Octubre, en el encontraremos, presentaciones, demos y [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.thedotnetway.net/wp-content/uploads/2009/10/VS2010_UI.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="VS2010_UI" border="0" alt="VS2010_UI" align="left" src="http://www.thedotnetway.net/wp-content/uploads/2009/10/VS2010_UI_thumb.png" width="250" height="179" /></a> </p>
<p>Cada vez queda menos para que tengamos disponible la nueva versión de <a href="http://www.microsoft.com/spain/visualstudio/products/2010/default.mspx" target="_blank">VS</a>, junto con .NET Framework 4.0, C# 4.0, ASP.NET 4.0 etc, así que lo mejor es irse preparando, por ese motivo la gente de Microsoft lanza los “Kits de Entrenamiento”.</p>
<p>&#160;<a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=752CB725-969B-4732-A383-ED5740F02E93&amp;displaylang=en" target="_blank">Aquí podéis encontrar el ultimo</a>, de Octubre, en el encontraremos, presentaciones, demos y ejemplos de:</p>
<p>C# 4.0, Visual Basic 10, F#, Parallel Extensions, Windows Communication Foundation, Windows Workflow,Windows Presentation Foundation, ASP.NET 4, Windows 7, Entity Framework,ADO.NET Data Services, Managed Extensibility Framework y Visual Studio Team System.</p>
<p>Así que no falta de nada <img src='http://www.thedotnetway.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2009/10/30/visual-studio-2010-y-net-framework-4/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programación Paralela con Axum</title>
		<link>http://www.thedotnetway.net/2009/05/12/programacin-paralela-con-axum/</link>
		<comments>http://www.thedotnetway.net/2009/05/12/programacin-paralela-con-axum/#comments</comments>
		<pubDate>Tue, 12 May 2009 16:02:42 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Herramientas]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.thedotnetway.net/2009/05/12/programacin-paralela-con-axum/</guid>
		<description><![CDATA[Axum es un pre proyecto de Microsoft orientado a la programación paralela. En el sitio web del proyecto puedes descargarlo (necesita Visual Studio 2008), además de la documentación encontraras un video de como empezar y algo de feedback de otros usuarios. El equipo de programación tiene un blog en el que encontraras algo de información [...]]]></description>
			<content:encoded><![CDATA[<p>Axum es un pre proyecto de Microsoft orientado a la <a href="http://es.wikipedia.org/wiki/Programaci%C3%B3n_paralela" target="_blank">programación paralela</a>.</p>
<p><a href="http://msdn.microsoft.com/en-us/devlabs/dd795202.aspx" target="_blank"><img style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" title="Axum" src="http://www.thedotnetway.net/wp-content/uploads/2009/05/axum.png" border="0" alt="Axum" width="510" height="102" /></a></p>
<p>En el <a href="http://msdn.microsoft.com/en-us/devlabs/dd795202.aspx" target="_blank">sitio web del proyecto</a> puedes descargarlo (necesita Visual Studio 2008), además de la documentación encontraras un video de como empezar y algo de feedback de otros usuarios. El equipo de programación tiene un <a href="http://blogs.msdn.com/maestroteam/default.aspx" target="_blank">blog</a> en el que encontraras algo de información extra.</p>
<p>Esta bien pegarle un vistazo, pero no creo que convenga liarse mucho ya que no es seguro que llegue a ver la luz como producto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2009/05/12/programacin-paralela-con-axum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disponible c&#243;digo fuente de .Net Framework</title>
		<link>http://www.thedotnetway.net/2008/01/17/disponible-codigo-fuente-de-net-framework/</link>
		<comments>http://www.thedotnetway.net/2008/01/17/disponible-codigo-fuente-de-net-framework/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 14:49:00 +0000</pubDate>
		<dc:creator>Emilio Torrens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://thedotnetway.wordpress.com/2008/01/17/disponible-codigo-fuente-de-net-framework/</guid>
		<description><![CDATA[Ya esta disponible el código fuente del framework desde Visual Studio 2008. Las librerías disponibles de momento son: .NET Base Class Libraries (System, System.CodeDom, System.Collections, System.ComponentModel, System.Diagnostics, System.Drawing, System.Globalization, System.IO, System.Net, System.Reflection, System.Runtime, System.Security, System.Text, System.Threading, etc). ASP.NET (System.Web, System.Web.Extensions) Windows Forms (System.Windows.Forms) Windows Presentation Foundation (System.Windows) ADO.NET y XML (System.Data y System.Xml) Los pasos [...]]]></description>
			<content:encoded><![CDATA[<p>Ya esta disponible el código fuente del framework desde Visual Studio 2008. </p>
<p>Las librerías disponibles de momento son:</p>
<ul>
<li>.NET Base Class Libraries (System, System.CodeDom, System.Collections, System.ComponentModel, System.Diagnostics, System.Drawing, System.Globalization, System.IO, System.Net, System.Reflection, System.Runtime, System.Security, System.Text, System.Threading, etc). </li>
</ul>
<ul>
<li>ASP.NET (System.Web, System.Web.Extensions) </li>
</ul>
<ul>
<li>Windows Forms (System.Windows.Forms) </li>
</ul>
<ul>
<li>Windows Presentation Foundation (System.Windows) </li>
</ul>
<ul>
<li>ADO.NET y XML (System.Data y System.Xml) </li>
</ul>
<p>Los pasos necesarios para poder ver y depurar el código del framework son:</p>
<blockquote><p>1. Instalar esta <a href="https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=10443&amp;wa=wsignin1.0" target="_blank">actualización</a> (atención a los usuarios de sistemas de 64 bits, es necesario un paso extra).</p>
<p>2. Dentro de Visual Studio 2008 ir a Herramientas, Opciones, Debugging, General y desactivar la opción <em>Enable Just My Code </em>y activar <em>Enable Source Server</em></p>
<p><em><img alt="Optvs2008" src="http://www.thedotnetway.net/content/binary/optvs2008.jpg" border="0" /></em></p>
<p>3. Ir a <em>Symbols</em> y añadir esta URL: <a href="http://referencesource.microsoft.com/symbols" target="_blank">http://referencesource.microsoft.com/symbols</a> y poner un directorio cualquiera en <em>Cache symbols from symbol servers to this directory</em></p>
</blockquote>
<p>Y listo.</p>
<p>&#160;<img alt="Symbnetfr" src="http://www.thedotnetway.net/content/binary/symbnetfr.jpg" border="0" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedotnetway.net/2008/01/17/disponible-codigo-fuente-de-net-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
