<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://thinkingtogether.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Blog</title><subtitle type="html">Blog donde escribré sobre Biztalk Server 2006, WWF, WCF, Arquitectura, ...</subtitle><id>http://thinkingtogether.net/blogs/sample_weblog/atom.aspx</id><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/default.aspx" /><link rel="self" type="application/atom+xml" href="http://thinkingtogether.net/blogs/sample_weblog/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.61129.2">Community Server</generator><updated>2007-04-09T02:38:00Z</updated><entry><title>MVP de Microsoft por segundo año consecutivo</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2008/07/01/mvp-de-microsoft-por-segundo-a-o-consecutivo.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2008/07/01/mvp-de-microsoft-por-segundo-a-o-consecutivo.aspx</id><published>2008-07-01T17:31:44Z</published><updated>2008-07-01T17:31:44Z</updated><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Acabo de recibir un mail comunic&amp;#225;ndome la renovaci&amp;#243;n del MVP de Biztalk por segundo a&amp;#241;o consecutivo.&lt;/p&gt;  &lt;p&gt;Es una inyecci&amp;#243;n de moral para seguir colaborando con la comunidad y aprendiendo de todos vosotros.&lt;/p&gt;  &lt;p&gt;Saludos.&lt;/p&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=45" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author></entry><entry><title>Poster Interactivo con las capacidades de Biztalk</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2008/06/26/poster-interactivo-con-las-capacidades-de-biztalk.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2008/06/26/poster-interactivo-con-las-capacidades-de-biztalk.aspx</id><published>2008-06-26T07:41:37Z</published><updated>2008-06-26T07:41:37Z</updated><content type="html">&lt;p&gt;Microsoft ha publicado hace tiempo la siguiente p&amp;#225;gina &lt;a title="http://www.microsoft.com/biztalk/capabilities/reader/" href="http://www.microsoft.com/biztalk/capabilities/reader/"&gt;http://www.microsoft.com/biztalk/capabilities/reader/&lt;/a&gt; construida con Silverlight, que permite ir navegando de forma interactiva por un poster con las capacidades de Biztalk Server 2006 R2.&lt;/p&gt;  &lt;p&gt;Si hacemos click en cada funcionalidad del poster se abrir&amp;#225; una ventana explicando dicha capacidad con enlaces al msdn de microsoft por si queremos completar la explicaci&amp;#243;n.&lt;/p&gt;  &lt;p&gt;Saludos.&lt;/p&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=44" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author></entry><entry><title>Como crear un adaptador con WCF LOB Adapter SDK</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2008/06/16/como-crear-un-adaptador-con-wcf-lob-adapter-sdk-22222.aspx" /><link rel="enclosure" type="application/octet-stream" length="61059" href="http://thinkingtogether.net/blogs/sample_weblog/attachment/42.ashx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2008/06/16/como-crear-un-adaptador-con-wcf-lob-adapter-sdk-22222.aspx</id><published>2008-06-16T07:10:00Z</published><updated>2008-06-16T07:10:00Z</updated><content type="html">




