<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">JuanLu, ElGuerre</title><subtitle type="html" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/atom.aspx</id><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blog.avanadeadvisor.com/blogs/elguerre/atom.aspx" /><generator uri="http://communityserver.org" version="2.0.60217.2664">Community Server</generator><updated>2007-12-04T07:25:58Z</updated><entry><title>Asp.Net Projects in Visual Studio 2008 &amp;amp; IIS7</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2009/02/28/12788.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2009/02/28/12788.aspx</id><published>2009-02-28T10:55:31Z</published><updated>2009-02-28T10:55:31Z</updated><content type="html">&lt;p&gt;&lt;img src="http://img408.imageshack.us/img408/6374/iis7defaultpaget.jpg" /&gt;&amp;#160; &lt;strong&gt;AND&lt;/strong&gt;&amp;#160; &lt;img src="http://img257.imageshack.us/img257/9944/wcfhttpcustomheadersm3.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Hace unos d&amp;#237;as, tuve la necesidad de formatear (a &lt;strong&gt;Windows Vista&lt;/strong&gt;, aunque para &lt;strong&gt;Windows Server 2008&lt;/strong&gt; el caso hubiese sido el mismo) de nuevo el equipo, &amp;#161;cosa casi habitual!.&amp;#160; Despu&amp;#233;s de otros varios d&amp;#237;as trabajando con el, y tras haber instalado &lt;strong&gt;Visual Studio 2008&lt;/strong&gt; entre otras cosas, :-D, me dispon&amp;#237;a a crear un proyecto ASP.NET con objeto de realizar unas pruebas, pero de repente,&amp;#160; me encuentro con &amp;quot;esto&amp;quot;, no es que sea un error, pero si me parece curioso, o &amp;#161;al menos es la primera vez que lo veo!.&lt;/p&gt;  &lt;p&gt;Pues bien, si intentas publicar un proyecto ASP.NET en un IIS7 (local en mi caso) en donde NO se encuentre instalada la caractar&amp;#237;stica &amp;quot;IIS6 Metabase and II6 Configuration Compatibility&amp;quot; de II6, resulta imposible publicar, curioso como digo, pero, si estoy con II7,&amp;#191;no deber&amp;#237;a evitar esta compatibilidad y trabajar directamente con IIS7?, :-D&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Aqu&amp;#237; os dejo los pasos que segu&amp;#237;:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Crear un proyecto ASP.NET &lt;/li&gt;    &lt;li&gt;Publicar el proyecto en local (Publish Web Site) &lt;/li&gt;    &lt;li&gt;Elegir la publicaci&amp;#243;n en &amp;quot;Local IIS&amp;quot; &lt;/li&gt;    &lt;li&gt;Zassss.... &amp;#161;no se puede! :-$ &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;img src="http://img527.imageshack.us/img527/9189/iispublishingwebsite.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;A continuaci&amp;#243;n continu&amp;#233; con las indicaciones de &lt;a href="http://technet.microsoft.com/en-us/library/bb397374.aspx"&gt;la instalaci&amp;#243;n de esta&amp;#160; caracter&amp;#237;stica&lt;/a&gt;, marcando s&amp;#243;lo la casita &amp;quot;IIS Metabase and II6 configuration compatibility&amp;quot; y tras un reinicio y una actualizaci&amp;#243;n de &lt;strong&gt;Window Vista&lt;/strong&gt;.... &amp;#161;pues s&amp;#237;, finalmente funcion&amp;#243;!&lt;/p&gt;  &lt;p&gt;&lt;img src="http://img527.imageshack.us/img527/4739/iisfeaturesiis6v.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Tampoco soy el &amp;#250;nico con este caso o similar; &lt;a href="http://blog.dragonsoft.us/2009/01/02/visual-studio-2008-and-iis-7/"&gt;Visual Studio 2008 and IIS 7&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Para m&amp;#225;s detalle, aqu&amp;#237; os dejo un enlace bastante interesante sobre temas de deploy con II7: &lt;a href="http://learn.iis.net/page.aspx/387/using-visual-studio-2008-with-iis-70/"&gt;Using Visual Studio 2008 with IIS 7.0&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Buuueno, poco para aprender, pero algo m&amp;#225;s a tener en cuenta, ;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Saludos @home    &lt;br /&gt;Juanlu&lt;/p&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=12788" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>Exchange, directo al grano con OwaAuth</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2009/02/15/12617.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2009/02/15/12617.aspx</id><published>2009-02-15T21:25:48Z</published><updated>2009-02-15T21:25:48Z</updated><content type="html">&lt;p&gt;Durante la semana pasada he estado realizando una peque&amp;#241;a POC para el acceso a OWA (Outloook Web Access) via OwaAuth.dll y creo que, en cierto modo, estoy en la necesidad de que no pase al olvido, (si Juan, por si acaso, jejeje...).&lt;/p&gt;  &lt;p&gt;&amp;#191;Que es eso de OwaAuth.dll?&lt;/p&gt;  &lt;p&gt;Se trata de la ISAPI de Exchange para el Logon en Owa. Esta es quiz&amp;#225;s una gran desconocida para muchos y aunque pasa desapercibida puede ser que en alguna ocasi&amp;#243;n sea necesario tener que hacer uso de ella para un prop&amp;#243;sito &amp;quot;un tanto distinto&amp;quot; :-D.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Owa necesita un &amp;quot;sessionid&amp;quot; y un &amp;quot;cadata&amp;quot; para poder acceder y obtener informaci&amp;#243;n de cada una de sus p&amp;#225;ginas, pues bien, owaauth.dll es la encargada de obtener estos dos datos en una primera petici&amp;#243;n http de tipo POST, y, a partir de aqu&amp;#237;, haciendo uso de estos en las peticiones sucesivas cada p&amp;#225;gina web de Owa retornar&amp;#225; el c&amp;#243;digo HTML sin ning&amp;#250;n tipo de pre&amp;#225;mbulo.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Paso a paso&lt;/u&gt;&lt;/strong&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Invocar a owaauth.dll mediante una petici&amp;#243;n http (POST) a trav&amp;#233;s de la url: &amp;quot;&lt;a href="https://MACHINE_NAME/owa/auth/owaauth.dll"&gt;https://MACHINE_NAME/owa/auth/owaauth.dll&lt;/a&gt;&amp;quot; y con una serie de par&amp;#225;metros espec&amp;#237;ficos; destination, flags, forcedownlevel, trusted, username, password, submitCreds, isUtf8. Para la obtenci&amp;#243;n de estos par&amp;#225;metros he utilizado el siguiente m&amp;#233;todo: &lt;/li&gt; &lt;/ul&gt;  &lt;div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:c8d1301b-4b60-4b8f-a4f3-a9febb7f47bb" class="wlWriterSmartContent"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; GetPostData(Uri uri)
{        
    &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt; Setting data to create a request body.&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;    Dictionary&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; props &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; Dictionary&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;();
    props.Add(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;destination&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;,
uri.Scheme &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; Uri.SchemeDelimiter &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; HttpUtility.UrlEncode(uri.Host &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;/exchange/&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; _user &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;));
    props.Add(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;flags&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;);            &lt;/span&gt;&lt;span&gt;/*&lt;/span&gt;&lt;span&gt; 0 &lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;span&gt;
    props.Add(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;forcedownlevel&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;);
    props.Add(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;trusted&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;);          &lt;/span&gt;&lt;span&gt;/*&lt;/span&gt;&lt;span&gt; 0 &lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;span&gt;
    props.Add(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;username&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, HttpUtility.UrlEncode(String.Format(&lt;/span&gt;&lt;span&gt;@&amp;quot;&lt;/span&gt;&lt;span&gt;{0}\{1}&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, _domain, _user)));
    props.Add(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;password&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, HttpUtility.UrlEncode(_password));
    props.Add(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;submitCreds&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Log+On&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;);
    props.Add(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;isUtf8&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;);

    ASCIIEncoding encoding &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; ASCIIEncoding();

    &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; postData &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; String.Empty;
    &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; key &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; props.Keys)
    {
        &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; pValue &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;
        props.TryGetValue(key, &lt;/span&gt;&lt;span&gt;out&lt;/span&gt;&lt;span&gt; pValue);
        postData &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;.Format(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;{0}={1}&amp;amp;&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, key, pValue);
    }
    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (props.Keys.Count &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;)
        postData &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; postData.Substring(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, postData.Length &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;);

    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; postData;
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Realizada la petici&amp;#243;n HTTP seg&amp;#250;n el siguiente m&amp;#233;todo, se obtienen los datos buscados; &amp;quot;sessionid&amp;quot; y &amp;quot;cadata&amp;quot;. Estos son recuperados en el objeto &amp;quot;&lt;strong&gt;&lt;em&gt;CookieCollection&lt;/em&gt;&lt;/strong&gt;&amp;quot;. &lt;/li&gt;
&lt;/ul&gt;

&lt;div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:7626af2b-9189-4115-a0ff-a15e73cf39ea" class="wlWriterSmartContent"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; CookieCollection Authenticate(&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; url)
{
    &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; postData &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; GetPostData(&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; Uri(url));
    &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt; Get Response - Cookie        &lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;    var response &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; HttpManager.SendRequest(
        url, postData, &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;,
        RequestMethod.POST, _user, _password, _domain,
        &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;application/x-www-form-urlencoded&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;);

    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (response.Cookies.Count &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)
        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;

    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; response.Cookies;
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Ahora ya se pueden realizar &lt;strong&gt;peticiones&lt;/strong&gt; a cualquiera de las p&amp;#225;ginas de Owa, eso s&amp;#237;, de tipo GET y teniendo en cuenta que deben ir acompa&amp;#241;adas de &amp;quot;sessionid&amp;quot; y &amp;quot;cadata&amp;quot;. &lt;/li&gt;

  &lt;li&gt;La respuesta a cada petici&amp;#243;n contiene el c&amp;#243;digo HTML de cada una de las p&amp;#225;ginas solicitadas. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;El m&amp;#233;todo &amp;quot;SendRequest&amp;quot; es el encargado de realizar:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;La primera petici&amp;#243;n de tipo &amp;quot;POST&amp;quot; y contentType &amp;quot;application/x-www-form-urlencoded&amp;quot; y, &lt;/li&gt;

  &lt;li&gt;Cada petici&amp;#243;n de tipo &amp;quot;GET&amp;quot; y contentType &amp;quot;text/xml&amp;quot;. &lt;/li&gt;
&lt;/ol&gt;

&lt;div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:c9894341-9207-4755-b469-04dc8256c7f7" class="wlWriterSmartContent"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; HttpWebResponse SendRequest(&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; url, &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; postData,
    CookieCollection cookieCol, RequestMethod requestMethod,
    &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; user, &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; pwd, &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; domain, &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; contentType)
{
            ServicePointManager.ServerCertificateValidationCallback &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delegate&lt;/span&gt;&lt;span&gt;(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {
                &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;
            };

    Uri uri &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; Uri(url);

    var request &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (HttpWebRequest)HttpWebRequest.Create(uri);

    request.Method &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; requestMethod.ToString();
    request.CookieContainer &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; CookieContainer();            
    request.ContentType &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; contentType;
    request.AllowAutoRedirect &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;
    &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt; request.ServicePoint.Expect100Continue = false;&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;    request.KeepAlive &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;
    request.UserAgent &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1;&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;
                        &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;
    request.Accept &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;
                    &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;           

    &lt;/span&gt;&lt;span&gt;byte&lt;/span&gt;&lt;span&gt;[] body &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;;
    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (requestMethod &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; RequestMethod.POST)
    {
        &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt; BODY&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;        body &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; Encoding.ASCII.GetBytes(postData);
        request.ContentLength &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; body.Length;
    }

    &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt; Cookies&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (cookieCol &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;)
    {
        &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (Cookie c &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; cookieCol)
            &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt; request.Headers.Add(c.Name, c.Value);&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;            request.CookieContainer.Add(c);
    }

    &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt; Security&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;    CredentialCache credentialCache &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; System.Net.CredentialCache();
    credentialCache.Add(uri,
     &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Basic&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;/*&lt;/span&gt;&lt;span&gt; Basic &lt;/span&gt;&lt;span&gt;*/&lt;/span&gt;&lt;span&gt;
     &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; System.Net.NetworkCredential(user, pwd, domain)
     );

    request.Credentials &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; credentialCache;

    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (requestMethod &lt;/span&gt;&lt;span&gt;==&lt;/span&gt;&lt;span&gt; RequestMethod.POST)
    {
        &lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt; Response&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;        var stream &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; request.GetRequestStream();
        stream.Write(body, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, body.Length);

        stream.Close();
    }

    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; (HttpWebResponse)request.GetResponse();
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Esto ha sido todo por esta vez, espero como siempre,&amp;#160; haber dado un pasito m&amp;#225;s.&lt;/p&gt;

