Blog Thinking Together

Microsoft. Biztalk Server 2006, .NET, WCF, WWF, WPF, Linq,...
Welcome to Blog Thinking Together Sign in | Join | Help
in Search

Blog

Blog donde escribré sobre Biztalk Server 2006, WWF, WCF, Arquitectura, ...

  • Proyecto Fjord: Biztalk Mapper + Surface

    En el blog de Tim Rayburn aparece una noticia cuanto menos interesante.

    Nos cuenta la integración de Biztalk Mapper y Surface. No dejéis de leer el post de Tim porque no tiene desperdicio.

    Esperaremos noticias nuevas.

     

  • Biztalk Server 2006 R3

    Como siempre Biztalk se adapta a la nueva oleada de cambios tecnológicos y nuevos productos que han ido saliendo estos último meses.

    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.

    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.

    Algunas de las novedades que traerá el produto son las siguientes:

    • Nuevas capacidades de registro de web service con soporte para UDDI (Universal Description Discovery and Integration) version 3.0
    • Nuevos adaptadores mejorados para aplicaciones LOB, bases de datos, ...
    • Soporte de conectividad e interoperabilidad mejorada para protocolos de la industria (SWIFT, EDI, etc)
    • Patrones SOA y guía de best practices para asistir a implementaciones de clientes
  • Desde Redmon

    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 siguientes versiones de los productos sobre los que somos MVPs.

     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.

    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).

    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.

    Otro espectáculo que la gente no se puede perder es un partido de la NBA. Es puro espectáculo desde que empieza hasta que termina.

    PD: Para mi gusto salen demasiado poco las Cheerleaders  :).

    Seguiremos contando.

     

  • Microsoft TechDays

    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.

    Tengo algún artículo pendiente de escribir que espero poderlos tener finalizado en breve ( WCF Adapter SDK, WF Services,..).

    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.

    Os recomiendo mi charla Workflow Services en produndidad la cual tendrá lugar el día 26 a las 18:00 en la Sala Madrid.

    En esta charla veremos que novedades tenemos en .net 3.5 con respecto a la integración de WCF y WF.

    Nos vemos.

  • SOA Conference 2007

    Hay una conferencia sobre SOA el día 4 de diciembre en madrid.

     

    Se contarán las novedades de Biztalk Server 2006 R2, roadmap de futuro "OSLO", charlas sobre Adaptadores de Biztalk para WCF, Conectando aplicaciones de negocio con Biztalk Adapter Pack, etc.

     

    Espero veros por alli.

     

    http://www.microsoft.com/spain/sunegocioconectado/

     

    Un saludo.

  • Biztalk Server 2006 R2 disponible

    Ya está disponible la descarga via MSDN de Biztalk Server 2006 R2.

    Para todos aquellos que quieran saber las novedades que trae esta release:

    http://www.microsoft.com/biztalk/evaluation/default.mspx

    Un saludo.

  • Compatibilidad de BizTalk Server 2006 y BizTalk Server 2004 en un equipo virtual

    Buscando información sobre soporte de instalación de Biztalk en máquinas virtuales me he encontrado el siguiente artículo de microsoft http://support.microsoft.com/kb/842301/es.

    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.

    Un saludo.

     

  • Ya soy MVP

    El lunes por la mañana cuando voy a leer el correo me encuentro con la grata noticia que me han nombrado MVP de Biztalk.

    Simplemente agredecer tanto a Cesar de la Torre  como a Cristina  la MVP Lead de España por su apoyo.

    Esto la verdad es que es una inyección de moral para seguir colaborando en foros, eventos, etc.

     

  • BizTalk Server 2006 R2 Beta 2

    En la siguiente url podremos descargar la beta 2 de la versión R2 de Biztalk.

    http://support.microsoft.com/?kbid=936046

    Además también están dispononibles nuevos ejemplos de código para esta versión.

     http://go.microsoft.com/fwlink/?LinkId=86689

     Un saludo.

  • 8 consejos y trucos para mejorar la programación de BizTalk

  • Troubleshooting Enterprise Single Sign-On

    En la siguiente URL tenemos información sobre los errores mas comunes que suelen surgir cuando usamos SSO.

     http://msdn2.microsoft.com/en-us/library/aa953861.aspx

    Espero que os sea de utilidad

  • Perdida de Templates en VS. 2005

     Después de instalar las extensiones de WCF, WWF y WPF he perdido las plantillas estandar de Visual Studio 2005.

     La forma de solucionarlo ha sido la siguiente:

     - Copiar el contenido de C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ProjectTemplates en la ruta My Documents\Visual Studio 2005\Templates\ProjectTemplates.

     - Copiar el contenido de C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ItemTemplates en la ruta My Documents\Visual Studio 2005\Templates\ItemTemplates.

    Con esto y sin tener que reinstalar Visual Studio se debería solucionar.

     

     

  • Policy Injection Application Block

    En el Enterprise Library 3.0 (CTP de Febrero 2007) han incluido a última hora un nuevo Application Block llamado Policy Injection Application Block.

    Este application block permite definir políticas a métodos y objetos de forma declarativa.

    Cada política contiene una serie de handlers que son ejecutados antes y después del método que tenga las políticas habilitadas. Las acciones a realizar por estas políticas serán Validaciones, Logging, manejo de excepciones, etc.

    En la creación del objeto usaremos una clase Factory que será la encargada de inspeccionar el fichero de configuración de la aplicación y aplicar las políticas que hayamos definido en este.

    Ejemplo de creación de un objeto: 

    Transferencias objTrans = PolicyInjection.Create<Transferencias>();

     

    Aquí radica la principal potencia de este Application Block, que no tenemos que modificar nuestro código para poder modificar las políticas, ya que estas son definidas de forma declarativa en un fichero de configuración y se aplican en tiempo de ejecución.

     

    Dentro del fichero de configuración vamos a tener un formato parecido al siguiente:

    <policies>
    <add name="PolicyName">

      <matchingRules>

                Aquí vamos a tener la lista de reglas que se deben validar antes de aplicar la política

      </matchingRules>

      <handlers>

                Aquí vamos a tener la lista de handlers que ejecutará esta política

      </handlers>

    </add>

    </policies>                                                                             

     

    La siguiente pregunta es, ¿Qué tiene que cumplir mi clase para poder se “interceptada” por este aplication block?:

    Tenemos dos opciones:

    ·         Declarar un interface del cual herede nuestra clase.

    ·         Crear una clase que herede de MarshalByRefObject.

     

    Ejemplo: 

    namespace DemoPolicyInjection

    {

        public class Transferencias: MarshalByRefObject

        {

            public void Transferencia(string numCuenta1, string numCuenta2)

            {

                //Código a implementar en el método         

            }

            public void TransferenciaError(string numCuenta1, string numCuenta2)

            {

                //Código a implementar en el método

            }

        }

    }

     

    Imaginémonos que queremos grabar en un log todas las llamadas que reciba cualquier método de esta clase. Para ello debemos usar el siguiente xml:

     

    <policyInjection>

        <policies>

          <add name="SaveToLog">

            <matchingRules>

              <add name="Tipo Transaferencias" type="Microsoft.Practices.EnterpriseLibrary.PolicyInjection.MatchingRules.TypeMatchingRule, Microsoft.Practices.EnterpriseLibrary.PolicyInjection, Version=2.9.9.2" ignoreCase="false" match="Transferencias" />

            </matchingRules>

            <handlers>

              <add name="Politica Grabar Log operaciones" type="Microsoft.Practices.EnterpriseLibrary.PolicyInjection.CallHandlers.LogCallHandler, Microsoft.Practices.EnterpriseLibrary.PolicyInjection.CallHandlers, Version=2.9.9.2" logBehavior="Before" beforeMessage="This is the before message" afterMessage="This is the after message" includeParameterValues="true" includeCallStack="true" includeCallTime="false" priority="42" severity="Information">

                <categories>

                  <add name="LogOperaciones" />

                </categories>

              </add>

            </handlers>

          </add>

        </policies>

    </policyInjection>

     

    Si analizamos el xml, vemos que para que se ejecute la política, el tipo del objeto debe ser Transferencias.

    Cumplida esta condición se ejecuta el handler que en este caso graba en un fichero de log cada una de las llamadas que se hagan a cualquiera de los métodos de la clase Transferencia.

     

    Los posibles valores que vamos a poder especificar en matchingRules son los siguientes:

    • AssemblyMathingRule  (todos los métodos de un assembly)
    • CustomAttributeMatchingRule (todos los métodos que tengan un atributo el cual especificaremos)
    • MemberNameMatchingRule (un método en concreto)
    • MethodSignatureMatchingRule (una sobre carga en concreto de un método)
    • NamespaceMatchingRule (todos los métodos de un namespace específico)
    • ReturnTypeMatchingRule (todos los métodos con un valor de retorno específico)
    • TagAttributeMatchingRule (todos los métodos con el atributo Tag)
    • TypeMatchingRule (todos los métodos de un tipo específico)

    Lista de Handlers en esta CTP:

    • LogCallHandler
    • ValidationCallHandler
    • ExceptionHandlingCallhandler

     

    Este post simplemente es una breve introducción de la potencia de este Application Blog. En el caso de que queráis profundizar mas, os recomiendo los siguientes post:  

     Adjunto un archivo con el código de ejemplo utilizado para este post: policyinjection.rar 

     

    En este ejemplo se usaran el Application Blog para grabar en un fichero de texto todas las llamadas a los métodos de la clase Transferencias. Además en el caso de que se produzcan un error en alguno de los métodos también se registrará en un log dicha excepción.

    Los archivos de log se guadan en la misma ruta que el ejecutable y se llaman Trace.log y exception.log

     

  • Cambio de host

    Después de una temporada gorroneando el espacio a mi amigo Enrique Blanco, ha llegado el momento de migrar el blog a un nuevo host.

    He aprovechado para migrar todos los post (los pocos que hay :)) a Community Server y así probar que tal va comparado con dotnetnuke.

    Lo dicho, mi enterno agradecimiento a Enrique por su cooperación desinteresada a la causa.

     

     

     

  • Ejecutar Stored Procedures mediante SQL Adapter

     

    Debido a que creo que hay bastantes dudas y poca información sobre el SQL Adapter, me he decidido a escribir este post para intentar al menos sentar las bases del uso del adaptador.

    Este ejemplo no pretende ser  código optimizado listo por ponerse en producción, sino más bien una prueba de concepto que facilite la tarea de aprendizaje de todas las personas que se empiecen a "pegar" con el SQL Adapter y solo encuentren documentación en inglés.

    En el ejemplo usaremos el SQL Adapter para ejecutar un procedimiento almacenado el cual  insertará un registro en una tabla y obtendrá como resultado los datos del registro insertado anteriormente.

    Crear  tabla y procedimiento almacenado

    • Crear la tabla de ejemplo
      CREATE TABLE [dbo].[tablaejemplo]
      (
       [ID] [int] NULL,
       [Descripcion] [varchar](50) COLLATE Modern_Spanish_CI_AS NULL
      ) ON [PRIMARY]

     


    • CREATE PROCEDURE [dbo].[insert_tablaejemplo]
       @id  int,
       @desc varchar(50)
      AS
      BEGIN
      SET NOCOUNT ON;
            insert into tablaejemplo(id,descripcion) values(@id,@desc)
            select id,descripcion from tablaejemplo where
      id=@id for xml auto,xmldata
      END


    La clausula  xmldata causa que SQL Server devuelva como resultado de la consulta el esquema además de los datos.
    Esta clausula la eliminaremos después de configurar los metadatos del adaptador.

    Crear  un proyecto de Biztalk

    • Creamos un proyecto de Biztalk de tipo Empty Biztalk Server Project. Le llamaremos DemoSQLAdapter.

    Añadir metadatos al proyecto

    • Pulsamos con el botón derecho sobre el proyecto que hemos creado previamente y seleccionamos Add --> Add Generated Items…
      En la siguiente pantalla seleccionamos la opción de Add Adapter Metadata y pulsamos el botón Add:

      img1.JPG

      • Deberemos seleccionar SQL en la lista de adaptadores registrados.
        En la misma pantalla indicamos el servidor y la base de datos donde se encuentra el procedimiento almacenado que vamos a invocar.

      Por ahora no seleccionaremos nada en la lista de puertos.
       

                        img2.JPG

      • En la pantalla Database Information definimos la cadena de conexión de la base de datos  que usaremos posteriormente.
      • En la pantalla Schema Information debemos definir la siguiente información:
        • Target namespace:  http://EjemploSQLAdapter
        • Seleccionar Send Port ya que vamos a enviar una petición  a SQL Server.
        • Debemos asignar un nombre al elemento raíz del documento de petición:  root_request
        • Debemos asignar un nombre al elemento raíz del documento de respuesta:  root_response

                      img3.JPG
       

      • En la pantalla Statement type information seleccionar Stored Procedure como tipo de sentencia.
        Por último en la pantalla Statement Information debemos seleccionar el procedimiento almacenado que vamos a ejecutar.
        Una vez seleccionado, pulsaremos el botón de Generate para generar el script de ejecución del procedimiento almacenado.

      Los valores de los parámetros son almacenados solamente para la generación del esquema.  En ejecución se usaran los parámetros pasados en el mensaje de petición.

      • El checkbox asigna el parámetro a NULL
      • Haciendo doble click sobre el parámetro podremos introducir los valores deseados.


       img4.JPG

      • Pulsar Finish.


      Una vez finalizado este proceso podemos comprobar que se han creado dos archivos: BizTalk Orchestration.odx y SQLService.xsd. El primero es una orquestación vacía con algunos tipos de puertos pre-configurados. El segundo archivo es el esquema que va a contener la estructura del mensaje de petición y de respuesta del adaptador.

      En este punto debemos modificar el procedimiento almacenado y eliminar la cláusula xmldata:


      select id,descripcion from tablaejemplo where
      id=@id for xml auto ,xmldata

      Crear los esquemas necesarios para el proyecto

      • Pulsamos con el botón derecho sobre el proyecto que hemos creado previamente y seleccionamos Add --> New Item --> Schema.
        Llamar EsquemaRequest.xsd al nuevo esquema.
      • Pulsar con el botón derecho en el nodo raíz (root) del nuevo esquema y seleccionar Insert Schema Node --> Child Field Element.
        Llamar a este elemento ID.
        Seleccionar este nodo y en la ventana de propiedades modificar el campo Data Type a xs:int.
      • Pulsar con el botón derecho en el nodo raíz (root) del nuevo esquema y seleccionar Insert Schema Node --> Child Field Element.
        Llamar a este elemento Descripcion.
        Una vez hayamos finalizado debemos tener un esquema igual al de la siguiente pantalla:

      img5.JPG

      Crear mapa

      Debemos crear un mapa que convierta el mensaje recibido por la orquestación al mensaje de petición del SQL Adapter.

      •  Pulsamos con el botón derecho sobre el proyecto que hemos creado previamente y seleccionamos Add --> New Item --> Map.
        Llama Mapa.btm al nuevo mapa.
      • Hacer click en el enlace Open Source Schema y seleccionar DemoSqlAdapter.EsquemaRequest.
      • Hacer click en el enlace Open Destination Schema y seleccionar DemoSqlAdapter.SQLService.
      • Seleccionar root_request.
      • Asociar los nodos ID de ambos esquemas.
      • Asociar el nodo Descripcion del esquema origen y el nodo desc del esquema destino.

      Añadir mensajes a la orquestación

      • Crear un mensaje llamado msgCallSQL y seleccionar como tipo de mensaje DemoSqlAdapter.SQLService.root_request.
      • Crear un mensaje llamado msgPeticion y seleccionar como tipo de mensaje DemoSqlAdapter.EsquemaRequest.
      • Crear un mensaje llamado msgResponse y seleccionar como tipo de mensaje DemoSqlAdapter.SQLService.root_response.


      Añadir componentes a la orquestación

      • Crear un shape de tipo Receive al que llamaremos ObtenerPeticion.
        Modificar la propiedad Activate de este shape a true.
        Seleccionar msgPeticion en la propiedad Message.
      • Crear un shape de tipo Transform inmediatamente debajo del anterior.
      • Seleccionar el shape de tipo Construct Message. Seleccionar el esquema msgCallSQL en la propiedad Messages Constructed.
      • Seleccionar el shape de tipo Transform y modificar la propiedad name con el valor Transform_ParametrosPA.
      • Configurar la transformación haciendo click en la propiedad Input Messages.
        • Hacer click en la opción Existing Map y posteriormente seleccionar DemoSqlAdapter.Mapa en el combo  Fully Quafiled Map Name.
        • Hacer click en Source y seleccionar posteriormente en el campo Variable Name msgPeticion.
        • Hacer click en Destination y seleccionar posteriormente en el campo Variable Name msgCallSQL.
      • Crear un shape de tipo Send inmediatamente debajo del anterior, al que llamaremos EjecutarPeticionSQL.
        Seleccionar msgCallSQL en la propiedad Message.
      • Crear un shape de tipo Receive inmediatamente debajo del anterior, al que llamaremos ObtenerResultado.
        Seleccionar msgResponse en la propiedad Message.
      • Crear un shape de tipo Send inmediatamente debajo del anterior, al que llamaremos EnviarRes.
        Seleccionar msgResponse en la propiedad Message.


      Añadir puertos a la orquestación

      • Crear un puerto y situarlo en el área  izquierda de puertos a la altura del shape ObtenerPeticion.
        Definir las siguientes propiedades del puerto:
        • Nombre: Port_ObtenerPeticion
        • Port Type: PortType_ObtenerPeticion
        • Communication Pattern: One-way
        • Port direction of communication: I’ll always be receiving messages on this port.
        • Port binding: Specify now
        • Transport: FILE
        • URI: escoger una ruta donde dejaremos el fichero xml que desencadene la orquestación. Ej.: c:\demo\in\*.xml
          Enlazamos el puerto Port_ObtenerPeticion con el shape ObtenerPeticion.
      • Crear un puerto y situarlo en el área derecha de puertos entre los shape EjecutarPeticionSQL y ObtenerResultado. Definir las siguientes propiedades del puerto:
        • Nombre: Port_CallSQL.
        • Port Type: PortType_CallSQL
        • Communication Pattern: Request-Response
        • Port direction of communication: I’ll be sending a request and receiving a response.
        • Port binding: Specify Later

               Enlazamos el shape EjecutarPeticionSQL con el mensaje de operación request del puerto Port_CallSQL.

               Enlazamos el shape EnviarRes con el mensaje de operación response del puerto Port_CallSQL.

      • Crear un puerto y situarlo en el área  izquierda de puertos a la altura del shape EnviarRes. Definir las siguientes propiedades del puerto:
        • Nombre: Port_Resultado
        • Port Type: PortType_Resultado
        • Communication Pattern: One-way
        • Port direction of communication: I’ll always be sending messages on this port.
        • Port binding: Specify now
        • Transport: FILE
        • URI: escoger una ruta donde dejaremos el fichero xml con el resultado de la operación. Ej.: c:\demo\out\res.xml

               Enlazamos el puerto Port_Resultado con el shape ObtenerResultado.

      • Anteriormente hemos creado un puerto llamado Port_CallSQL y hemos especificado que el binding lo haremos mas tarde. Ahora vamos a crear un puerto con el que haremos el binding.
        • En Biztalk Explorer hacemos click con el botón derecho en Send Ports y seleccionamos la opción Add Send Port.
        • En la lista seleccionamos Static Solicit-Response Port.
        • Definir las siguientes propiedades:
          • Transport type: SQL
          • Address (URI):
            • Connection String: Configuraremos la cadena de conexión
            • Document Target Namespace: tenemos que escribir el mismo namespace que el que definimos en los metadatos del esquema. En nuestro caso http://EjemploSQLAdapter.
            • Response Document Root Element: tenemos que escribir el mismo nombre, que el que definimos como elemento raíz del documento de respuesta cuando creamos los metadatos del esquema. En nuestro caso  root_response.
            • Send Pipeline:  Microsoft.BizTalk.DefaultPipelines.XMLTransmit
            • Solicit - Response:  Microsoft.BizTalk.DefaultPipelines.XMLTransmit
          • Renombrar el puerto de SendPort1 a  SendPortCall

      Finalmente deberemos tener una orquestación similar a la siguiente:

      img7.JPG

      Deploy de la aplicación


      Ya solo nos queda hacer el deploy de nuestra orquestación para poder probar el desarrollo.
      Para ello tenemos que firmar la orquestación con un strong name.
      Una vez distribuida la orquestación, tenemos que hacer el binding entre el puerto Port_CallSQL y el puerto  SendPortSQL. 
       

                img6.JPG

      Seleccionamos Host en Configurations y seleccionamos BizTalkServerApplication como host en el que enlistaremos la orquestación.

      Para probar la orquestación, solo tenemos que dejar un fichero xml que cumpla con el esquema de tipo EsquemaRequest en la ruta establecida en el puerto Port_ObtenerPeticion.

    More Posts Next page »
    Powered by Community Server (Personal Edition), by Telligent Systems