&lt;P&gt;He encontrado muy poca información en español sobre el desarrollo de adaptadores con WCF LOB Adapter SDK. Con este post intento poner mi granito de arena para intentar arrojar algo de luz sobre este tema.&lt;/P&gt;
&lt;H4&gt;¿Porqué la necesidad de WCF LOB Adapter SDK?&lt;/H4&gt;
&lt;P&gt;Los adaptadores desarrollados hasta ahora eran dependientes tanto del consumidor como de la aplicación destinataria, es decir un adaptador desarrollado para comunicar Microsoft Biztalk Server con SAP no nos vale para comunicar Sharepoint con SAP.&lt;/P&gt;
&lt;P&gt;WCF LOB Adapter SDK soluciona esta limitación, permitiendo que el adaptador que desarrollemos para obtener información de una aplicación de línea de negocio pueda ser consumido desde Biztalk, desde SQL Server, desde Microsoft Office Sharepoint Server o por ejemplo desde una aplicación .NET personalizada.&lt;/P&gt;
&lt;H4&gt;¿Qué es WCF LOB Adapter SDK?&lt;/H4&gt;
&lt;P&gt;Es un conjunto de herramientas y componentes que nos van a facilitar el desarrollo de adaptadores para aplicaciones de línea de negocio.&lt;/P&gt;
&lt;P&gt;Las principales características de WCF LOB Adapter SDK son las siguientes:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Proporciona un &lt;STRONG&gt;Wizard&lt;/STRONG&gt; que facilita la creación de nuevos adaptadores guiando al desarrollador paso a paso. &lt;/LI&gt;
&lt;LI&gt;Expone el adaptador como si fuera un &lt;STRONG&gt;binding&lt;/STRONG&gt; de WCF. &lt;/LI&gt;
&lt;LI&gt;Proporciona un &lt;STRONG&gt;Add-in&lt;/STRONG&gt; que permite añadir referencias a adaptadores desde aplicaciones .net desarrolladas con Visual Studio 2005. &lt;/LI&gt;
&lt;LI&gt;Crea un contrato dinámicamente en tiempo de diseño. &lt;/LI&gt;&lt;/OL&gt;
&lt;H4&gt;&lt;STRONG&gt;WCF LOB Adapter SDK está basado en el modelo de Canal de WCF.&lt;/STRONG&gt; &lt;/H4&gt;
&lt;P&gt;&lt;IMG src="http://blogs.msdn.com/photos/asdk/images/3587482/original.aspx"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;El modelo de canal de WCF consiste en una pila con uno o varios canales que se encargan de procesar los mensajes que fluyen entre ellos. Es muy parecida a la pila de TCP. &lt;/P&gt;
&lt;P&gt;WCF LOB Adapter SDK utiliza el modelo de extensibilidad de canales exponiendo los adaptadores mediante binding personalizados.&lt;/P&gt;
&lt;H4&gt;Pasos para la creación de un adaptador&lt;/H4&gt;
&lt;P&gt;En la &lt;A href="http://thinkingtogether.net/controlpanel/blogs/url%20http://www.microsoft.com/downloads/details.aspx?FamilyId=0F8007D7-F0C9-4169-8B9C-BA55F8F4C153&amp;amp;displaylang=en" target=_blank&gt;siguiente url&lt;/A&gt; podemos descargarnos el SDK con el Service Pack 1.&lt;/P&gt;
&lt;P&gt;A continuación vamos a empezar a desarrollar un adaptador de que nos permitirá obtener correos mediante el protocolo POP3. Este adaptador lo podremos usar independientemente en aplicación .net o por ejemplo en Microsoft Biztalk sin modificar una sola línea de código.&lt;/P&gt;
&lt;H5&gt;Asistente de creación del adaptador&lt;/H5&gt;
&lt;P&gt;Lo primero que debemos hacer es crear un nuevo proyecto en con &lt;STRONG&gt;Visual Studio 2005&lt;/STRONG&gt; y seleccionar la plantilla &lt;STRONG&gt;WCF LOB Adapter&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://thinkingtogether.net/imagenes/WCFAdapter/ComocrearunadaptadorconWCFLOBAdapterSDK_E5B/image.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height=199 alt=image src="http://thinkingtogether.net/imagenes/WCFAdapter/ComocrearunadaptadorconWCFLOBAdapterSDK_E5B/image_thumb.png" width=542 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Una vez creado el proyecto se lanzará un asistente que nos irá guiando paso paso en la creación del adaptador. &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;En el primer paso debemos definir los siguientes campos: &lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P&gt;&lt;STRONG&gt;Scheme:&lt;/STRONG&gt; esquema usado para el protocolo de transporte del binding del adaptador. Por ejemplo el binding WSHttpBinding usa HTTP como esquema. Nosotros deberemos rellenar esta caja de texto con el valor &lt;STRONG&gt;mail&lt;/STRONG&gt;. &lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P&gt;&lt;STRONG&gt;Project namespace&lt;/STRONG&gt;: todas las clases creadas por el asistente pertenecerá al namespace que pongamos aquí. Nosotros usaremos el namespace &lt;STRONG&gt;ejemplo.adaptadorwcf&lt;/STRONG&gt;. &lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Service namespace&lt;/STRONG&gt;: La concatenación del esquema más el namespace del proyecto dará lugar al namespace del WSDL generado por el adaptador. En nuestro caso el namespace del servicio será &lt;STRONG&gt;mail://ejemplo.adaptadorwcf&lt;/STRONG&gt;. Si quisiéremos modificar el namespace propuesto por el wizard solamente tenemos que marcar la opción &lt;STRONG&gt;Overwrite default service namespace&lt;/STRONG&gt; y modificar el valor por el que deseemos. &lt;/LI&gt;&lt;/UL&gt;&lt;/OL&gt;
&lt;P&gt;&lt;A href="http://thinkingtogether.net/imagenes/WCFAdapter/ComocrearunadaptadorconWCFLOBAdapterSDK_E5B/image_3.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height=408 alt=image src="http://thinkingtogether.net/imagenes/WCFAdapter/ComocrearunadaptadorconWCFLOBAdapterSDK_E5B/image_thumb_3.png" width=412 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; 2.&amp;nbsp; En el siguiente paso debemos definir la dirección del flujo de datos soportado por el adaptador:&lt;/P&gt;
&lt;UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Synchronous outbound&lt;/STRONG&gt;: el adaptador soporta el envío de mensajes al sistema destino. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Asynchronous outbound&lt;/STRONG&gt;: el adaptador soporta el envío de mensajes de forma asíncrona al sistema destino. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Synchronous inbound&lt;/STRONG&gt;: el cliente recibe información del sistema destino vía adaptador. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;Asynchronous inbound&lt;/B&gt;: el adaptador soporta la recepción de mensajes del sistema destino de forma asíncrona. &lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Además debemos definir las opciones de metadatos soportada por el adatador:&lt;/P&gt;
&lt;UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Retrieval&lt;/STRONG&gt;: Genera la definición de las operaciones y tipos complejos del sistema destino. Esta información será utilizada por el adaptador para la generación del contrato del servicio. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Browse&lt;/STRONG&gt;: Permite que el usuario navegue de forma jerárquica por los metadatos del sistema destino para seleccionar las operaciones que desea invocar. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Search&lt;/STRONG&gt;:Permite que el usuario realice una búsqueda en los metadatos del sistema destino para seleccionar las operaciones que desea invocar. &lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://thinkingtogether.net/imagenes/WCFAdapter/ComocrearunadaptadorconWCFLOBAdapterSDK_E5B/image_4.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height=414 alt=image src="http://thinkingtogether.net/imagenes/WCFAdapter/ComocrearunadaptadorconWCFLOBAdapterSDK_E5B/image_thumb_4.png" width=416 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.&amp;nbsp; En el siguiente paso debemos definir las propiedades del adaptador:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; En nuestro caso no definiremos nada aquí.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.&amp;nbsp; En el siguiente paso debemos definir las propiedades de conexión con el sistema destino:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://thinkingtogether.net/imagenes/WCFAdapter/ComocrearunadaptadorconWCFLOBAdapterSDK_E5B/image_5.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height=413 alt=image src="http://thinkingtogether.net/imagenes/WCFAdapter/ComocrearunadaptadorconWCFLOBAdapterSDK_E5B/image_thumb_5.png" width=416 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Las propiedades necesarias para la conexión son el servidor, el usuario y el password. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;La gestión de credenciales utilizada en este ejemplo no es ni mucho menos la ideal, ya que se muestra el usuario y el password en texto plano en la URI. Os invito a que modifiquéis el adaptador para dar una solución mas eficiente y segura a la gestión de credenciales.&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Finalmente se mostrará un resumen de la configuración del adaptador que hemos ido estableciendo en los pasos precedentes. Si estamos conformes pulsaremos en el botón Finish para que el Wizard cree las clases necesarias para implementar el adaptador.&lt;/P&gt;
&lt;H5&gt;Gestión de la conexión con el sistema destino&lt;/H5&gt;
&lt;P&gt;El adaptador crea por nosotros el esqueleto de las clases necesarias para poder gestionar la conexión con el sistema destino.&lt;/P&gt;
&lt;P&gt;La clase &lt;STRONG&gt;Pop3AdapterConnectionUri.cs&lt;/STRONG&gt; es la encargada de parsear y construir la cadena de conexión de la aplicación de línea de negocio destino.&lt;/P&gt;
&lt;P&gt;El desarrollador del adaptador usará esta clase para parsear la URI de conexión proporcionada por el cliente y extraer de ella todos los parámetros de conexión necesarios.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;override&lt;/SPAN&gt; Uri Uri
{
   get
   {
      	&lt;SPAN class=rem&gt;//Validación de las propiedades de conexión&lt;/SPAN&gt;
      	&lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (Servidor == &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;.Empty)
      	{
           &lt;SPAN class=kwrd&gt;throw&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; InvalidUriException(&lt;SPAN class=str&gt;"Parámetro Servidor no válido"&lt;/SPAN&gt;);
      	}
      	&lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (Usuario == &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;.Empty)
      	{
           &lt;SPAN class=kwrd&gt;throw&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; InvalidUriException(&lt;SPAN class=str&gt;"Parámetro Usuario no válido"&lt;/SPAN&gt;);
	}
       &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (Password== &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;.Empty)
       {
       	    &lt;SPAN class=kwrd&gt;throw&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; InvalidUriException(&lt;SPAN class=str&gt;"Parámetro Password no válido"&lt;/SPAN&gt;);
       }

       &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Uri(Pop3Adapter.SCHEME + &lt;SPAN class=str&gt;"://"&lt;/SPAN&gt; +
                      Servidor + &lt;SPAN class=str&gt;"/"&lt;/SPAN&gt; + Usuario + &lt;SPAN class=str&gt;"/"&lt;/SPAN&gt; + Password);
                                        &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;   }
   set
   {
      &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;[] datosUri = &lt;SPAN class=kwrd&gt;value&lt;/SPAN&gt;.AbsoluteUri.Split(&lt;SPAN class=str&gt;'/'&lt;/SPAN&gt;);
                Servidor = datosUri[2];
                Usuario = datosUri[3];
                Password = datosUri[4];
               
   }
}&lt;/PRE&gt;
&lt;P&gt;La clase &lt;STRONG&gt;Pop3AdapterConnectionFactory.cs&lt;/STRONG&gt; es la responsable de definir y crear la conexión con el sistema destino. &lt;/P&gt;
&lt;P&gt;Para ello debemos modificar el método &lt;STRONG&gt;CreateConnection&lt;/STRONG&gt; para que devuelva un objeto de conexión con el servidor de correo.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; IConnection CreateConnection()
{
  &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pop3AdapterConnection(conexionUri.Usuario,conexionUri.Password,&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;					conexionUri.Servidor, &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;);
}&lt;/PRE&gt;
&lt;P&gt;El constructor de la clase Pop3AdapterConnectionFactory pasa en uno de los parámetros un objeto de tipo &lt;STRONG&gt;ConnectionUri&lt;/STRONG&gt; con la información de conexión con el sistema destino. El problema es que el &lt;STRONG&gt;wizard&lt;/STRONG&gt; no asigna ese objeto a ninguna propiedad de la clase con lo cual se pierde la información. Para solucionar este problema debemos declarar una variable privada llamada &lt;STRONG&gt;conexionUri&lt;/STRONG&gt; y modificar el constructor de la clase para asignar a esta propiedad la información de conexión.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; Pop3AdapterConnectionFactory(ConnectionUri connectionUri
            , ClientCredentials clientCredentials
            , Pop3Adapter adapter)
{
    &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.clientCredentials = clientCredentials;
    &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.adapter = adapter;
    &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.conexionUri = (Pop3AdapterConnectionUri)connectionUri;
}&lt;/PRE&gt;
&lt;P&gt;Por último la clase &lt;STRONG&gt;Pop3AdapterConnection.cs&lt;/STRONG&gt; es la encargada de realizar las llamadas a bajo nivel para gestionar la conexión con el sistema destino.&lt;/P&gt;
&lt;P&gt;Debemos modificar el constructor de la clase para inicializar el objeto de conexión con el servidor de correo. La clase Pop3 es una clase gratuita obtenida de la web Codeproject en la url &lt;A title=http://www.codeproject.com/KB/IP/despop3client.aspx href="http://www.codeproject.com/KB/IP/despop3client.aspx" target=_blank&gt;http://www.codeproject.com/KB/IP/despop3client.aspx&lt;/A&gt; que emplearemos para obtener los mail del servidor de correo.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; Pop3AdapterConnection(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; Usuario,&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; Password, &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; Servidor, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;				Pop3AdapterConnectionFactory connectionFactory)
{
    &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.connectionFactory = connectionFactory;
    &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.connectionId = Guid.NewGuid().ToString();
    objConexionPop3 = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pop3.Pop3Client(Usuario,Password,Servidor);
}&lt;/PRE&gt;
&lt;P&gt;Debemos modificar los métodos que se encargan de abrir y cerrar la conexión:&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; Close(TimeSpan timeout)
{
    objConexionPop3.CloseConnection();
}

 &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;bool&lt;/SPAN&gt; IsValid(TimeSpan timeout)
{
    &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;;
}
 &lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; Open(TimeSpan timeout)
{
    objConexionPop3.OpenInbox();
}&lt;/PRE&gt;
&lt;H5&gt;Gestión de metadatos&lt;/H5&gt;
&lt;P&gt;La clase &lt;STRONG&gt;Pop3AdapterMetadataBrowseHandler.cs&lt;/STRONG&gt; se encargará de mostrar de forma jerárquica las categorías y operaciones de la aplicación de línea de negocio al consumidor para que este seleccione las operaciones que desea invocar.&lt;/P&gt;
&lt;P&gt;Debemos implementar el método &lt;STRONG&gt;Browse&lt;/STRONG&gt; de esta clase para mostrar la operación de Monitorización de correo al consumidor.&lt;/P&gt;
&lt;P&gt;Como podemos ver en el siguiente código, este método devuelve cada una de las operaciones y categorías del sistema destino como una lista de objetos de tipo &lt;STRONG&gt;MetadataRetrievalNode.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; MetadataRetrievalNode[] Browse(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; nodeId
            , &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; childStartIndex
            , &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; maxChildNodes, TimeSpan timeout)
{
	List&amp;lt;MetadataRetrievalNode&amp;gt; lista = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; List&amp;lt;MetadataRetrievalNode&amp;gt;();
       &lt;SPAN class=rem&gt;//Nodo raiz&lt;/SPAN&gt;
       &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (MetadataRetrievalNode.Root.NodeId.Equals(nodeId))
       {

          MetadataRetrievalNode nodo = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; MetadataRetrievalNode(&lt;SPAN class=str&gt;"Operaciones"&lt;/SPAN&gt;);
          nodo.Direction = MetadataRetrievalNodeDirections.Inbound;
          nodo.DisplayName = &lt;SPAN class=str&gt;"Operaciones"&lt;/SPAN&gt;;
          nodo.IsOperation = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;
          &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; MetadataRetrievalNode[] { nodo };
       }
       &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt;
       {
          MetadataRetrievalNode nodoInbound = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; MetadataRetrievalNode(&lt;SPAN class=str&gt;"MonitorizacionCorreo"&lt;/SPAN&gt;);
          nodoInbound.DisplayName = &lt;SPAN class=str&gt;"MonitorizacionCorreo"&lt;/SPAN&gt;;
          nodoInbound.IsOperation = &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;;
          nodoInbound.Direction = MetadataRetrievalNodeDirections.Inbound;
          lista.Add(nodoInbound);

          &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; lista.ToArray();
       }
}&lt;/PRE&gt;
&lt;P&gt;La clase &lt;STRONG&gt;Pop3AdapterMetadataSearchHandler.cs&lt;/STRONG&gt; nos permite buscar operaciones en la aplicación de línea de negocio para su posterior invocación. &lt;/P&gt;
&lt;P&gt;El usuario introducirá un criterio de búsqueda en el asistente del adaptador y el método &lt;STRONG&gt;Search&lt;/STRONG&gt; de la clase &lt;STRONG&gt;Pop3AdapterMetadataSearchHandler.cs&lt;/STRONG&gt; se encargará de realizar la búsqueda de metadatos en el sistema destino utilizando dicho criterio.&lt;/P&gt;
&lt;P&gt;La implementación del método &lt;STRONG&gt;Search&lt;/STRONG&gt; es muy similar al del método &lt;STRONG&gt;Browse&lt;/STRONG&gt;. El método debe devolver como resultado una lista de objetos de tipo &lt;STRONG&gt;MetadataRetrievalNode&lt;/STRONG&gt; que el adaptador usará para mostrar las operaciones encontradas al usuario para su posterior consumo. &lt;/P&gt;
&lt;P&gt;En este caso concreto comparamos el criterio de búsqueda introducido por el usuario con la palabra &lt;STRONG&gt;"monitorizacioncorreo"&lt;/STRONG&gt; devolviendo, si hay coincidencia, una lista con un nodo que contendrá la operación &lt;STRONG&gt;MonitorizacionCorreo&lt;/STRONG&gt;. &lt;/P&gt;
&lt;P&gt;Este es el caso mas simple que nos podemos encontrar, lo ideal es permitir al usuario que introduzca caracteres comodín para que la búsqueda sea mas sencilla para el.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; MetadataRetrievalNode[] Search(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; nodeId
		, &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; searchCriteria
            	, &lt;SPAN class=kwrd&gt;int&lt;/SPAN&gt; maxChildNodes, TimeSpan timeout)
{
	List&amp;lt;MetadataRetrievalNode&amp;gt; lista = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; List&amp;lt;MetadataRetrievalNode&amp;gt;();
       
       &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (searchCriteria.ToLower() == &lt;SPAN class=str&gt;"monitorizacioncorreo"&lt;/SPAN&gt;)
       {
          MetadataRetrievalNode nodoInbound = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; MetadataRetrievalNode(&lt;SPAN class=str&gt;"MonitorizacionCorreo"&lt;/SPAN&gt;);
          nodoInbound.DisplayName = &lt;SPAN class=str&gt;"MonitorizacionCorreo"&lt;/SPAN&gt;;
          nodoInbound.IsOperation = &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;;
          nodoInbound.Direction = MetadataRetrievalNodeDirections.Inbound;
          lista.Add(nodoInbound);
       }
       &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; lista.ToArray();&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;}&lt;/PRE&gt;
