Tutorial: Utilizar sobres XML (básicos)
En este ejemplo se demuestra un desensamblado de sobre XML básico implementando parte de un sistema de seguimiento de errores ficticio. El ejemplo cumple los requisitos siguientes:
Los mensajes de error se registran en varias ubicaciones físicas de la compañía y se envían a una ubicación central para su procesamiento en varios sistemas de servidor.
Los mensajes de error escriben en formato XML.
Un mensaje de error se puede enviar por sí solo, sin sobre, o como un lote contenido en un sobre.
Requisitos previos
Para este ejemplo, debe estar familiarizado con la creación de proyectos de BizTalk, la firma de un ensamblado y el uso de la consola de administración de BizTalk Server para ver las aplicaciones y los puertos. También debe estar cómodo con las ideas presentadas en Tutorial: Implementación de una aplicación básica de BizTalk.
Qué se hace en este ejemplo
En el ejemplo se procesan los mensajes de entrada que contienen un solo mensaje de error o un lote de éstos. Para ello, se define un esquema de sobres y se usa la canalización XmlDisassembler.
Ejemplo
Para crear el ejemplo, siga los pasos que se especifican en las secciones que se presentan a continuación.
Crear un nuevo proyecto de BizTalk
Antes de generar una solución, es preciso crear un proyecto de BizTalk, asegurarse de que se le ha asignado un nombre seguro y un nombre de aplicación. La asignación de un nombre de aplicación evita que BizTalk Server implemente la solución en la aplicación de BizTalk predeterminada.
Para crear y configurar un nuevo proyecto de BizTalk
Use Visual Studio para crear un nuevo proyecto de BizTalk. Llame al proyecto BasicXMLEnvelope.
Genere un archivo de clave y asígnelo al proyecto. Para obtener más información sobre esta tarea, vea How to Configure a Strong Name Assembly Key File.
En las propiedades de configuración de implementación del proyecto, asigne un nombre de aplicación y establezca Reiniciar instancias de host en
True
. Al definir esta marca, se ordena al host que borre todas las instancias del ensamblado almacenadas en caché.
Crear el esquema de error
En este paso, se creará el esquema de error. Define el mensaje clave para el sistema.
Para crear el esquema de error
Agregue un nuevo esquema denominado "Error" al proyecto.
Cambie el espacio de nombres de destino del esquema a http://BasicXMLEnvelope.
Cambie la propiedad schema Element FormDefault (Elemento FormDefault ) de la categoría Advanced (Avanzadas) a Qualified (Calificado). Con ello, se indica que el espacio de nombres de destino debe calificar los elementos declarados localmente en un documento de instancia.
Cambie el nombre del nodo raíz "Error" y cree cinco elementos secundarios con los tipos que se indican:
ID, xs:int
Type, xs:int
Priority, xs:string
Description, xs:string
ErrorDateTime, xs:string
El esquema tendrá el siguiente aspecto:
Cree un mensaje de ejemplo para este esquema Este mensaje se usa para comprobar que los mensajes sencillos, no contenidos en un sobre, se procesan correctamente. Un mensaje de ejemplo es:
<Error xmlns="http://BasicXMLEnvelope"> <ID>1</ID> <Type>5</Type> <Priority>Low</Priority> <Description>Sprocket widget prints reports slowly.</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error>
Guarde este mensaje en un archivo en el directorio del proyecto.
Crear el esquema de sobres
El sobre contiene uno o más mensajes de error. En este ejemplo básico, el sobre no tiene propiedades ni elementos propios.
Para crear el esquema de sobres
Agregue un nuevo esquema denominado "Envelope" al proyecto BasicXMLEnvelope.
Cambie el espacio de nombres de destino a http://BasicXMLEnvelope.
Cambie el nombre del nodo raíz de "Root" a "Envelope".
Ahora, marque el esquema como esquema de sobres. Haga clic en el <nodo Esquema> . En el panel Propiedades, establezca la propiedad de referencia de esquema Envelope
OK
en .Establezca la propiedad Body XPath . Para ello, haga clic en el nodo Sobre . En el ventana Propiedades, haga clic en el botón de puntos suspensivos (...) de la propiedad Body XPath, seleccione Envelope y, a continuación, haga clic en Aceptar.
Agregue un elemento secundario Cualquier elemento al nodo Envelope. El mensaje de error estará contenido en este elemento. El esquema tendrá el siguiente aspecto:
Cree un mensaje de ejemplo que contenga un sobre y uno o varios ejemplos de mensajes. Un mensaje de ejemplo es:
<Envelope xmlns="http://BasicXMLEnvelope"> <Error> <ID>102</ID> <Type>0</Type> <Priority>High</Priority> <Description>Sprocket query fails.</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error> <Error> <ID>16502</ID> <Type>2</Type> <Priority>Low</Priority> <Description>Time threshold exceeded.</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error> </Envelope>
Guarde este mensaje en un archivo en el directorio del proyecto.
Implementar y configurar los puertos de envío y recepción
Con los esquemas creados, será necesario compilar el proyecto e implementarlo. Una vez implementado, se podrá utilizar la consola de administración de BizTalk Server para configurar los puertos de envío y recepción.
Para implementar BasicXMLEnvelope
En Visual Studio, elija Implementar BasicXMLEnvelope en el menú Compilar. Se generará e implementará en BizTalk Server como la aplicación "BasicXMLEnvelope".
En la consola de administración de BizTalk Server, expanda el grupo Aplicaciones para comprobar que BasicXMLEnvelope está presente como una aplicación personalizada.
Para configurar el puerto de recepción
Use el Explorador de Windows para crear un directorio denominado "Receive" en el directorio del proyecto BasicXMLEnvelope .
En la consola de administración de BizTalk Server, expanda la aplicación BasicXMLEnvelope, haga clic con el botón derecho en Puertos de recepción, seleccione Nuevoy, a continuación, haga clic en Puerto de recepción unidireccional.
En el cuadro de diálogo Propiedades del puerto de recepción , establezca el nombre del puerto en "Receive".
Haga clic con el botón derecho en Ubicaciones de recepción y, a continuación, haga clic en Nuevo para agregar un puerto de recepción. Defina "ReceiveError" como nombre del nuevo puerto. Establezca la canalización de recepción en XMLReceive. En Tipo de transporte, seleccione ARCHIVO y, a continuación, haga clic en Configurar.
Seleccione el directorio de recepción creado anteriormente y haga clic en Aceptar. Con ello, el puerto de recepción debería estar configurado. Haga clic en Aceptar para cerrar.
Para configurar el puerto de envío
Use el Explorador de Windows para crear un directorio denominado "Send" en el directorio del proyecto BasicXMLEnvelope .
En la consola de administración de BizTalk Server, expanda la aplicación BasicXMLEnvelope, haga clic con el botón derecho en Puertos de envío, seleccione Nuevoy, a continuación, haga clic en Estática unidireccional.
En el cuadro de diálogo Propiedades del puerto de envío, establezca el nombre del puerto en "Enviar".
En Tipo de transporte, seleccione ARCHIVO y, a continuación, haga clic en Configurar. Establezca la carpeta de destino en el directorio de envío que creó anteriormente y haga clic en Aceptar.
Haga clic en Filtros y agregue un único filtro:
- BTS. MessageType == http://BasicXMLEnvelope#Error
Haga clic en Aceptar para completar la configuración del puerto de envío. Con ello, el puerto de envío debería estar configurado.
Ejecutar el ejemplo
Ha llegado el momento de ejecutar el ejemplo. Tras utilizar la consola de administración de BizTalk Server para iniciar la aplicación BasicXMLEnvelope, se copiarán los archivos de prueba en la ubicación de recepción y se observará lo que se produce en la ubicación de envío.
Para ejecutar el ejemplo BasicXMLEnvelope
En la consola de administración de BizTalk Server, haga clic con el botón derecho en la aplicación BasicXMLEnvelope y, a continuación, haga clic en Iniciar. Con ello, se darán de alta los puertos de recepción y envío y se iniciarán.
Coloque cada uno de archivos de ejemplo en el directorio de recepción. Si usa los ejemplos facilitados anteriormente, encontrará tres mensajes de error individuales en la ubicación de envío cuando se complete el procesamiento.
Extensión del ejemplo
Puede ampliar el ejemplo para adaptarlo a otros requisitos. En esta sección se tratan dos escenarios comunes.
Si se envía un lote de errores dentro de un sobre, los errores en mensajes individuales del desensamblado no deberían prohibir el procesamiento ulterior de los demás mensajes sin errores.
Los errores deberán enviarse a distintas ubicaciones según la prioridad del error. Los mensajes de alta prioridad se envían antes, mientras que los demás niveles de prioridad se administran por los canales normales.
En las siguientes secciones se amplía el ejemplo de modo que incluya estos requisitos.
Procesamiento de intercambio recuperable
BizTalk Server admite el procesamiento de intercambio recuperable. Esta característica permite garantizar que los lotes de mensajes con errores se traten individualmente en el desensamblado, y no como un lote.
Para configurar el ejemplo para el procesamiento de intercambio recuperable
En la consola de administración de BizTalk Server, expanda la aplicación BasicXMLEnvelope, haga clic en Puertos de recepción y, a continuación, haga doble clic en el puerto de recepción. Éste es el puerto creado anteriormente.
En el cuadro de diálogo Propiedades del puerto de recepción, haga clic en Ubicaciones de recepción. Haga clic en Propiedades para abrir el cuadro de diálogo Propiedades de ubicación de recepción receiveError . Haga clic en el botón de puntos suspensivos (...) de la canalización de recepción.
En el cuadro de diálogo Configurar canalización - XMLReceive, establezca la propiedad
True
Procesamiento de intercambio recuperable en y, a continuación, haga clic en Aceptar.Haga clic en Aceptar para cerrar el cuadro de diálogo Propiedades de ubicación de recepción y, a continuación, haga clic en Aceptar para cerrar el cuadro de diálogo Propiedades del puerto de recepción.
Para crear un archivo de ejemplo y ejecutar el ejemplo
Para crear un archivo de ejemplo, realice una copia del archivo de ejemplo de sobre creado en el ejemplo, agregue un espacio de nombres inexistente a una de las instancias de error y guarde el archivo:
<Envelope xmlns="http://BasicXMLEnvelope"> <Error> <ID>102</ID> <Type>0</Type> <Priority>High</Priority> <Description>Sprocket query fails to return any sprockets even though some exist</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error> <Error xmlns="http://ThisIsAnError"> <ID>16502</ID> <Type>2</Type> <Priority>Low</Priority> <Description>Time threshold exceeded.</Description> <ErrorDateTime>1999-05-31T13:20:00.000-05:00</ErrorDateTime> </Error> </Envelope>
En la consola de administración de BizTalk Server, haga clic en Aplicaciones y compruebe que la aplicación BasicXMLEnvelope se está ejecutando.
Coloque el mensaje en la ubicación de recepción. Después del procesamiento, deberá encontrar el primer mensaje en la ubicación de envío y el segundo, de baja prioridad, en la cola de suspensión.
Enrutamiento por contenidos (CBR)
También puede utilizar el enrutamiento por contenidos para enrutar mensajes según su contenido. En este escenario, en enrutamiento se basa en la prioridad. Los mensajes con prioridad alta van a una ubicación de envío y los mensajes con prioridad media o baja van a otra.
Para ampliar el ejemplo, debe completar las tareas siguientes:
Promueva el campo Prioridad en el esquema error del proyecto BasicXMLEnvelope. El enrutamiento por contenidos se basa en propiedades promocionadas para enrutar los mensajes. Para obtener más información, vea Promoción de propiedades.
Cree y configure dos puertos adicionales. Los puertos usan un filtro para garantizar que reciben los mensajes apropiados.
Para promocionar el campo Priority del esquema de error
Con el proyecto BasicXMLEnvelope abierto en Visual Studio, abra el esquema Error y expanda el nodo Error .
Haga clic con el botón derecho en el elemento Priority , seleccione Promover y, a continuación, haga clic en Promoción rápida.
Haga clic en Aceptar para confirmar la adición de un nuevo esquema de propiedades para las propiedades promocionadas.
En Visual Studio, en Explorador de soluciones, abra el nuevo esquema de propiedades PropertySchema.xsd. Quite "Field1" del esquema.
Vuelva a compilar e implementar la solución. En el menú Generar, elija Implementar BasicXMLEnvelope.
El proyecto se configuró para restablecer la instancia de host cuando se vuelve a implementar la solución. Si lo ha modificado, deberá detener e iniciar el host.
Para configurar el puerto de envío de prioridad media y baja
Use el Explorador de Windows para crear un directorio denominado "SendLowMediumPriority" en el directorio del proyecto BasicXMLEnvelope .
En la consola de administración de BizTalk Server, expanda la aplicación BasicXMLEnvelope, haga clic con el botón derecho en Puertos de envío, seleccione Nuevo y, a continuación, haga clic en Estática unidireccional.
En el cuadro de diálogo Propiedades del puerto de envío, establezca el nombre del puerto en "SendLowMediumPriority".
En Tipo de transporte, seleccione ARCHIVO y, a continuación, haga clic en Configurar. Defina el directorio creado anteriormente como la carpeta de destino. Haga clic en Aceptar para cerrar.
Haga clic en Filtros y agregue tres expresiones de filtro:
BTS. MessageType == http://BasicXMLEnvelope#Error y
BasicXMLEnvelope.PropertySchema.Priority == Low Or
BasicXMLEnvelope.PropertySchema.Priority == Medium
Haga clic en Aceptar para completar la configuración del puerto de envío de prioridad baja y media.
Para configurar el puerto de envío de prioridad alta
Use el Explorador de Windows para crear un directorio denominado "SendHighPriority" en el directorio del proyecto BasicXMLEnvelope .
En la consola de administración de BizTalk Server, expanda la aplicación BasicXMLEnvelope, haga clic con el botón derecho en Puertos de envío, seleccione Nuevo y, a continuación, haga clic en Estática unidireccional.
En el cuadro de diálogo Propiedades del puerto de envío , establezca el nombre del puerto en "SendHighPriority".
En Tipo de transporte, seleccione ARCHIVO y, a continuación, haga clic en Configurar. Defina el directorio creado anteriormente como la carpeta de destino. Haga clic en Aceptar para cerrar.
Haga clic en Filtros y agregue dos expresiones de filtro:
BTS. MessageType == http://BasicXMLEnvelope#Error y
BasicXMLEnvelope.PropertySchema.Priority == High
Haga clic en Aceptar para completar la configuración del puerto de envío de alta prioridad.
Para probar la solución de enrutamiento
En la consola de administración de BizTalk Server, expanda el grupo Aplicaciones, haga clic con el botón derecho en la aplicación BasicXMLEnvelope y, a continuación, haga clic en Iniciar. Cuando se le pida que confirme, haga clic en Iniciar. Se darán de alta los nuevos puertos de envío.
Coloque el mensaje de prueba en la ubicación de recepción. Observe cómo se enrutan los mensajes de error a las distintas ubicaciones de envío:
Los mensajes de error con prioridad baja, media o alta que no tengan errores al procesarse se enrutan a la ubicación de envío original (configurada en el ejemplo principal) y a las ubicaciones de envío por prioridad. Para los mensajes con prioridad media o baja, aparece una copia en la ubicación de envío original y en la ubicación de envío de prioridad media o baja.
Si el procesamiento de intercambio recuperable está habilitado, los mensajes de error con errores no se enrutan, y los mensajes sin errores se enrutan correctamente según lo esperado. Los mensajes con errores no se enrutan porque este tipo de mensaje no coincide con el tipo usado en los filtros configurados.
Consulte también
Procesamiento de intercambio recuperable
Promoción de propiedades
CBRSample (ejemplo de BizTalk Server)