&lt;p&gt;Saludos @SundayHome 
  &lt;br /&gt;Juanlu&lt;/p&gt;



.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; }&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=12617" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>&amp;quot;El Truco del Almendruco&amp;quot; en la depuraci&amp;#243;n con &amp;quot;vsjitdebugger.exe&amp;quot;</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/06/28/11393.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/06/28/11393.aspx</id><published>2008-06-28T17:35:18Z</published><updated>2008-06-28T17:35:18Z</updated><content type="html">&lt;p&gt;En más de una ocasión hemos tenido que depurar de una forma un tanto compleja, o al menos no de la forma habitual, es decir ni depurando directamente desde Visual Studio ni atachando procesos, ¡seguro que si!&amp;nbsp; Más concretamente, y para el caso que nos ocupa pondré un para de ejemplos muy prácticos.&lt;/p&gt; &lt;p&gt;Durante estas semanas junto con un compañero de trabajo hemos estado realizando Setups "más o menos complejos" y, bueno, así es como uno se da cuenta de los problemas y de como surgen las necesidades, jejeje...&lt;/p&gt; &lt;p&gt;Durante estos Setups las "Customs Acctions", clases específicas para el tratamiento de acciones durante la instalación/desinstalación, surge la necesidad de depurarlas, y la pregunta es ¿cómo?. Alguno dirá; pues con MessageBox.Show(....), Console.WriteLine(...), etc.. si este mecanismo siempre funciona, pero es bastante más tedioso.&lt;/p&gt; &lt;p&gt;Pues nada de eso, a partir de ahora ¡y claro, para aquel que no conozca este truquito!, será mucho más fácil.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Pasos&lt;/u&gt;&lt;/strong&gt;:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Abre el registro de windows: regedit.exe  &lt;li&gt;Localiza la ruta "&lt;strong&gt;\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options\&lt;/strong&gt;"  &lt;li&gt;Crear una nueva key "MsiExec.exe"  &lt;li&gt;Para la Key creada, crear un nuevo valor alfanumérico/String value (REG_SZ) y asígnale el nombre "Debugger"  &lt;li&gt;Ahora, asignale el valor "vsjitdebugger.exe"&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Debería quedar así:&lt;/p&gt; &lt;p&gt;&lt;img src="http://img258.imageshack.us/img258/6590/regeditfordebuggerjq3.jpg"&gt; &lt;/p&gt; &lt;p&gt;Esta configuración hará que nuestro depurador; "Visual Studio Just-In-Time Debugger" se inicie cada vez que se ejecute el comando Msiexec.exe&lt;/p&gt; &lt;p&gt;&lt;img src="http://img241.imageshack.us/img241/5155/autodebuggerlaunchedrf3.jpg"&gt; &lt;/p&gt; &lt;p&gt;Si ahora sobre nuestro proyecto de Setup de Visual Studio, hacemos "click" con el botón derecho de ratón y pulsamos "Install",&amp;nbsp; "Tachaaaaannnnnn" ¡a depurar!, claro, previamente estableceremos los puntos de ruptura (Break Points) adecuados, :-D.&lt;/p&gt; &lt;p&gt;De la misma forma, si queremos instalar un &lt;strong&gt;Servicio Windows&lt;/strong&gt; en la consola de servicios y utilizamos "InstallUtil" repetiremos los pasos sustituyendo MsiExec.exe por "&lt;strong&gt;InstallUtil.exe&lt;/strong&gt;".&lt;/p&gt; &lt;p&gt;Una vez que hayamos finalizado la depuración, Modificar la key "MsiExed.exe" para que no se ejecute siempre, de manera que quede algo como; " _***_MsiExec.exe". De forma similar para InstallUtil.exe, por ejemplo _***_InstallUtil.exe.&lt;/p&gt; &lt;p&gt;Tambíen podríamos sustituir&amp;nbsp; nuestro depurador "vsjitdebugger.exe" por cualquier otro disponible en nuestra máquina.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Por supuesto, gracias a Javier,(si, el de las cervecitas, jejeje...) por tal descubrimiento.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;¡Buscando la fácil senda en el desarrollo! &lt;br&gt;Juanlu&lt;/p&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=11393" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>WCF &amp;amp; MSMQ</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/06/28/11392.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/06/28/11392.aspx</id><published>2008-06-28T17:34:27Z</published><updated>2008-06-28T17:34:27Z</updated><content type="html">&lt;p&gt;&lt;img src="http://img440.imageshack.us/img440/911/vs2008logohw7.jpg"&gt; &lt;/p&gt; &lt;p&gt;Hace unas semanas hablaba con un compañero acerca de como implementar una aplicación con acceso&amp;nbsp; a MSMQ y tras una larga discusión, en un intento de conseguir pensar en el mejor camino de lograrlo, pensé en hacerlo con WCF, y,&amp;nbsp; ¿Que mejor forma de probarlo que haciendo un ejemplo o proyecto? , pues, e aquí el motivo de este post.&lt;/p&gt; &lt;p&gt;Os dejo el conjunto de pasos seguidos:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Pasos:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Generar una estructura en Visual Studio similar a la siguiente:&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;img src="http://img112.imageshack.us/img112/4012/wcfmsmqinegrationsamplexo4.jpg"&gt;&lt;/p&gt;&lt;strong&gt;&lt;/strong&gt; &lt;ul&gt; &lt;li&gt;Añadir el siguiente código a la interfaz, fichero IService1.cs &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:a5f0a391-c360-4498-a52e-8a87d4358570"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;[ServiceContract]
&lt;/span&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;interface&lt;/span&gt;&lt;span&gt; IService1
{
     [OperationContract(IsOneWay &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;, Action &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)]
     &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; Send(MsmqMessage&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Persona&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; msg);
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Añadir el siguiente código al servicio Service1.cs&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:baf0ae81-086c-46ab-bc7d-08501a0f343a"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; Service1 :  IService1
{
    [OperationBehavior(TransactionScopeRequired &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;, TransactionAutoComplete &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;)]
    &lt;/span&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; Send(MsmqMessage&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Persona&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; message)
    {
        Persona msg &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (Persona)message.Body;
        Console.WriteLine(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Persona: [{0} {1}; ({2})] &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, msg.Nombre, msg.Apellidos, msg.OtraCosaMariposa);
    }
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp; En el fichero Program.cs del proyecto WcfMsmqHost añadir lo siguiente:&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:06e08440-581c-45ad-ad72-59b638e735ca"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; Main(&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;[] args)
{
    &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; msmqPath &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; ConfigurationManager.AppSettings[&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;baseAddress&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;];

    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;MessageQueue.Exists(msmqPath))
        MessageQueue.Create(msmqPath);

    Uri baseAddress &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; Uri(String.Format(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;msmq.formatname:DIRECT=OS:{0}&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, msmqPath));

    &lt;/span&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; (ServiceHost serviceHost &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; ServiceHost(&lt;/span&gt;&lt;span&gt;typeof&lt;/span&gt;&lt;span&gt;(Service1), baseAddress))
    {
        serviceHost.Authorization.PrincipalPermissionMode &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; System.ServiceModel.Description.PrincipalPermissionMode.None;
        
        serviceHost.Open();

        Console.WriteLine(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Servicio listo.&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;);
        Console.WriteLine(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Pulsa &amp;lt;INTRO&amp;gt; para finalizar.&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;);
        Console.ReadLine();
        
        serviceHost.Close();
    }
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El fichero de configuración del servidor deberá contener esto:&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:723bf715-f052-4d24-8437-a78754ba8228"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;appSettings&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
  &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;add &lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;=&amp;quot;baseAddress&amp;quot;&lt;/span&gt;&lt;span&gt; value&lt;/span&gt;&lt;span&gt;=&amp;quot;.\private$\MyTest33&amp;quot;&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appSettings&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;

&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;system&lt;/span&gt;&lt;span&gt;.serviceModel&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
  &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;bindings&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
    &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;msmqIntegrationBinding&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
      &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;binding &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&amp;quot;NewBinding0&amp;quot;&lt;/span&gt;&lt;span&gt; exactlyOnce&lt;/span&gt;&lt;span&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span&gt; useSourceJournal&lt;/span&gt;&lt;span&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span&gt;
        useMsmqTracing&lt;/span&gt;&lt;span&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
        &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;security &lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;=&amp;quot;None&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
          &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;transport &lt;/span&gt;&lt;span&gt;msmqAuthenticationMode&lt;/span&gt;&lt;span&gt;=&amp;quot;None&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;
        &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;security&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
      &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
    &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;msmqIntegrationBinding&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
  &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;bindings&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
  &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
    &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;service &lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;=&amp;quot;WcfMsmqHost.Service1&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
      &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;endpoint &lt;/span&gt;&lt;span&gt;address&lt;/span&gt;&lt;span&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span&gt; binding&lt;/span&gt;&lt;span&gt;=&amp;quot;msmqIntegrationBinding&amp;quot;&lt;/span&gt;&lt;span&gt; bindingConfiguration&lt;/span&gt;&lt;span&gt;=&amp;quot;NewBinding0&amp;quot;&lt;/span&gt;&lt;span&gt;
        contract&lt;/span&gt;&lt;span&gt;=&amp;quot;WcfMsmqIntegration.IService1&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;
    &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;service&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
  &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;services&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;system.serviceModel&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Finalmente la función &lt;strong&gt;Main&lt;/strong&gt;, en Program.cs del proyecto de test debe contener algo similar a esto:&lt;/li&gt;&lt;/ul&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:7df6fa71-60bc-4000-8215-7a66996ac4cf"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; msmqPath &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; ConfigurationManager.AppSettings[&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;baseAddress&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;];

MsmqIntegrationBinding binding &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; MsmqIntegrationBinding();
EndpointAddress address &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; EndpointAddress(
          String.Format(&lt;/span&gt;&lt;span&gt;@&amp;quot;&lt;/span&gt;&lt;span&gt;msmq.formatname:DIRECT=OS:{0}&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, msmqPath));            
ChannelFactory&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;IService1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; channelFactory &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; ChannelFactory&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;IService1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;(binding, address);

&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt; None, porque MQM no esta en Active Directory&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;binding.Security.Mode &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; MsmqIntegrationSecurityMode.None;                       

IService1 channel &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; channelFactory.CreateChannel();

Persona msg &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; Persona();
msg.Nombre &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Juan Luis&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;
msg.Apellidos &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Guerrero&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;
msg.OtraCosaMariposa &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;elGuerre&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;

MsmqMessage&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Persona&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; message &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; MsmqMessage&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Persona&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;(msg);
&lt;/span&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; (TransactionScope scope &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; TransactionScope(TransactionScopeOption.Required))
{
    channel.Send(message);
    scope.Complete();
}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Y el fichero de configuración del cliente deberá contener:&lt;/li&gt;&lt;/ul&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:ac7cd34e-0fe2-467f-8e8f-c1193849c95d"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;configuration&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
  &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;appSettings&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
    &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;add &lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;=&amp;quot;baseAddress&amp;quot;&lt;/span&gt;&lt;span&gt; value&lt;/span&gt;&lt;span&gt;=&amp;quot;.\private$\MyTest33&amp;quot;&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;
  &lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;appSettings&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;configuration&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;No olvidar incluir los espacios de nombre:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:d088037d-0429-453d-9a47-3ee037c812c9"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; System.ServiceModel;
&lt;/span&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; System.Messaging;
&lt;/span&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; System.ServiceModel.MsmqIntegration;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Y ni que decir tiene que la clase Persona (Persona.cs) contiene&amp;nbsp; tres propiedades públicas sin más; Nombre, Apellidos y OtraCosaMariposa, incluso, no será necesario establecer el atributo DataContract.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Por otro lado y durante la configuración del ejemplo nos podemos encontrar con alguno errores y que detallo a continuación:&lt;/p&gt;
&lt;p&gt;&lt;u&gt;Caso 1:&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;serviceHost.Open&lt;/u&gt;: Binding validation failed because the binding's ExactlyOnce property is set to true while the destination queue is non-transactional. The service host cannot be opened. Resolve this conflict by setting the ExactlyOnce property to false or creating a transactional queue for this binding.&lt;/p&gt;
&lt;p&gt;Este problema es debido a la propiedad "exactlyOnce" tiene el valor "true" y la cola no es transaccional para solucionarlo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Si la cola es transaccional entonces asignarle el valor "true" a esta propiedad. 
&lt;li&gt;si la cola NO es transaccional asignarle el valor "false".&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;u&gt;Caso 2:&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Binding validation failed because the binding's MsmqAuthenticationMode property is set to WindowsDomain but MSMQ is installed with Active Directory integration disabled. The channel factory or service host cannot be opened.&lt;/p&gt;
&lt;p&gt;En este caso la solución es evitar que el valor del modo de seguridad del binding sea "WindowsDomain", puesto que la integración de MSMQ con Active Directory no ha sido instalada. Bastará, y si estamos en un dominio, con instalar esta integración desde los componentes de windows. Luego para nuestro caso, tanto cliente como servidor/host deberán establecer algunos valores:&lt;/p&gt;
&lt;p&gt;Cliente en modo programático:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:cf8263d3-353b-4b59-bf92-53ec78fbb7ad"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;binding.Security.Mode &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; MsmqIntegrationSecurityMode.None;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Servidor mediante fichero de configuración:&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:d85ce2a9-809b-4645-b160-f46209d04ce4"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;endpoint &lt;/span&gt;&lt;span&gt;address&lt;/span&gt;&lt;span&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&lt;span&gt; binding&lt;/span&gt;&lt;span&gt;=&amp;quot;msmqIntegrationBinding&amp;quot;&lt;/span&gt;&lt;span&gt; 
   bindingConfiguration&lt;/span&gt;&lt;span&gt;=&amp;quot;NewBinding0&amp;quot;&lt;/span&gt;&lt;span&gt;  contract&lt;/span&gt;&lt;span&gt;=&amp;quot;WcfMsmqIntegration.IService1&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;El inconveniente de utilizar transacciones, si es que es un inconveniente, es el MSTC (Microsoft Transsaction Coordinator), que nos asegura la transaccionalidad de la operación de forma automática, pero que sin embargo, y dependiendo del entorno, es decir de la distribución entre servidores, podría resultar muy pesado e incluso no deseable. En caso de no hacer uso de la transaccionalidad, bastará con invocar de nuevo a nuestro "Sender" (envío de mensajes a MSMQ con WCF) desde el propio servidor/host y establecer un tratamiento adecuado y con esto estaría solucionado.&lt;/p&gt;
&lt;p&gt;Finalmente y por ahora, he decir, que la ventaja de utilizar WCF para el tratamiento de colas MSMQ radica principalmente en la posibilidad de cambiar los bindings sin problema alguno, la trazabilidad totalmente automática, la seguridad de que todo va a funcionar a la primera, :-D&lt;/p&gt;
&lt;p&gt;"Lo malo" puede ser que nos encontremos con que ya tenemos un sistema de colas MSMQ en un entorno de producción y que no podamos crear ningún servicio WCF, en tal caso, siempre podremos optar por crear un cliente WCF (ClientBase&amp;lt;T&amp;gt;), incluso también optar por el caso contrario, un servidor WCF y un cliente no WCF (System.Messaging).&lt;/p&gt;
&lt;p&gt;&lt;a title="http://www.cogin.com/mq/download.php" href="http://www.cogin.com/mq/download.php"&gt;http://www.cogin.com/mq/download.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un nuevo camino para el tratamiento de colas MSMQ.&lt;/p&gt;
&lt;p&gt;saludos&lt;br&gt;Juanlu&lt;/p&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=11392" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>AutoCode. Programar m&amp;amp;#225;s r&amp;amp;#225;pido, a&amp;amp;#250;n sigue siendo posible.</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/03/25/10600.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/03/25/10600.aspx</id><published>2008-03-25T21:11:06Z</published><updated>2008-03-25T21:11:06Z</updated><content type="html">&lt;p&gt;&lt;img src="http://img339.imageshack.us/img339/6610/autocodev30gh8.jpg"&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Bueno, pues ya se terminaron las vacaciones, al menos para algunos, para otros seguro que no, alguno aún sigue pasándolo bien, jejeje...&lt;br&gt;Vengo de vacaciones, y por fin encuentro una herramienta que me permite desarrollar aún más rápido, si, ya hacía tiempo que la estaba esperando, jejeje... me río porque un compañero ("A.....") me comentó que la estaba desarrollando y por fin ha dado su fruto, la verdad, es maravillosa, ¡vamos, que ya la tengo instalada!, os recomiendo que le echéis un vistazo, no tiene desperdicio. Además, podéis encontrar un vídeo en su página, &lt;a title="http://www.devprojects.net/" href="http://www.devprojects.net/"&gt;http://www.devprojects.net/&lt;/a&gt;, por el momento os adelanto algunas características:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Fast command invocation just pressing &lt;strong&gt;Ctrl+Enter&lt;/strong&gt;  &lt;li&gt;ASPX like syntax to generate code  &lt;li&gt;Full access to Visual Studio automation objects  &lt;li&gt;FileCodeModel access, SmartFormat, code surrogate, cursor positioning and more  &lt;li&gt;Use Visual Studio editor to create custom commands  &lt;li&gt;Integrated Catalog ToolWindow to explore commands  &lt;li&gt;Multiple useful commands included  &lt;li&gt;Visual Studio 2005 and 2008 versions  &lt;li&gt;Supports Windows Vista&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;A continuación muestro la integración del catálogo en Visual Studio 2008.&lt;/p&gt; &lt;p&gt;&lt;img src="http://img409.imageshack.us/img409/1249/autocodecatalogke3.jpg"&gt; &lt;/p&gt; &lt;p&gt;He de decir que funciona, y además nos permite "customizarlo" a nuestro antonjo inmediatamente, accediendo a través del catálogo y guardando los cambios oportunos.&lt;/p&gt; &lt;p&gt;Descargarlo directamente para:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Visual Studio 2008: &lt;a href="http://www.devprojects.net/download2008.aspx"&gt;http://www.devprojects.net/download2008.aspx&lt;/a&gt;  &lt;li&gt;Visual Studio 2005: &lt;a href="http://www.devprojects.net/download2005.aspx"&gt;http://www.devprojects.net/download2005.aspx&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Saludos desde 3Cantos y de parte de mi compi Anonimo, :-D&lt;br&gt;Juanlu&lt;/p&gt;
Crossposting from &lt;a href="http://eljuanlu.blogspot.com"&gt;JuanLu, El Guerre&lt;/a&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=10600" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>WCF - Creaci&amp;amp;#243;n din&amp;amp;#225;mica de una clase proxy a partir de un WSDL</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/02/28/9999.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/02/28/9999.aspx</id><published>2008-02-29T01:09:33Z</published><updated>2008-02-29T01:09:33Z</updated><content type="html">&lt;p&gt;&lt;img src="http://img442.imageshack.us/img442/9302/fklogoya2.jpg"&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;No sé si a alguien le puede venir bien este ejemplo, pero seguro que sí, en cualquier caso, aquí está, :-P&lt;/p&gt; &lt;p&gt;Se trata de un proyecto C#&amp;nbsp; que permite crear "proxys" clientes a partir de un WSDL de forma dinámica.&lt;/p&gt; &lt;p&gt;Es un ejemplo de una calculadora muy sencillo pero que sin embargo y lo más importante es que puede modificarse y adaptase a nuestra necesidad con bastante facilidad.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;He aquí la referencia para descargarlo y pegarse un poco más con el: &lt;a title="http://wcf.netfx3.com/files/folders/development_tools/entry6148.aspx" href="http://wcf.netfx3.com/files/folders/development_tools/entry6148.aspx"&gt;http://wcf.netfx3.com/files/folders/development_tools/entry6148.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Una vez Más espero haber ayudado un poquito.&lt;br&gt;Juanlu&lt;/p&gt;
Crossposting from &lt;a href="http://eljuanlu.blogspot.com"&gt;JuanLu, El Guerre&lt;/a&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=9999" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>Hosteando en IIS un WCF con Http Basic Authentication y Compatibilidad ASP.NET (HttpContext; Session, cookies, cache, etc)</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/02/27/9875.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/02/27/9875.aspx</id><published>2008-02-27T16:16:00Z</published><updated>2008-02-27T16:16:00Z</updated><content type="html">&lt;p&gt;Una vez más, sigo por aquí con VS2008 y con WCF, en esta ocasión trataré de comentar, como hostear en IIS un WCF basado en un binding "Http Basic Authentication" y conseguir hacer uso de nuestra conocida clase &lt;strong&gt;HttpContext&lt;/strong&gt;. Son unos cuantos pasos muy fáciles y básicos, jejeje.. ¡claro, ahora que los conozco!&lt;/p&gt; &lt;p&gt;Los pasos a seguir para conseguir el objetivo de este post son:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Crear un proyecto Web de tipo "WCF Service Application". &lt;/li&gt;&lt;/ol&gt; &lt;blockquote&gt; &lt;p&gt;&lt;img src="http://img299.imageshack.us/img299/2787/wcfserviceapplicationnely2.jpg"&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;ul&gt; &lt;li&gt;La plantilla nos creará un proyecto con un Interfaz (Servicio) y una clase de datos (contrato), además un servicio, lo que es nuestro Web Service que ha de implementar obligatoriamente la Interfaz.  &lt;li&gt;Seguidamente modificamos el Web.config del servicio manualmente o con nuestro maravilloso editor (&lt;a title="Windows Communication Foundation (WCF) - BUG 1" href="http://eljuanlu.blogspot.com/2007/12/windows-communication-foundation-wcf.html"&gt;Windows Communication Foundation (WCF) - BUG 1&lt;/a&gt;) estableciendo principalmente la configuración tal y como muestro aquí un par de pantallazos: &lt;/li&gt;&lt;/ul&gt; &lt;blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;img src="http://img299.imageshack.us/img299/8910/wcfbasicbindingconfigedqb9.jpg"&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://img404.imageshack.us/img404/8362/wcfservcieconfigurationqq9.jpg"&gt; &lt;/p&gt;&lt;/blockquote&gt; &lt;ul&gt; &lt;li&gt;A continuación tenemos dos opciones para trabajar con la compatibilidad&amp;nbsp; ASP NET:  &lt;ul&gt; &lt;li&gt;Anadir el attributo "&lt;strong&gt;&lt;em&gt;AspNetCompatibilityRequirements&lt;/em&gt;&lt;/strong&gt;" &lt;em&gt;([AspNetCompatibilityRequirements(RequirementsMode= AspNetCompatibilityRequirementsMode.&lt;font color="#ff0000"&gt;Allowed&lt;/font&gt;)])&lt;/em&gt; al servicio, Service1 tal y como se muestra a continuación. Aprovechamos para establecer el Namespace, :-D, ¡ya sabéis "best practices"! (&lt;a title="tempuri.org con WCF" href="http://eljuanlu.blogspot.com/2008/02/evitando-el-namespace-con-wcf.html"&gt;tempuri.org con WCF&lt;/a&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;blockquote&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:81e18ec0-1b4e-40a9-8018-e3622f68efc2"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt; 1&lt;/span&gt; &lt;span&gt;[ServiceBehavior(Namespace&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;http://elGuerre.loc/Service1/&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)]
&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt; &lt;span&gt;    [AspNetCompatibilityRequirements(RequirementsMode&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; AspNetCompatibilityRequirementsMode.Allowed)]
&lt;/span&gt;&lt;span&gt; 3&lt;/span&gt; &lt;span&gt;    &lt;/span&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; Service1 : IService1
&lt;/span&gt;&lt;span&gt; 4&lt;/span&gt; &lt;span&gt;    {
&lt;/span&gt;&lt;span&gt; 5&lt;/span&gt; &lt;span&gt;        &lt;/span&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; GetData(&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; value)
&lt;/span&gt;&lt;span&gt; 6&lt;/span&gt; &lt;span&gt;        {
&lt;/span&gt;&lt;span&gt; 7&lt;/span&gt; &lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;.Format(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;You entered: {0}&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;, value);
&lt;/span&gt;&lt;span&gt; 8&lt;/span&gt; &lt;span&gt;        }
&lt;/span&gt;&lt;span&gt; 9&lt;/span&gt; &lt;span&gt;
&lt;/span&gt;&lt;span&gt;10&lt;/span&gt; &lt;span&gt;        &lt;/span&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; CompositeType GetDataUsingDataContract(CompositeType composite)
&lt;/span&gt;&lt;span&gt;11&lt;/span&gt; &lt;span&gt;        {
&lt;/span&gt;&lt;span&gt;12&lt;/span&gt; &lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (composite.BoolValue)
&lt;/span&gt;&lt;span&gt;13&lt;/span&gt; &lt;span&gt;            {
&lt;/span&gt;&lt;span&gt;14&lt;/span&gt; &lt;span&gt;                composite.StringValue &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;Suffix&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;;
&lt;/span&gt;&lt;span&gt;15&lt;/span&gt; &lt;span&gt;            }
&lt;/span&gt;&lt;span&gt;16&lt;/span&gt; &lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; composite;
&lt;/span&gt;&lt;span&gt;17&lt;/span&gt; &lt;span&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;y, añadir la siguiente línea en el web.config.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:ddcd16c6-e121-4c80-934f-181215edd369"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;1&lt;/span&gt; &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;system.serviceModel&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;2&lt;/span&gt; &lt;span&gt;    &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;serviceHostingEnvironment aspNetCompatibilityEnabled&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;
&lt;/span&gt;&lt;span&gt;3&lt;/span&gt; &lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;O,&lt;/p&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;Añadir el atributo "&lt;strong&gt;&lt;em&gt;AspNetCompatibilityRequirements&lt;/em&gt;&lt;/strong&gt;" ([AspNetCompatibilityRequirements(RequirementsMode= AspNetCompatibilityRequirementsMode.&lt;font color="#ff0000"&gt;Required&lt;/font&gt;)] y, 
&lt;li&gt;no incluir la configuración en el web.config.&lt;/li&gt;&lt;/ul&gt;
&lt;li&gt;Publicar el servicio ("Publish"). 
&lt;li&gt;Modificar las propiedades del sitio Web en IIS: 
&lt;ol&gt;
&lt;li&gt;Quitar autenticación anónima 
&lt;li&gt;Activar autenticación básica (dejar activa solamente esta casilla). &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ahora tenemos la compatibilidad con ASP.NET&amp;nbsp; pero con la potencia de WCF, nuestra clase &lt;strong&gt;&lt;u&gt;HttpContext&lt;/u&gt; &lt;/strong&gt;(session, cookies, cache, etc) está lista para ser usada.&lt;/p&gt;
&lt;p&gt;Si estáis interesados en esto, aquí os dejo unas cuantas referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="http://msdn2.microsoft.com/en-us/library/aa702682.aspx" href="http://msdn2.microsoft.com/en-us/library/aa702682.aspx"&gt;WCF Services and ASP.NET&lt;/a&gt; 
&lt;li&gt;&lt;a&gt;http://msdn2.microsoft.com/en-us/library/ms752234.aspx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Saludos @3Cantos&lt;br&gt;Juanlu 

Crossposting from &lt;a href="http://eljuanlu.blogspot.com"&gt;JuanLu, El Guerre&lt;/a&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=9875" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>WCF - Creando un nuevo Behavior</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/02/15/9140.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/02/15/9140.aspx</id><published>2008-02-15T13:17:20Z</published><updated>2008-02-15T13:17:20Z</updated><content type="html">&lt;p&gt;Continuo con VS2008, con WCF (Windows Communication Foundation), en este caso integrando WCF con JAVA y más concretamente con una aplicación desarrollada en AXIS 1.1.0.xxx, vamos, "&lt;strike&gt;una patata&lt;/strike&gt;" un problema, puesto que es la primera y obsoleta versión, no cumple muchos puntos del estandard WSDL, el principal&amp;nbsp; es que no permite las cláusulas &amp;lt;&lt;strong&gt;import&lt;/strong&gt;&amp;gt;, es decir, es necesario generar un WSDL "to junto", en fin, cosas del directo como se suele decir, jeje...&lt;/p&gt; &lt;p&gt;Para conocer como afrontar este inconveniente, os cuento lo que he hecho:&lt;/p&gt; &lt;p&gt;Se trata de crear una extensión para nuestro WCF y en cierta forma dotarlo de una nueva funcionalidad, para ello usaremos los interfaces; IWsdlExportExtension, IEndpointBehavior. Entrando más en detalle, necesitaremos añadir código al evento ExportEndPoint de IWsdlExportExtension tal y como muestro a continuación:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:247973fb-dfae-49df-91c4-94162ec299cd"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; ExportEndpoint(
              WsdlExporter exporter,
              WsdlEndpointConversionContext context
           )
        {
            XmlSchemaSet schemaSet &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; exporter.GeneratedXmlSchemas;
            &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (WsdlDescription wsdl &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; exporter.GeneratedWsdlDocuments)
            {
                List&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;XmlSchema&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; importsList &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; List&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;XmlSchema&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;();
                &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (XmlSchema schema &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; wsdl.Types.Schemas)
                {
                    AddImportedSchemas(schema, schemaSet, importsList);
                }
                wsdl.Types.Schemas.Clear();
                &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (XmlSchema schema &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; importsList)
                {
                    RemoveXsdImports(schema);
                    wsdl.Types.Schemas.Add(schema);
                }
            }
        }

        &lt;/span&gt;&lt;span&gt;private&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; AddImportedSchemas(
           XmlSchema schema,
           XmlSchemaSet schemaSet,
           List&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;XmlSchema&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; importsList
           )
        {
            &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (XmlSchemaImport import &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; schema.Includes)
            {
                ICollection realSchemas &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;
                   schemaSet.Schemas(import.Namespace);
                &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (XmlSchema ixsd &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; realSchemas)
                {
                    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;importsList.Contains(ixsd))
                    {
                        importsList.Add(ixsd);
                        AddImportedSchemas(ixsd, schemaSet, importsList);
                    }
                }
            }
        }

        &lt;/span&gt;&lt;span&gt;private&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; RemoveXsdImports(XmlSchema schema)
        {
            &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;; i &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt; schema.Includes.Count; i&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt;)
            {
                &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (schema.Includes[i] &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; XmlSchemaImport)
                    schema.Includes.RemoveAt(i&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt;);
            }
        }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;El resto de métodos a sobrescribir podrán dejarse vacíos.&lt;/p&gt;
&lt;p&gt;Adicionalmente y para poder configurar nuestro WCF con la herramienta de configuración (&lt;strong&gt;WCF Service Configuration Editor&lt;/strong&gt;), será necesario:&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:7d1e07d2-a6f2-44d6-8d1e-e4ebbd57d3f1"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; InlineXsdBehaviorSection : BehaviorExtensionElement
    {

        &lt;/span&gt;&lt;span&gt;protected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;override&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt; CreateBehavior()
        {
            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; InlineXsdInWsdlBehavior();
        }

         &lt;/span&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;override&lt;/span&gt;&lt;span&gt; Type BehaviorType
        {
            &lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;
            {
                Type t &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; Type.GetType(&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;MyProject.WCF.Extensions.InlineXsdInWsdlBehavior&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;);
                &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; t;
            }
        }
    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Finalmente tendremos que incluir esta DLL en el GAC, creando previamente un Strong Key, o bien, incluir la referencia en nuestro proyecto, con "Copy Local = true". Al menos durante el desarrollo os recomiendo que la incluyais en el GAC, evitará el estar constantemente seleccionando esta dll cada vez que editamos la configuración con el "WCF Service Configuration Editor", &lt;strike&gt;"menuda lata, ¿no?"&lt;/strike&gt;.&lt;/p&gt;
&lt;p&gt;Para poner en marcha nuestro WCF:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configurar el WS de forma normal 
&lt;li&gt;Cargar la nueva funcionalidad, para ello: 
&lt;ul&gt;
&lt;li&gt;Abrir el editor y en el árbol de configuración (a la izquierda), desplegar"Advanced - Extensions" 
&lt;li&gt;seleccionar "behavior element extensions". 
&lt;li&gt;En la ventana de la derecha crear un nuevo elemento, Click en "New..." 
&lt;li&gt;Buscar y seleccionar nuestra DLL y asignar un nombre.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;img src="http://img82.imageshack.us/img82/1394/addingnewendpointbehavisy2.jpg"&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Crear un nuevo "Endpoint Behavior". 
&lt;ul&gt;
&lt;li&gt;Seleccionar "Advanced - Endpoint Behavior" en el árbol de configuración y crear ("Add...") un nuevo elemento. 
&lt;li&gt;El el siguiente cuadro de diálogo buscar y seleccionar el nombre dado a nuestra DLL.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;img src="http://img508.imageshack.us/img508/6223/extensionbehaviorrb9.jpg"&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Por último, asociar la nueva extensión a nuestro EndPoint: 
&lt;ul&gt;
&lt;li&gt;seleccionar "Services - MyProject.WCF.Extensions.InlineXsdInWsdlBehavior - EndPoints - MyEndpoint" 
&lt;li&gt;Asignar el Endpoint beavior a nuestro servicio dando valor la la propiedad&amp;nbsp; "BehaviorConfiguration"&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Si ahora comprobamos el WSDL de nuestro WCF veremos como ya no incluye ninguna clausula "import".&lt;/p&gt;
&lt;p&gt;Esto no es del todo cierto, jejeje... existe un inconveniente/restricción y dependerá de los Namespaces de nuestras clases, es decir, será necesario que todos los Namespaces sean iguales, vamos, que sólo exista un único Namespace.&amp;nbsp; Para ver como cambiar el namespace,&amp;nbsp; echad un vistazo a este otro post; "&lt;a title="tempuri.org con WCF" href="http://eljuanlu.blogspot.com/2008/02/evitando-el-namespace-con-wcf.html"&gt;tempuri.org con WCF&lt;/a&gt;".&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Para mayor detalle y comprensión sobre los behaviors, os sugiero que le echéis un vistazo a un artículo de la MSDN Magazine de Diciembre de 2007:&amp;nbsp;&amp;nbsp; &lt;a title="http://msdn.microsoft.com/msdnmag/issues/07/12/ServiceStation/default.aspx?loc=es" href="http://msdn.microsoft.com/msdnmag/issues/07/12/ServiceStation/default.aspx?loc=es"&gt;http://msdn.microsoft.com/msdnmag/issues/07/12/ServiceStation/default.aspx?loc=es&lt;/a&gt; 
&lt;p&gt;&amp;nbsp; &lt;p&gt;Nota: Para el siguiente post contaré sobre "ASP NET Compatibility" y lo que ofrece sobre todo a aquellos que estamos empezando con WCF. 
&lt;p&gt;&amp;nbsp; &lt;p&gt;Saludos y suerte en vuestras nuevas extensiones&lt;br&gt;Juanlu 

Crossposting from &lt;a href="http://eljuanlu.blogspot.com"&gt;JuanLu, El Guerre&lt;/a&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=9140" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>Evitando el namespace &amp;amp;quot;http://tempuri.org&amp;amp;quot; con WCF</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/02/11/8954.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/02/11/8954.aspx</id><published>2008-02-12T01:29:18Z</published><updated>2008-02-12T01:29:18Z</updated><content type="html">&lt;p&gt;Hace unos días me toco quitar el ya conocido &lt;a href="http://tempuri.org"&gt;http://tempuri.org&lt;/a&gt; del WSDL y asignarle un namespace específico, es más, esto es lo recomendado por seguridad y como buena practica, en fin, para conseguirlo bastará con lo siguiente:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Especificar el Namespace en el ServiceContract (Interfaces):&lt;/li&gt;&lt;/ul&gt; &lt;div&gt; &lt;blockquote&gt; &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:81fa1db4-852b-403c-bfda-899a633f02b4"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;[ServiceContract(Namespace &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;http://MyProject.Tests&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Especificar el Namespace en cada uno de los tipos/clases de datos o contratos; DataContract&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:31959fdd-6031-4801-bae4-4be32c4f809a"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;[DataContract(Namespace&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;http://MyProject.Tests&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;Quitar el &lt;a href="http://tempuri.org"&gt;http://tempuri.org&lt;/a&gt; de la definición del WSDL y para ello: 
&lt;p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Añadir el siguiente atributo&amp;nbsp; al servicio:&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:6fec5e57-f5e6-43ab-9ff7-befb427f06aa"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;[ServiceBehavior(Namespace&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;http://MyProject.Tests&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;)] &lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;li&gt;Modificar/Añadir valor a la propiedad "bindingNamespace" del endpoint del servicio según indico concretamente en la línea 2, si no se tiene en cuenta este punto, el namespace por defecto es es "tempuri.org" y aunque cambiemos el namespace en los tres puntos anteriores, este no cambiará:&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:023c479d-13e9-4843-9016-8bb4daaf5593"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;1&lt;/span&gt; &lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;service name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;WcfService1.Service1&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; behaviorConfiguration&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;WcfService1.Service1Behavior&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;      
&lt;/span&gt;&lt;span&gt;2&lt;/span&gt; &lt;span&gt;   &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;endpoint bindingNamespace&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;http://MyProject.Tests&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; address&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span&gt; binding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;wsHttpBinding&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; contract&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;WcfService1.IService1&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;ó, graficamente:&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://img352.imageshack.us/img352/4049/avoidtempuriorghz8.jpg"&gt; &lt;/p&gt;
&lt;p&gt;El valor para esta propiedad, aunque puede ser cualquiera, ¡con un poco de sentido común, claro!, sería conveniente que tomara el mismo que el indicado para el "[ServiceBehavior]".&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Este último punto fue el que más tardé en encontrar, ¡y mira que está visible! :-D&amp;nbsp; ¡si leyera un poco de vez en cuando!, jeje... ¡si es que lo dice claramente al pie de la ventana! De todos modos, es curioso, porque todos los post y artículos que hacen referencia a los namespaces, pasan por alto este último punto.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Una ayudita más, un gran logro, :-D.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Saludos&lt;br&gt;Juanlu&lt;/p&gt;
Crossposting from &lt;a href="http://eljuanlu.blogspot.com"&gt;JuanLu, El Guerre&lt;/a&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=8954" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>WCF - &amp;amp;quot;ServiceModelReg -i&amp;amp;quot;</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/01/30/8174.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/01/30/8174.aspx</id><published>2008-01-30T15:53:02Z</published><updated>2008-01-30T15:53:02Z</updated><content type="html">&lt;p&gt;Durante el día de ayer mientras trabajaba con WCF en una máquina virtual, tuve la necesidad de instalar Exchanger Server 2003 junto con OWA porque el proyecto en el que estoy en cierta forma lo requería, cual fue mi sorpresa cuando tras la instalación, los web services desarrollados con WCF (Framework 3.0) dejaron de funcionar. El error "The page cannot be display" o "Service Unavailable" ¿Por qué? ¿A que se debe esto?, pues bien, la respuesta es muy fácil,¡claro ahora que la conozco! Los ficheros ".svc" no son reconocidos, las ISAPI que tratan estos ficheros no se encuentran registradas y por tanto es necesario volverlas a registrar, jeje... ¡es lo que tiene el instalar y desinstalar cosas en las máquinas de desarrollo!&lt;/p&gt; &lt;p&gt;Estos son los pasos a realizar:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\&lt;strong&gt;Aspnet_regiis -i - enable. (&lt;/strong&gt;Esta ya es bastante conocida y seguro que a más de uno nos a pasado más de una vez).  &lt;li&gt;C:\WINDOWS\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\&lt;strong&gt;ServiceModelReg -i&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;img src="http://img156.imageshack.us/img156/7505/registrarwcfkn5.jpg"&gt; &lt;/p&gt; &lt;p&gt;Tras la ejecución de este comando &lt;/p&gt; &lt;p&gt;En &lt;a href="http://msdn2.microsoft.com/en-us/library/ms752241.aspx" target="_blank"&gt;esta página&lt;/a&gt;, explica los pasos más en profundidad así como la reparación manual si fuera necesario.&lt;/p&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;Justo hoy, un añito más viejo, jejeje...&lt;br&gt;Gracias a tod@s por compartirlo conmigo&lt;br&gt;Juanlu&lt;/p&gt;
Crossposting from &lt;a href="http://eljuanlu.blogspot.com"&gt;JuanLu, El Guerre&lt;/a&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=8174" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>Fiddler 2 - Depurador y sniffer</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/01/29/8111.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/01/29/8111.aspx</id><published>2008-01-29T14:40:26Z</published><updated>2008-01-29T14:40:26Z</updated><content type="html">&lt;p&gt;&lt;img src="http://img139.imageshack.us/img139/3415/fiddlerlogogb7.png"&gt; &lt;/p&gt; &lt;p&gt;Aunque muchos de vosotros ya conocéis posiblemente esta herramienta y a pesar de que lleva tiempo publicada, quiero hacerle mención para aquellos que no la conocen y decir que en más de una vez me ha sacado de un apuro, jeje..., en fin, es una de esas herramientas que debe formar parte del repositorio de cada desarrollador, ¡de mi colección ya forma parte!.&amp;nbsp; En otras ocasiones he comentado sobre herramientas similares (&lt;a title="WSE 2.0 Tracing Utility" href="http://eljuanlu.blogspot.com/2007/10/wse-20-tracing-utility_19.html"&gt;WSE 2.0 Tracing Utility&lt;/a&gt; y &lt;a title="TCPTrace (Un Sniffer TCP)" href="http://eljuanlu.blogspot.com/2007/02/tcptrace-un-sniffer-tcp.html"&gt;TCPTrace (Un Sniffer TCP)&lt;/a&gt;) a esta, pero esta, sin lugar a dudas las supera con creces, al menos esa es mi opinión.&lt;/p&gt; &lt;p&gt;Páginas html al completo, contenidos de ficheros ".js", ".css", imágenes, peticiones y respuestas SOAP, posibilidad de editar y realizar peticiones, multitud de vistas posibles para hacer más fácil su uso, estadísticas, filtros, por si fuera poco permite hasta breakpoints y,... yo que sé cuantas cosas más... ¡Una herramienta que lo tiene todo!&amp;nbsp; La verdad, merece la pena, si podéis, echarle un vistazillo, no os arrepentiréis.&lt;/p&gt; &lt;p&gt;Es gratuita y podéis encontrarla aquí:&amp;nbsp; &lt;a title="http://www.fiddlertool.com/fiddler/" href="http://www.fiddlertool.com/fiddler/"&gt;http://www.fiddlertool.com/fiddler/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp; &lt;p&gt;"Por un camino más sencillo y cercano"  &lt;p&gt;Gracias&lt;br&gt;Juanlu&lt;/p&gt;
Crossposting from &lt;a href="http://eljuanlu.blogspot.com"&gt;JuanLu, El Guerre&lt;/a&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=8111" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>WCF - WcfServiceHost, WcfTestClient, SvcConfigEditor y SvcTraceViewer.</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/01/28/8067.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2008/01/28/8067.aspx</id><published>2008-01-28T18:24:03Z</published><updated>2008-01-28T18:24:03Z</updated><content type="html">&lt;p&gt;Muy buenas de nuevo, siento haber estado desaparecido una temporada, pero como mi madre dice "En misa y repicando", ¡no,no,no...! jejeje...&lt;/p&gt; &lt;p&gt;En fin, en esta ocasión y antes de comentar varios casos sobre WCF (Windows Communication Foundation),voy a hacer mención a varias de las herramientas que nos van a permitir poder trabajar un poquito mejor. Para hacer más fácil su uso y comprensión, ¡que mejor que hacer un pequeño ejemplo y ver su funcionamiento!.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;En primer lugar creamos un proyecto "WCF Service Application".  &lt;li&gt;Publicamos el Web service en nuestro IIS: Ej: en &lt;a href="http://localhost/WcfService1/"&gt;http://localhost/WcfService1/&lt;/a&gt; .  &lt;li&gt;Comprobamos el acceso al servicio desde iexplorer: &lt;a title="http://localhost/wcfservice1/service1.svc" href="http://localhost/wcfservice1/service1.svc"&gt;http://localhost/wcfservice1/service1.svc&lt;/a&gt;  &lt;li&gt;Hasta aquí, todo perfecto, todo funciona, perfectamente. Nota: Al publicar un servicio por primera vez, la la autenticación se establece como "anónima".  &lt;li&gt;Ahora veamos como configurar nuestro servicio. "WCF Service Configuration Editor".&amp;nbsp;&amp;nbsp; Por defecto una vez creado el servicio, el Binding es "wsHttpBinding" para nuestro Services - EndPoint&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Con Internet Explorer, todo funciona correctamente, si creamos una aplicación de consola (en 3.0 ó 3.5) y añadimos una referencia a nuestro WCF Service "Add Service Reference" se crea una clase proxy y listo. Poco hemos hecho hasta este momento, jejeje... ¡vamos por buen camino!&lt;/p&gt; &lt;p&gt;Ahora utilizando la siguiente herramienta, podremos chequear nuestro WCF Service sin necesidad de tener que crear una aplicación de test como la anterior, además podremos visualizar todas las peticiones y respuestas de tipo SOAP.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;WcfTestClient&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:44cc0146-e7c6-4be0-84db-74c9495de1fc"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;C:\Development\WCF\Samples\WcfService1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;wcftestclient http:&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;localhost/WcfService1/Service1.svc&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://img120.imageshack.us/img120/2103/wcftestclientef4.jpg"&gt; &lt;/p&gt;
&lt;p&gt;Todo sigue funcionando correctamente y hemos chequeado la funcionalidad del WCF Service. Ya tenemos todo apunto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTA: &lt;/strong&gt;Ni que decir tiene que el servicio que se quiere testear ha de estar en ejecución, de lo contrario un error amenizará la ocasión, jijiji...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ahora otra forma de hostear nuestro Web Service:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;WcfServiceHost &lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;¿Porque necesito "obligatoriamente" hostear mi WCF service en IIS?, pues bien, con esta herramienta proporcionada por WCF no será necesario, simplemente diferente a como estamos acostumbrados, podemos evitar el tener que instalar IIS, bien porque no queremos o no tenemos el CD/DVD correspondiente o, simplemente debido a las prisas, cosa que suele ser bastante común, jejeje...&lt;/p&gt;
&lt;p&gt;&lt;img src="http://img120.imageshack.us/img120/8563/wcfservicehostls4.jpg"&gt; &lt;/p&gt;
&lt;p&gt;Asegura de que el servicio no está hosteado en IIS para que no existan conflictos, también hay que estar seguro de que la propiedad Address del Endpoint del servicio tiene el valor "&lt;a title="http://localhost/Wcfservice1/service1.svc" href="http://localhost/Wcfservice1/service1.svc"&gt;http://localhost/Wcfservice1/service1.svc&lt;/a&gt;", seguidamente tecleamos:&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:2b0f12b1-23f8-4f89-9073-ced32e294dda"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;C:\Develpment\WCF\Samples\WcfService1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; wcfsvchost &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;service:&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;./bin/WcfService1.dll&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;config:web.config&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tras ejecutar este comando se carga el WCF Service en la herramienta, pero ¿Que ocurre?, pues que tenemos un error:&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:6a41b393-9d6d-47b9-935c-dc27fe6a9cdc"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt; 1&lt;/span&gt; &lt;span&gt;System.InvalidOperationException: The HttpGetEnabled property of ServiceMetadataBehavior &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; to &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt; and the HttpGetUrl property &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; a relative address, but there &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; no http &lt;/span&gt;&lt;span&gt;base&lt;/span&gt;&lt;span&gt; address.  Either supply an http &lt;/span&gt;&lt;span&gt;base&lt;/span&gt;&lt;span&gt; address or &lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt; HttpGetUrl to an absolute address.
&lt;/span&gt;&lt;span&gt; 2&lt;/span&gt; &lt;span&gt;   at System.ServiceModel.Description.ServiceMetadataBehavior.EnsureGetDispatcher(ServiceHostBase host, ServiceMetadataExtension mex, Uri url, String scheme)
&lt;/span&gt;&lt;span&gt; 3&lt;/span&gt; &lt;span&gt;   at System.ServiceModel.Description.ServiceMetadataBehavior.CreateHttpGetEndpoints(ServiceDescription description, ServiceHostBase host, ServiceMetadataExtension mex)
&lt;/span&gt;&lt;span&gt; 4&lt;/span&gt; &lt;span&gt;   at System.ServiceModel.Description.ServiceMetadataBehavior.System.ServiceModel.Description.IServiceBehavior.ApplyDispatchBehavior(ServiceDescription description, ServiceHostBase serviceHostBase)
&lt;/span&gt;&lt;span&gt; 5&lt;/span&gt; &lt;span&gt;   at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost)
&lt;/span&gt;&lt;span&gt; 6&lt;/span&gt; &lt;span&gt;   at System.ServiceModel.ServiceHostBase.InitializeRuntime()
&lt;/span&gt;&lt;span&gt; 7&lt;/span&gt; &lt;span&gt;   at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
&lt;/span&gt;&lt;span&gt; 8&lt;/span&gt; &lt;span&gt;   at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
&lt;/span&gt;&lt;span&gt; 9&lt;/span&gt; &lt;span&gt;   at System.ServiceModel.Channels.CommunicationObject.Open()
&lt;/span&gt;&lt;span&gt;10&lt;/span&gt; &lt;span&gt;   at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Utilizamos el editor de configuración de WCF (&lt;strong&gt;&lt;u&gt;SvcConfigEditor&lt;/u&gt;&lt;/strong&gt;) y&amp;nbsp; asignamos el valor &lt;a href="http://localhost/WcfService1/Service1.svc"&gt;http://localhost/WcfService1/Service1.svc&lt;/a&gt; a la propiedad&amp;nbsp; HttpGetUrl según muestro en la siguiente imagen: 
&lt;p&gt;&amp;nbsp; &lt;img src="http://img120.imageshack.us/img120/7884/wcfservcieconfigurationsm9.jpg"&gt; 
&lt;p&gt;Si&amp;nbsp; ahora intentamos ejecutar de nuevo la instrucción veremos como el WCF Service es iniciado correctamente. En este momento ya lo tenemos nuevamente "hosteado".&lt;/p&gt;
&lt;p&gt;También existe la posibilidad de lanzar estas dos aplicaciones "Servidor/Host" y "Cliente/Client" de una sóla "atacada", :-D&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:2d58a3a9-18ef-4537-a382-5d989fdde313"&gt;&lt;pre&gt;&lt;div&gt;&lt;span&gt;C:\Develpment\WCF\Samples\WcfService1&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; wcfsvchost &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;service:&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;./bin/WcfService1.dll&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;config:web.config &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;client: MyClient.exe &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;clientArgs:&lt;/span&gt;&lt;span&gt;123456&lt;/span&gt;&lt;span&gt;, abcdef&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Trazas - SvcTraceViewer&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Esta herramienta con una interfaz gráfica que se distribuye con WCF, aunque por otro lado "no estoy seguro", parece que con algunas versiones de VSTS si es así, no obstante, con el SDK de Windows se distribuye y&amp;nbsp; en cualquier caso, &lt;a href="http://geeks.ms/ControlPanel/Files/FileEditor.aspx?SectionID=275&amp;amp;PostID=67021"&gt;aquí&lt;/a&gt; os dejo un ".zip" con dicha herramienta.&lt;/p&gt;
&lt;p&gt;El objetivo de esta es mostrar la información almacenada en los ficheros ".svclog", que son generados por el "Service.Model" configurado en los web.config de los WCF Services; un fichero de mensajes y otro de trazas.&lt;/p&gt;
&lt;p&gt;Referencia: &lt;a title="http://msdn2.microsoft.com/en-us/library/ms732023.aspx" href="http://msdn2.microsoft.com/en-us/library/ms732023.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms732023.aspx&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Existe otra herramienta de terceros "Live Service Trace Viewer" (&lt;a title="http://blogs.msdn.com/craigmcmurtry/archive/2006/09/19/762689.aspx" href="http://blogs.msdn.com/craigmcmurtry/archive/2006/09/19/762689.aspx"&gt;http://blogs.msdn.com/craigmcmurtry/archive/2006/09/19/762689.aspx&lt;/a&gt;) que a pesar de mostrar la misma información (.svclog) lo hace de una forma mucho más gráfica y "quizás" más intuitiva. 
&lt;p&gt;Como vemos&amp;nbsp; WCF está comenzando a dar mucho juego y por supuesto a facilitarnos mucho el trabajo, en fin, mientras sea así, todo será bienvenido, :-D 
&lt;p&gt;&amp;nbsp; &lt;p&gt;Espero haber sido de ayuda una vez más.&lt;br&gt;Saludos y hasta la próxima.&lt;br&gt;Juanlu&lt;/p&gt;
Crossposting from &lt;a href="http://eljuanlu.blogspot.com"&gt;JuanLu, El Guerre&lt;/a&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=8067" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>YO, Robot. Yo, Visual Studio 2008 - OnobaNet (Huelva)</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2007/12/17/7089.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2007/12/17/7089.aspx</id><published>2007-12-18T03:38:18Z</published><updated>2007-12-18T03:38:18Z</updated><content type="html">&lt;p&gt;&lt;img src="http://img205.imageshack.us/img205/8518/onobanetsx1.jpg"&gt; &lt;/p&gt; &lt;p&gt;En esta ocasión quiero comentar el éxito conseguido el pasado viernes en &lt;strong&gt;&lt;u&gt;Huelva&lt;/u&gt;&lt;/strong&gt; y por supuesto, agradecer a Fran y a Miguel la posibilidad que me brindaron de poder ser uno de los ponentes, a Paco agradecerle también el maravillo esfuerzo que hizo por conseguir darnos esa publicidad espectacular, tanto en los Carteles que diseño como en la publicidad que mostraban los autobuses de la capital. (Chicos ya nos mandaréis esa foto :-D).&lt;/p&gt; &lt;p&gt;A Bruno tampoco quiero dejarlo atrás, puesto que fue el quien me metió en este "Berengenal", jeje... en serio, un gran placer poder trabajar con el en este evento, como tu dirías, Bruno, "Felicitaciones" jejeje... &lt;/p&gt; &lt;p&gt;&lt;img height="332" src="http://img156.imageshack.us/img156/7308/eventohuelva001preparanoq5.gif" width="640"&gt; &lt;/p&gt; &lt;p&gt;Aquí os dejo una referencia al Blog de Bruno donde se encuentran todas las fotos del evento así como aquellas de las degustaciones nocturnas, es decir el motivo del viaje, :-P:&lt;/p&gt; &lt;p&gt;&lt;a title="http://elbruno.com/blogs/elbruno/archive/2007/12/15/evento-materiales-de-la-presentacion-quot-yo-robot-quot-en-huelva.aspx" href="http://elbruno.com/blogs/elbruno/archive/2007/12/15/evento-materiales-de-la-presentacion-quot-yo-robot-quot-en-huelva.aspx"&gt;http://elbruno.com/blogs/elbruno/archive/2007/12/15/evento-materiales-de-la-presentacion-quot-yo-robot-quot-en-huelva.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;El Cartel: &lt;a title="http://img49.imageshack.us/img49/7743/071214eventoyorobotgs5.jpg" href="http://img49.imageshack.us/img49/7743/071214eventoyorobotgs5.jpg"&gt;http://img49.imageshack.us/img49/7743/071214eventoyorobotgs5.jpg&lt;/a&gt;  &lt;p&gt;&lt;img src="http://img408.imageshack.us/img408/1261/071214eventoyorobot2dp3.jpg"&gt;&amp;nbsp;&amp;nbsp; &lt;p&gt;Saludos @todos&lt;br&gt;Juanlu&lt;/p&gt;
Crossposting from &lt;a href="http://eljuanlu.blogspot.com"&gt;JuanLu, El Guerre&lt;/a&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=7089" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>Windows Communication Foundation (WCF) - BUG 1</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2007/12/12/7039.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2007/12/12/7039.aspx</id><published>2007-12-13T02:28:12Z</published><updated>2007-12-13T02:28:12Z</updated><content type="html">&lt;p&gt;Seguimos con otra cosita interesante, ahora sobre WCF, se trata del Configurador "&lt;strong&gt;WCF Service Configuration Editor&lt;/strong&gt;". Sabemos que es una herramienta "externa" pero a la vez, integrada en el Visual Studio 2008, bueno, o eso creo.&lt;/p&gt; &lt;p&gt;Es curioso, pero si intentamos abrir este configurador a partir de nuestro menú "popup" al hacer "click" sobre un fichero ".config" de un proyecto, debería abrirse, ese es su cometido, sin embargo, no ocurre así, no la primera vez, si, como digo, no, la primera vez, jejejeje....&lt;/p&gt; &lt;p&gt;Sigue estos pasos y verás:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Abre el Visual estudio y crea un nuevo proyecto.  &lt;li&gt;Añade un item de tipo ".config"  &lt;li&gt;Haz clic con el botón derecho sobre dicho item, y...&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;img src="http://img227.imageshack.us/img227/5283/menunowcfconfiguratorhk5.jpg"&gt; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Ahora, selecciona: Menu: "Tools - WCF Service Configurator Editor"&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;img src="http://img249.imageshack.us/img249/8502/wcfserviceconfiguratoresz8.jpg"&gt;&lt;/p&gt; &lt;p&gt;Por último, vuelve a hacer "click" con el botón derecho sobre el item ".config" y........ "taaaaachaaaaannnn....", ahí esta el "tío", :-P&lt;/p&gt; &lt;p&gt;&lt;img src="http://img227.imageshack.us/img227/945/menusiwcfconfiguratorrd5.jpg"&gt; &lt;/p&gt; &lt;p&gt;Pues nada, una vez más, mostrando un camino más fácil, o por lo menos, dando a conocer los tropiezos de un largo recorrido, :-D&lt;/p&gt; &lt;p&gt;Saludos desde Nuevos Ministerios&lt;br&gt;Juanlu&lt;/p&gt;
Crossposting from &lt;a href="http://eljuanlu.blogspot.com"&gt;JuanLu, El Guerre&lt;/a&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=7039" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry><entry><title>Error en Visual Studio 2008. Camino del SP1.</title><link rel="alternate" type="text/html" href="http://blog.avanadeadvisor.com/blogs/elguerre/archive/2007/12/04/6869.aspx" /><id>http://blog.avanadeadvisor.com/blogs/elguerre/archive/2007/12/04/6869.aspx</id><published>2007-12-04T12:25:58Z</published><updated>2007-12-04T12:25:58Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Aquí tenemos, casi seguro uno de los primeros "&lt;strike&gt;errores&lt;/strike&gt;" bug de Visual Studio 2008, se trata de Visual Studio Tools for Office en concreto, si, y además curioso, aunque también tengo que decir, que no por ello voy a dejar de utilizar VS, jejeje... no, no, no...&lt;/p&gt; &lt;p&gt;&lt;img src="http://img106.imageshack.us/img106/1985/myoutlookaddinribbonwc5.jpg"&gt; &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Aquí os dejo los pasos que yo he seguido hasta llegar a este "problemilla":&lt;/p&gt;&lt;/blockquote&gt; &lt;ul&gt; &lt;li&gt;Abrimos Vs2008  &lt;li&gt;Creamos un proyecto para un Addin de Outlook.  &lt;li&gt;Añadimos un Item de tipo Ribbon  &lt;li&gt;Añadimos un nuevo Item de tipo UserControl de XAml (de WPF).  &lt;li&gt;Una vez realizada una compilación, veremos como nuestro control aparece en la Toolbox. De no ser así, añádelo a mano creando un Tab y seleccionando a continuación la DLL que lo contiene.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;img src="http://img106.imageshack.us/img106/6649/toolboxribbonerrorhr0.jpg"&gt; &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Si a continuación arrastramos nuestro UserControl hacia el centro de la ventana en la que se encuentra el Diseñador de Ribbons, Zasssssssss..... No hace falta ni soltarlo, basta con dejar el ratón pulsado unos segundos y, se termina todo, :-D&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;img src="http://img106.imageshack.us/img106/3097/errordragdropribbonszw7.jpg"&gt; &lt;/p&gt; &lt;p&gt;He de añadir que un UserControl.xaml no puede ser hosteado en un Ribbon aunque sí en un un "FormRegion".&amp;nbsp; En cualquier caso es algo digno de mención, ¿no?&lt;/p&gt; &lt;p&gt;Pues ahí lo dejo, por si alguien está interesado en alguna de las nuevas novedades de VS2008, :-D&lt;/p&gt; &lt;p&gt;Saludos desde 3@Cantos&lt;br&gt;Juanlu  
Crossposting from &lt;a href="http://eljuanlu.blogspot.com"&gt;JuanLu, El Guerre&lt;/a&gt;&lt;img src="http://blog.avanadeadvisor.com/aggbug.aspx?PostID=6869" width="1" height="1"&gt;</content><author><name>ElGuerre</name><uri>http://blog.avanadeadvisor.com/members/ElGuerre.aspx</uri></author></entry></feed>