&lt;P&gt;La clase &lt;STRONG&gt;Pop3AdapterMetadataResolverHandler.cs&lt;/STRONG&gt; es la encargada de obtener la definición de las operaciones y tipos complejos de estas operaciones, para que el adaptador pueda generar en base a esta información el contrato del servicio.&lt;/P&gt;
&lt;P&gt;Esta clase tiene dos métodos que debemos desarrollar:&lt;/P&gt;
&lt;UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ResolveOperationMetadata&lt;/STRONG&gt;: este método es el responsable de obtener los metadatos que representan las operaciones ofrecidas por el sistema destino. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;ResolveTypeMetadata&lt;/STRONG&gt;: este método es el responsable de obtener los metadatos de los tipos complejos usados por el sistema destino. &lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;En el método &lt;STRONG&gt;ResolveOperationMetadata&lt;/STRONG&gt; vamos a crear un objeto de tipo &lt;STRONG&gt;ParameterizedOperationMetadata&lt;/STRONG&gt; que va a contener la definición de la operación.&lt;/P&gt;
&lt;P&gt;Una vez creado el objeto que contiene la operación, vamos a ir añadiendo a la colección &lt;STRONG&gt;Parameters&lt;/STRONG&gt; de este cada uno de los parámetros del la operación.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; OperationMetadata ResolveOperationMetadata(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; operationId, TimeSpan timeout, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;					&lt;SPAN class=kwrd&gt;out&lt;/SPAN&gt; TypeMetadataCollection extraTypeMetadataResolved)
{
  extraTypeMetadataResolved = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;

  &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; nombreOperacion = &lt;SPAN class=str&gt;"MonitorizacionCorreo"&lt;/SPAN&gt;;
  ParameterizedOperationMetadata operationMetadata = &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;		&lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; ParameterizedOperationMetadata(operationId, nombreOperacion);&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;  operationMetadata.DisplayName = &lt;SPAN class=str&gt;"RecibirNuevoCorreo"&lt;/SPAN&gt;;
  operationMetadata.OriginalName = &lt;SPAN class=str&gt;"Evento_RecibirNuevoCorreo"&lt;/SPAN&gt;;

  OperationParameter asuntoCorreo = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; OperationParameter(&lt;SPAN class=str&gt;"asuntoCorreo"&lt;/SPAN&gt;, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;			OperationParameterDirection.In, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;			QualifiedType.StringType, &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;);
  asuntoCorreo.Description = &lt;SPAN class=str&gt;"Asunto del correo"&lt;/SPAN&gt;;
  operationMetadata.Parameters.Add(asuntoCorreo);

  OperationParameter cuerpoCorreo = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; OperationParameter(&lt;SPAN class=str&gt;"cuerpoCorreo"&lt;/SPAN&gt;, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;					OperationParameterDirection.In, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;					QualifiedType.StringType, &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;);
  asuntoCorreo.Description = &lt;SPAN class=str&gt;"Contenido del correo"&lt;/SPAN&gt;;
  operationMetadata.Parameters.Add(cuerpoCorreo);

  OperationParameter remitente = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; OperationParameter(&lt;SPAN class=str&gt;"remitente"&lt;/SPAN&gt;, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;					OperationParameterDirection.In, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;					QualifiedType.StringType, &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;);
  asuntoCorreo.Description = &lt;SPAN class=str&gt;"Remitente del correo"&lt;/SPAN&gt;;
  operationMetadata.Parameters.Add(remitente);

  OperationParameter destinatario = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; OperationParameter(&lt;SPAN class=str&gt;"destinatario"&lt;/SPAN&gt;, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;					 OperationParameterDirection.In, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;					 QualifiedType.StringType, &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;);
  asuntoCorreo.Description = &lt;SPAN class=str&gt;"Destinatario del correo"&lt;/SPAN&gt;;
  operationMetadata.Parameters.Add(destinatario);


  operationMetadata.OperationResult = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;
  &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; operationMetadata;
}&lt;/PRE&gt;
&lt;P&gt;En nuestro caso no tenemos ningún tipo complejo por lo tanto no implementaremos el método &lt;STRONG&gt;ResolveTypeMetadata&lt;/STRONG&gt;.&lt;/P&gt;
&lt;H5&gt;Ejecución de las operaciones&lt;/H5&gt;
&lt;P&gt;Ya por último solo nos queda añadir la lógica que monitorizará el correo y enviará los mensajes obtenidos al consumidor del adaptador.&lt;/P&gt;
&lt;P&gt;Para ello vamos a implementar los siguientes métodos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;B&gt;StartListener&lt;/B&gt;: lógica de escucha de mensajes asociados a una operación en concreto (&lt;B&gt;action&lt;/B&gt;). &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;StopListener&lt;/B&gt;: fin de la escucha de mensajes. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;TryReceive&lt;/B&gt;: intenta recibir un mensaje de entrada de la aplicación de negocio destino. Este método devuelve un valor booleano indicando si se ha podido obtener el mensaje del sistema destino o no. &lt;/LI&gt;
&lt;LI&gt;&lt;B&gt;WaitForMessage&lt;/B&gt;: espera un mensaje de entrada de la aplicación de negocio destino. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;En el método &lt;STRONG&gt;StartListener&lt;/STRONG&gt; crearemos una cola de mensajes que contendrán todos los mails del servidor de correo pendientes de notificar al consumidor.&lt;/P&gt;
&lt;P&gt;Para monitorizar el servidor de correo vamos a crear un timer que cada 10 segundos compruebe los mails que hay.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; StartListener(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt;[] actions, TimeSpan timeout)
{
       colaMensajesEntrada = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Queue&amp;lt;Message&amp;gt;();
       &lt;SPAN class=kwrd&gt;foreach&lt;/SPAN&gt; (&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; action &lt;SPAN class=kwrd&gt;in&lt;/SPAN&gt; actions)
       {
          &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (&lt;SPAN class=str&gt;"MonitorizacionCorreo"&lt;/SPAN&gt;.Equals(action))
          {
             delegado = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; TimerCallback(Monitoriza);
             objThread = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Timer(delegado, &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;, 1000, 10000);
          }
       }
}&lt;/PRE&gt;
&lt;P&gt;En el método &lt;STRONG&gt;StopListener&lt;/STRONG&gt; pararemos la monitorización del servidor de correo.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; StopListener(TimeSpan timeout)
{
	objThread.Dispose();
}&lt;/PRE&gt;
&lt;P&gt;En el método &lt;STRONG&gt;TryReceive&lt;/STRONG&gt; comprobaremos si la cola de mensajes tiene algún correo pendiente de notificar al consumidor del adaptador. La notificación la realizaremos mediante el parámetro de salida &lt;STRONG&gt;message&lt;/STRONG&gt; que tiene el propio método. Además debemos de devolver como resultado de la función &lt;STRONG&gt;true&lt;/STRONG&gt; en el caso que estemos devolviendo un mensaje o &lt;STRONG&gt;false&lt;/STRONG&gt; si no tenemos nada pendiente que notificar del sistema destino.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;bool&lt;/SPAN&gt; TryReceive(TimeSpan timeout, &lt;SPAN class=kwrd&gt;out&lt;/SPAN&gt; System.ServiceModel.Channels.Message message, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;			&lt;SPAN class=kwrd&gt;out&lt;/SPAN&gt; IInboundReply reply)&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;{
       reply = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; Pop3AdapterInboundReply();
       message = &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;;

       &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (colaMensajesEntrada.Count != 0)
       {
          message = colaMensajesEntrada.Dequeue();
          &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (message != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
          {
              &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;;
          }
        }
        &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;
}&lt;/PRE&gt;
&lt;P&gt;El método encargado de monitorizar la entrada de nuevos correos obtendrá la conexión del servidor de correo de las propiedades del adaptador e irá encolando cada uno de los mensajes que reciba.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; Monitoriza(Object stateInfo)
{
&lt;SPAN class=kwrd&gt;  int&lt;/SPAN&gt; contadorMail=0;
  Pop3Client email = &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.Connection.Conexion;
  &lt;SPAN class=kwrd&gt;while&lt;/SPAN&gt; (email.NextEmail(contadorMail))
  {
     &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; asuntoCorreo = email.Subject;
     &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; cuerpoCorreo = email.Body;
     &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; remitente = email.From;
     &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; destinatario = email.To;

     Message msg = CrearMensajeRecepcionPedido(asuntoCorreo,cuerpoCorreo,remitente,destinatario);
     colaMensajesEntrada.Enqueue(msg);
     contadorMail++;
  }
            
}&lt;/PRE&gt;
&lt;P&gt;El mensaje que debemos enviar al consumidor del adaptador para notificarle de la llegada de nuevos correos debe cumplir un formato concreto.&lt;/P&gt;
&lt;P&gt;En el siguiente método podemos ver como transformar la información obtenida del servidor de correo en un formato que podamos enviar al consumidor a través del adaptador.&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; Message CrearMensajeRecepcionPedido(&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; asuntoCorreo, &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; cuerpoCorreo, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;					&lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; remitente, &lt;SPAN class=kwrd&gt;string&lt;/SPAN&gt; destinatario)
{&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;  Pop3Adapter adapter = &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.Connection.ConnectionFactory.Adapter;

  String xmlData = String.Format(&lt;SPAN class=str&gt;@"&amp;lt;RecibirNuevoCorreo xmlns="&lt;/SPAN&gt;&lt;SPAN class=str&gt;"{0}"&lt;/SPAN&gt;&lt;SPAN class=str&gt;"&amp;gt;&amp;lt;asuntoCorreo&amp;gt;"&lt;/SPAN&gt; + asuntoCorreo &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;  + &lt;SPAN class=str&gt;"&amp;lt;/asuntoCorreo&amp;gt;&amp;lt;cuerpoCorreo&amp;gt;"&lt;/SPAN&gt; + cuerpoCorreo + &lt;SPAN class=str&gt;"&amp;lt;/cuerpoCorreo&amp;gt;&amp;lt;remitente&amp;gt;"&lt;/SPAN&gt; + remitente &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;  + &lt;SPAN class=str&gt;"&amp;lt;/remitente&amp;gt;&amp;lt;destinatario&amp;gt;"&lt;/SPAN&gt; + destinatario &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;  + &lt;SPAN class=str&gt;"&amp;lt;/destinatario&amp;gt;&amp;lt;/RecibirNuevoCorreo&amp;gt;"&lt;/SPAN&gt;, adapter.ServiceNamespace);&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;  XmlReader reader = XmlReader.Create(&lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; StringReader(xmlData));

  Message msgResultado = Message.CreateMessage(MessageVersion.Default, &lt;/PRE&gt;&lt;PRE class=csharpcode&gt;                          &lt;SPAN class=str&gt;"MonitorizacionCorreo"&lt;/SPAN&gt;, reader);
  &lt;SPAN class=kwrd&gt;return&lt;/SPAN&gt; msgResultado;
}&lt;/PRE&gt;
&lt;H5&gt;Despliegue del adaptador&lt;/H5&gt;
&lt;P&gt;Una vez desarrollado el adaptador, debemos firmarlo con un strong name y subirlo al Global Assembly Cache. Debemos copiar la clave pública del assembly una vez que lo hayamos subido al GAC ya que lo necesitaremos luego para registrar el adaptador en el fichero de configuración.&lt;/P&gt;
&lt;P&gt;El adaptador lo podremos registrar tanto en el &lt;STRONG&gt;machine.config&lt;/STRONG&gt; en el caso que queramos que el adaptador esté disponible para todos los proyectos de la máquina, o lo podemos registrar en el fichero de configuración del proyecto donde vayamos a consumir el adaptador.&lt;/P&gt;
&lt;P&gt;Nosotros en este ejemplo vamos a registrarlo en el &lt;STRONG&gt;machine.config&lt;/STRONG&gt; para que esté accesible desde todos los proyectos.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Vamos a registrar el adaptador como un elemento de binding. Para ello en la sección&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&amp;lt;system.serviceModel&amp;gt;&amp;lt;extensions&amp;gt;&lt;B&gt;&amp;lt;bindingElementExtensions&amp;gt;&lt;/B&gt;&lt;/STRONG&gt; añadiremos el &lt;/LI&gt;&lt;/UL&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;siguiente xml:&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;add&lt;/SPAN&gt; &lt;SPAN class=attr&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="AdapterPOP3"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;type&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="ejemplo.adaptadorwcf.Pop3AdapterBindingElementExtensionElement,&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;Pop3Adapter, Version=1.0.0.0, &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;Culture=neutral, PublicKeyToken=447f918ac099d73e"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;También podemos registrar el adaptador como un binding. Para ello añadiremos el siguiente XML en la sección&amp;nbsp; &lt;STRONG&gt;&amp;lt;system.serviceModel&amp;gt;&amp;lt;extensions&amp;gt;&lt;/STRONG&gt;&lt;B&gt;&amp;lt;bindingExtensions&amp;gt;.&lt;/B&gt;: &lt;/LI&gt;&lt;/UL&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;add&lt;/SPAN&gt; &lt;SPAN class=attr&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="AdapterPOP3Binding"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;type&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="ejemplo.adaptadorwcf.Pop3AdapterBindingCollectionElement,&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;Pop3Adapter, Version=1.0.0.0, &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;Culture=neutral, PublicKeyToken=447f918ac099d73e"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;Una vez registrado el adaptador ya podemos utilizarlo en un endpoint de cliente. Para ello en la sección &lt;STRONG&gt;&amp;lt;system.serviceModel&amp;gt;&amp;lt;client&amp;gt;&lt;/STRONG&gt; vamos a añadir el siguiente XML:&lt;/P&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN class=html&gt;endpoint&lt;/SPAN&gt; &lt;SPAN class=attr&gt;binding&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="AdapterPOP3Binding"&lt;/SPAN&gt; &lt;SPAN class=attr&gt;contract&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="IMetadataExchange"&lt;/SPAN&gt;
        &lt;SPAN class=attr&gt;name&lt;/SPAN&gt;&lt;SPAN class=kwrd&gt;="AdaptadorPOP3"&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;/&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;Debemos asegurarnos que el nombre del binding que pongamos en el endpoint sea el mismo que hayamos utilizado al registrar el binding.&lt;/P&gt;
&lt;P&gt;En los próximos días publicaré un post indicando como consumir este adaptador desde una aplicación .NET.&lt;/P&gt;
&lt;P&gt;Adjunto un archivo con el código fuente para que os quede un poco mas claro la implementación del adaptador. Solamente decir que este código ha sido implementado para servir de apoyo al post y en ningún momento está optimizado ni ha sido pensado para poder utilizarse en un entorno real.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=42" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author><category term="WCF" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/WCF/default.aspx" /><category term="WCF LOB Adapter SDK" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/WCF+LOB+Adapter+SDK/default.aspx" /></entry><entry><title>Proyecto Fjord: Biztalk Mapper + Surface</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2008/04/28/proyecto-fjord-biztalk-mapper-surface.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2008/04/28/proyecto-fjord-biztalk-mapper-surface.aspx</id><published>2008-04-28T19:21:00Z</published><updated>2008-04-28T19:21:00Z</updated><content type="html">&lt;P&gt;En el &lt;A class="" title=blog href="http://timrayburn.net/2007/11/29/ProjectFjordBizTalkMapperToRequireSurfaceInOslo.aspx" target=_blank&gt;blog&lt;/A&gt; de Tim Rayburn aparece una noticia cuanto menos interesante.&lt;/P&gt;
&lt;P&gt;Nos cuenta la integración de Biztalk Mapper y Surface. No dejéis de leer el post de Tim porque no tiene desperdicio.&lt;/P&gt;
&lt;P&gt;Esperaremos noticias nuevas.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=36" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author><category term="Oslo" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/Oslo/default.aspx" /></entry><entry><title>Biztalk Server 2006 R3</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2008/04/23/biztalk-server-2006-r3.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2008/04/23/biztalk-server-2006-r3.aspx</id><published>2008-04-23T09:15:00Z</published><updated>2008-04-23T09:15:00Z</updated><content type="html">&lt;P&gt;Como siempre Biztalk se adapta a la nueva oleada de cambios tecnológicos y nuevos productos que han ido saliendo estos último meses. &lt;/P&gt;
&lt;P&gt;Como en su día se adaptó a Visual Studio 2005 y a SQL Server 2005, Microsoft adaptará Biztalk Server a Windows Server 2008, Sql Server 2008 y .NET Framework 3.5.&lt;/P&gt;
&lt;P&gt;El nombre de la release será Biztalk Server 2006 R3. Se espera una CTP para verano de este año y una versión RTM para el principios del año 2009.&lt;/P&gt;
&lt;P&gt;Algunas de las novedades que traerá el produto son las siguientes:&lt;/P&gt;
&lt;UL style="MARGIN-TOP:0cm;"&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN-US;"&gt;Nuevas capacidades de registro de web service con soporte para UDDI (Universal Description Discovery and Integration) version 3.0 &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN-US;"&gt;Nuevos adaptadores mejorados para aplicaciones LOB, bases de datos, ...&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN-US;"&gt;Soporte de conectividad e interoperabilidad mejorada&amp;nbsp;para protocolos de la industria (SWIFT, EDI, etc)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI class=MsoNormal style="MARGIN:0cm 0cm 0pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="FONT-SIZE:11pt;FONT-FAMILY:'Calibri','sans-serif';mso-fareast-font-family:'Times New Roman';mso-ansi-language:EN-US;"&gt;Patrones SOA y guía de best practices para asistir a implementaciones de clientes&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=35" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author><category term="Biztalk Server 2006 R3" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/Biztalk+Server+2006+R3/default.aspx" /></entry><entry><title>Desde Redmon</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2008/04/15/desde-redmon.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2008/04/15/desde-redmon.aspx</id><published>2008-04-15T20:21:00Z</published><updated>2008-04-15T20:21:00Z</updated><content type="html">&lt;P&gt;Desde el sábado 12 estámos algunos MVPs en Seattle para asistir al MVP submit. Reunión donde los MVPs damos feedback al grupo de producto y estos a su vez nos presentan las novedades que incorporarán las&amp;nbsp;siguientes versiones de los productos sobre los que somos MVPs.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;En mi caso estoy asistiendo a las charlas que da el grupo de Connected System sobre Biztalk Server, OSLO y demás cosas que no puedo contar :). Es un espectáculo ver a DON BOX dar una charla.&lt;/P&gt;
&lt;P&gt;En esta ocasión nos ha dadio tiempo a hacer algo de turismo por Seattle así como a hacer algunas compras :) (hay que aprovechar el cambio al dolar).&lt;/P&gt;
&lt;P&gt;Recomiendo a todo el que se acerque por aquí que no deje de ver la fábrica de Boeing, es una auténtica pasada ver como construyen los aviones en situ.&lt;/P&gt;
&lt;P&gt;Otro espectáculo que la gente no se puede perder es un partido de la NBA. Es&amp;nbsp;puro espectáculo desde que empieza hasta que termina. &lt;/P&gt;
&lt;P&gt;PD: Para mi gusto salen demasiado poco las Cheerleaders&amp;nbsp; :).&lt;/P&gt;
&lt;P&gt;Seguiremos contando.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=34" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author></entry><entry><title>Microsoft TechDays</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2008/02/25/microsoft-techdays.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2008/02/25/microsoft-techdays.aspx</id><published>2008-02-25T11:32:00Z</published><updated>2008-02-25T11:32:00Z</updated><content type="html">&lt;P&gt;Buenas, llevo unos meses en el puesto de responsable de preventa de mi empresa y no me ha dejado mucho tiempo para escribir en el blog.&lt;/P&gt;
&lt;P&gt;Tengo algún artículo pendiente de escribir que espero poderlos tener finalizado en breve ( WCF Adapter SDK, WF Services,..).&lt;/P&gt;
&lt;P&gt;El martes 26 y miércoles 27 de Febrero es la presentación de Windows Server 2008, SQL Server 2008 y Visual Studio 2008. Habrá Tracks de lo mas variados desde presentaciones de introducción a productos y tecnologías hasta presentaciones en profundidad.&lt;/P&gt;
&lt;P&gt;Os recomiendo mi charla &lt;STRONG&gt;Workflow Services&lt;/STRONG&gt; &lt;STRONG&gt;en produndidad&lt;/STRONG&gt; la cual tendrá lugar el día 26 a las 18:00 en la Sala Madrid.&lt;/P&gt;
&lt;P&gt;En esta charla veremos que novedades tenemos en .net 3.5 con respecto a la integración de WCF y WF.&lt;/P&gt;
&lt;P&gt;Nos vemos.&lt;/P&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=33" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author><category term="Eventos" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/Eventos/default.aspx" /></entry><entry><title>SOA Conference 2007</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2007/11/23/soa-conference-2007.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2007/11/23/soa-conference-2007.aspx</id><published>2007-11-23T19:46:00Z</published><updated>2007-11-23T19:46:00Z</updated><content type="html">&lt;SPAN&gt;&lt;FONT face=Arial size=2&gt;
&lt;P class=MsoPlainText style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Consolas size=3&gt;Hay una conferencia sobre SOA el día 4 de diciembre en madrid.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN:0cm 0cm 0pt;" align=left&gt;&lt;FONT face=Consolas size=3&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN:0cm 0cm 0pt;" align=left&gt;&lt;FONT face=Consolas size=3&gt;Se contarán las novedades de Biztalk Server 2006 R2,&amp;nbsp;roadmap de futuro "OSLO",&amp;nbsp;charlas sobre Adaptadores de Biztalk para WCF, Conectando aplicaciones de negocio con Biztalk Adapter Pack, etc.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN:0cm 0cm 0pt;" align=left&gt;&lt;FONT face=Consolas size=3&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN:0cm 0cm 0pt;" align=left&gt;&lt;FONT face=Consolas size=3&gt;Espero veros por alli.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Consolas size=3&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Consolas&gt;http://www.microsoft.com/spain/sunegocioconectado/&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Consolas size=3&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoPlainText style="MARGIN:0cm 0cm 0pt;"&gt;&lt;FONT face=Consolas size=3&gt;Un saludo.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=31" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author><category term="Eventos" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/Eventos/default.aspx" /></entry><entry><title>Biztalk Server 2006 R2 disponible</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2007/09/28/biztalk-server-2006-r2-disponible.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2007/09/28/biztalk-server-2006-r2-disponible.aspx</id><published>2007-09-28T11:52:34Z</published><updated>2007-09-28T11:52:34Z</updated><content type="html">&lt;p&gt;Ya est&amp;#xE1; disponible la descarga via MSDN de Biztalk Server 2006 R2.&lt;/p&gt;  &lt;p&gt;Para todos aquellos que quieran saber las novedades que trae esta release: &lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.microsoft.com/biztalk/evaluation/default.mspx" href="http://www.microsoft.com/biztalk/evaluation/default.mspx"&gt;http://www.microsoft.com/biztalk/evaluation/default.mspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Un saludo.&lt;/p&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=29" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author><category term="Biztalk Server 2006 R2" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/Biztalk+Server+2006+R2/default.aspx" /></entry><entry><title>Compatibilidad de BizTalk Server 2006 y BizTalk Server 2004 en un equipo virtual</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2007/07/03/compatibilidad-de-biztalk-server-2006-y-biztalk-server-2004-en-un-equipo-virtual.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2007/07/03/compatibilidad-de-biztalk-server-2006-y-biztalk-server-2004-en-un-equipo-virtual.aspx</id><published>2007-07-03T21:29:00Z</published><updated>2007-07-03T21:29:00Z</updated><content type="html">&lt;P&gt;Buscando información sobre soporte de instalación de Biztalk en máquinas virtuales me he encontrado el siguiente artículo de microsoft &lt;A class="" href="http://support.microsoft.com/kb/842301/es" target=_blank&gt;http://support.microsoft.com/kb/842301/es&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Leyendo el artículo vemos que Biztalk Server 2004 y 2006 están soportados completamente cuando son instalados en un sistema operativo soportado corriendo sobre Microsoft Virtual Server 2005.&lt;/P&gt;
&lt;P&gt;Un saludo.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=24" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author><category term="Biztalk Server 2006" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/Biztalk+Server+2006/default.aspx" /></entry><entry><title>Ya soy MVP</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2007/07/03/ya-soy-mvp.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2007/07/03/ya-soy-mvp.aspx</id><published>2007-07-03T08:05:00Z</published><updated>2007-07-03T08:05:00Z</updated><content type="html">&lt;P&gt;El lunes por la mañana cuando&amp;nbsp;voy a leer el correo me encuentro con la grata noticia que me han nombrado MVP de Biztalk.&lt;/P&gt;
&lt;P&gt;Simplemente agredecer&amp;nbsp;tanto a&amp;nbsp;&lt;A class="" href="http://blogs.msdn.com/cesardelatorre/" target=_blank&gt;Cesar de la Torre&lt;/A&gt;&amp;nbsp; como a Cristina &amp;nbsp;la MVP Lead de España por su apoyo.&lt;/P&gt;
&lt;P&gt;Esto la verdad es que es una inyección de moral para seguir colaborando en foros, eventos, etc.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=21" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author><category term="MVP" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/MVP/default.aspx" /></entry><entry><title>BizTalk Server 2006 R2 Beta 2</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2007/06/19/biztalk-server-2006-r2-beta-2.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2007/06/19/biztalk-server-2006-r2-beta-2.aspx</id><published>2007-06-19T09:48:00Z</published><updated>2007-06-19T09:48:00Z</updated><content type="html">&lt;P&gt;En la siguiente url podremos descargar la beta 2 de la versión R2 de Biztalk.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://support.microsoft.com/?kbid=936046"&gt;http://support.microsoft.com/?kbid=936046&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Además también están dispononibles nuevos ejemplos de código para esta versión.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="http://go.microsoft.com/fwlink/?LinkId=86689"&gt;http://go.microsoft.com/fwlink/?LinkId=86689&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Un saludo.&lt;/P&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=20" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author><category term="Biztalk Server 2006" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/Biztalk+Server+2006/default.aspx" /></entry><entry><title>8 consejos y trucos para mejorar la programación de BizTalk</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2007/05/29/8-consejos-y-trucos-para-mejorar-la-programaci-n-de-biztalk.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2007/05/29/8-consejos-y-trucos-para-mejorar-la-programaci-n-de-biztalk.aspx</id><published>2007-05-29T10:41:00Z</published><updated>2007-05-29T10:41:00Z</updated><content type="html">&lt;P&gt;En el &lt;A class="" href="http://msdn.microsoft.com/msdnmag/issues/07/05/biztalk/default.aspx?loc=es" target=_blank&gt;msdn&lt;/A&gt; aparece publicado un artículo de &lt;A title="More articles by this author" href="http://msdn.microsoft.com/msdnmag/find/?type=Au&amp;amp;phrase=Marty%20Wasznicky%20and%20Scott%20Zimmerman&amp;amp;words=exact"&gt;Marty Wasznicky&amp;nbsp;&lt;/A&gt;&amp;nbsp;y&amp;nbsp;&lt;A title="More articles by this author" href="http://msdn.microsoft.com/msdnmag/find/?type=Au&amp;amp;phrase=Marty%20Wasznicky%20and%20Scott%20Zimmerman&amp;amp;words=exact"&gt;Scott Zimmerman&lt;/A&gt;&amp;nbsp;donde se analizan los siguientes temas:&lt;/P&gt;
&lt;P class=clsInfoBox&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/07/05/biztalk/default.aspx?loc=es#S1" target=_self&gt;1. Utilice siempre tipos de mensajes con varias partes&lt;/A&gt;&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/07/05/biztalk/default.aspx?loc=es#S2" target=_self&gt;2. Intente diseñar siempre orquestaciones con puertos de enlace directo&lt;/A&gt;&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/07/05/biztalk/default.aspx?loc=es#S3" target=_self&gt;3. Utilice siempre esquemas internos y externos diferentes&lt;/A&gt;&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/07/05/biztalk/default.aspx?loc=es#S4" target=_self&gt;4. Nunca exponga directamente sus esquemas internos en WSDL&lt;/A&gt;&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/07/05/biztalk/default.aspx?loc=es#S5" target=_self&gt;5. Optimice siempre el registro de BizTalk para servicios web&lt;/A&gt;&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/07/05/biztalk/default.aspx?loc=es#S6" target=_self&gt;6. Configure siempre el archivo de claves de ensamblado con una ruta relativa&lt;/A&gt;&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/07/05/biztalk/default.aspx?loc=es#S7" target=_self&gt;7. Nunca pase por alto el código de ejemplo gratuito&lt;/A&gt;&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/07/05/biztalk/default.aspx?loc=es#S8" target=_self&gt;8. Depuración XSLT en Visual Studio&lt;/A&gt;&lt;/P&gt;
&lt;P class=clsInfoBox&gt;Y lo mejor de todo es que está publicado en español :).&lt;/P&gt;
&lt;P class=clsInfoBox&gt;&amp;nbsp;Saludos.&lt;/P&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=19" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author><category term="Biztalk Server 2006" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/Biztalk+Server+2006/default.aspx" /></entry><entry><title>Troubleshooting Enterprise Single Sign-On</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2007/04/11/troubleshooting-enterprise-single-sign-on.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2007/04/11/troubleshooting-enterprise-single-sign-on.aspx</id><published>2007-04-11T15:15:00Z</published><updated>2007-04-11T15:15:00Z</updated><content type="html">&lt;P&gt;En la siguiente URL tenemos información sobre los errores mas comunes que suelen surgir cuando usamos SSO.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A class="" href="http://msdn2.microsoft.com/en-us/library/aa953861.aspx" target=_blank&gt;http://msdn2.microsoft.com/en-us/library/aa953861.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Espero que os sea de utilidad&lt;/P&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=18" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author><category term="Biztalk Server 2006" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/Biztalk+Server+2006/default.aspx" /></entry><entry><title>Perdida de Templates en VS. 2005</title><link rel="alternate" type="text/html" href="http://thinkingtogether.net/blogs/sample_weblog/archive/2007/04/09/perdida-de-templates-en-vs-2005.aspx" /><id>http://thinkingtogether.net/blogs/sample_weblog/archive/2007/04/09/perdida-de-templates-en-vs-2005.aspx</id><published>2007-04-09T09:38:00Z</published><updated>2007-04-09T09:38:00Z</updated><content type="html">&lt;P&gt;&amp;nbsp;Después de instalar las extensiones de WCF, WWF y WPF he perdido las plantillas estandar de Visual Studio 2005.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;La forma de solucionarlo ha sido la siguiente:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;- Copiar el contenido de &lt;STRONG&gt;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\&lt;/STRONG&gt;&lt;STRONG&gt;ProjectTemplates&lt;/STRONG&gt; en la ruta &lt;STRONG&gt;My Documents\Visual Studio 2005\Templates\ProjectTemplates&lt;/STRONG&gt;. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;- Copiar el contenido de &lt;STRONG&gt;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\&lt;/STRONG&gt;&lt;STRONG&gt;ItemTemplates&lt;/STRONG&gt; en la ruta &lt;STRONG&gt;My Documents\Visual Studio 2005\Templates\ItemTemplates&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Con esto y sin tener que reinstalar Visual Studio se debería solucionar.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://thinkingtogether.net/aggbug.aspx?PostID=17" width="1" height="1"&gt;</content><author><name>Roberto</name><uri>http://thinkingtogether.net/members/Roberto.aspx</uri></author><category term="Visual Studio 2005" scheme="http://thinkingtogether.net/blogs/sample_weblog/archive/tags/Visual+Studio+2005/default.aspx" /></entry></feed>