Leer en inglés

Compartir a través de


MQSCorrelationSetOrchestration (ejemplo de BizTalk Server)

El ejemplo MQSCorrelationSetOrchestration muestra cómo usar el identificador de correlación MQSeries para correlacionar los mensajes enviados a una cola de MQSeries de vuelta a una orquestación en ejecución. La orquestación establece el identificador de correlación mqSeries y los valores de identificador de mensaje mediante las propiedades MQMD_CorrelId y MQMD_MsgID . El administrador de cola de MQSeries copia el valor de MessageID en la propiedad CorrelationID del mensaje.

Requisitos previos

En este ejemplo se supone que ha instalado IBM WebSphere MQSeries en el mismo servidor que está ejecutando BizTalk Server.

Descripción del ejemplo

En este ejemplo se muestra cómo establecer un identificador de mensaje y de correlación en un mensaje enviado a un servidor IBM WebSphere MQSeries Server. Es un método que se puede utilizar para correlacionar un mensaje de vuelta a una instancia de orquestación en ejecución. Cuando el administrador de cola de MQSeries recibe el mensaje, copia el valor de MessageID en la propiedad CorrelationID del mensaje. A continuación, este CorrelationID (MQMD_CorrelId) se usa en la orquestación para asociar el mensaje de respuesta en MQSeries con la instancia usada para enviar mensajes a MQSeries.

Cómo se ha diseñado este ejemplo y por qué

En este ejemplo se muestra un escenario en el que un documento que una orquestación está procesando puede enviarse a una cola MQSeries (supuestamente para otro procesamiento) y devolverse a la orquestación en ejecución.

Ubicación del ejemplo

<Ruta> de acceso de ejemplos\AdaptersUsage\MQSeriesAdapter\MQSCorrelationSetOrchestration

En la tabla siguiente se enumeran los archivos del ejemplo y se describe su propósito.

Archivo Descripción
MQSCorrelationSetOrchestration.btproj,

MQSCorrelationSetOrchestration.sln
Archivos de proyectos y soluciones para la aplicación.
MQSCorrelationSetOrchestration.odx La orquestación de la aplicación.
MQSCorrelationSetOrchestration.snk Archivo de clave de nombre seguro.
Setup.bat Crea e inicializa este ejemplo.

Uso del ejemplo

Incorpore la lógica utilizada en este ejemplo si necesita enviar un mensaje a MQSeries Server como uno de los pasos en el flujo de trabajo global.

Para crear la cola MQSeries mediante WebSphere MQ Explorer

  1. Haga clic en Inicio, seleccione Programas, IBM WebSphere MQ y, a continuación, haga clic en WebSphere MQ Explorer.

  2. Haga doble clic en Administradores de colas y, a continuación, haga doble clic en el administrador de colas predeterminado. El administrador de colas predeterminado se denomina normalmente QM_<machine_name> donde machine_name es el nombre del equipo.

  3. Haga clic con el botón derecho en Colas, seleccione Nuevoy, a continuación, haga clic en Cola local.

  4. En el cuadro de diálogo Crear cola local , en Nombre de cola, escriba "MQCorrelation" y, a continuación, haga clic en Aceptar.

Para crear la ubicación de recepción y la cola de MQSeries

  1. Abra la consola de administración de BizTalk Server.

  2. Expanda administración de BizTalk Server, grupo de BizTalk, aplicaciones y, a continuación, expanda la aplicación necesaria.

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

  4. En el cuadro de diálogo Propiedades de puerto de recepción unidireccional , en el cuadro Nombre , escriba "MQIn" y haga clic en Aceptar.

  5. En el panel izquierdo, haga clic en la pestaña Ubicaciones de recepción y, a continuación, haga clic en Nuevo.

  6. En el cuadro de diálogo Propiedades de ubicación de recepción , en el cuadro Nombre , escriba "MQIn".

  7. En el cuadro Tipo de transporte , seleccione MQSeries.

  8. En el cuadro Controlador de recepción , seleccione BizTalkServerApplication.

  9. En el cuadro Canalización de recepción , seleccione Microsoft.BizTalk.DefaultPipelines.PassThruReceive.

  10. Haga clic en Configurar.

  11. En el cuadro de diálogo Propiedades de transporte de MQSeries , en el cuadro Intervalo de sondeo , escriba "10".

  12. En el cuadro Definición de cola , haga clic en el botón de puntos suspensivos (...) .

  13. En el cuadro de diálogo Definición de cola , en el cuadro Nombre del servidor , escriba el nombre del equipo.

  14. En el cuadro Administrador de colas , seleccione el administrador de colas predeterminado.

  15. En el cuadro Cola , escriba "MQCorrelation" y, a continuación, haga clic en Exportar.

  16. En el cuadro de diálogo Exportar , haga clic en Crear cola y, a continuación, haga clic enAceptaro Listo hasta que haya salido de todos los cuadros de diálogo.

Para crear el puerto de envío en MQSeries

  1. Haga clic con el botón derecho en Puertos de envío, seleccione Nuevoy, a continuación, haga clic en Puerto de envío unidireccional estático.

  2. En el cuadro de diálogo Propiedades del puerto de envío, en el cuadro Nombre , escriba "MQOut".

  3. En el cuadro Tipo de transporte , seleccione MQSeries.

  4. En el cuadro Enviar canalización , seleccione Microsoft.BizTalk.DefaultPipelines.PassThruTransmit.

  5. Haga clic en Configurar.

  6. En el cuadro de diálogo Propiedades de transporte de MQSeries , en el cuadro Definición de cola , haga clic en el botón de puntos suspensivos (...) .

  7. En el cuadro de diálogo Definición de cola , en el cuadro Nombre del servidor , escriba el nombre del equipo.

  8. En el cuadro Administrador de colas , seleccione el administrador de colas predeterminado.

  9. En el cuadro Cola , escriba "MQCorrelation" y, a continuación, haga clic en Aceptar.

  10. Haga clic en Aceptar hasta que haya salido de todos los cuadros de diálogo.

Para habilitar la ubicación de recepción e iniciar el puerto de envío

  1. En la consola de administración de BizTalk Server, haga clic en Puertos de recepción.

  2. En el panel de detalles, haga clic con el botón derecho en la ubicación de recepción de MQIn y haga clic en Habilitar.

  3. En el panel de detalles, haga clic con el botón derecho en el puerto de envío MQOut y haga clic en Inicio.

Para crear las carpetas usadas por la aplicación

  1. En la unidad C:\ , cree una carpeta denominada "temp" si aún no existe.

  2. En el directorio C:\temp , cree carpetas denominadas "Pickup" y "Dropit".

Generar e implementar este ejemplo

  1. En una ventana de comandos, desplácese a la siguiente carpeta:

    <Samples Path>\AdaptersUsage\MQSeriesAdapter\MQSCorrelationSetOrchestration

  2. Ejecute el archivo Setup.bat que realiza las acciones siguientes:

    1. Crea una clave de nombre seguro para el proyecto.

    2. Compila e implementa el proyecto de orquestación.

    3. Crea un puerto de envío y un puerto de recepción con el adaptador de archivo.

Enlazar e iniciar la orquestación

  1. En la consola de administración de BizTalk Server, expanda la carpeta Orquestaciones.

  2. En el panel de detalles, haga clic con el botón derecho en la orquestación MQSCorrelationSetOrchestration y, a continuación, haga clic en Enlazar.

  3. Enlace los puertos de orquestación con los siguientes puertos de envío y ubicaciones de recepción:

    Puerto de orquestación Puerto de mensajería/ubicación de recepción
    FileReceivePort MQSCorrelationSetOrchestration.FileReceivePort
    MQSeriesResponseReceivePort MQIn
    MQSeriesRequestSendPort MQOut
    FileSendPort MQSCorrelationSetOrchestration.FileSendPort
  4. Haga clic en Host.

  5. En el cuadro Host , seleccione BizTalkServerApplication y haga clic en Aceptar.

  6. En Puertos de envío, haga clic con el botón derecho en MQSCorrelationSetOrchestration.FileSendPort y seleccione Iniciar.

  7. En Ubicaciones de recepción, haga clic con el botón derecho en MQSCorrelationSetOrchestration.FileReceivePort y seleccione Habilitar.

  8. Haga clic con el botón derecho en la orquestación y haga clic en Iniciar.

    Nota

    Además, iniciar la orquestación da de alta la orquestación de forma automática.

Para probar la aplicación

  1. Coloque un archivo en la carpeta C:\Temp\Pickup .

  2. Examine el archivo en la carpeta C:\Temp\Dropit .

    Nota

    Si deshabilita la ubicación de recepción de MQIn , puede examinar el mensaje en WebSphere MQ Explorer y ver que se establecen los identificadores de mensaje y correlación. Para ello, inicie WebSphere MQ Explorer y examine el mensaje colocado en la cola MQCorrelation . Los identificadores de mensaje y correlación se muestran en la pestaña Identificadores del cuadro de diálogo Propiedades del mensaje.

    Nota

    En una situación de producción, deseará asignar un identificador único a cada mensaje que se envía a la cola de MQSeries. Esto se puede hacer modificando la forma de expresión en la orquestación. Cambie las líneas siguientes para establecer estas propiedades en un identificador único de 24 bytes:

    MQSeriesRequestSendMessageModified(MQSeries.MQMD_MsgId) = "111213141516171819202122232425262728293031323334";

    MQSeriesRequestSendMessageModified(MQSeries.MQMD_CorrelId) = "111213141516171819202122232425262728293031323334";

    Si desea establecer un identificador de bytes único de 24 bytes para estas propiedades, consulte la sección Para crear un identificador de bytes único de 24 bytes para los mensajes enviados a MQSeries.

Para crear un identificador de 24 bytes único para mensajes enviados a MQSeries

  1. Cree un nuevo proyecto de biblioteca de clases de C# en Visual Studio.

  2. Pegue el código siguiente en el archivo .cs para la clase:

    using System;  
    using System.Collections.Generic;  
    using System.Text;  
    using System.Security.Cryptography;  
    
    namespace MQId  
    {[Serializable]  
        public class GetId  
        {  
            RNGCryptoServiceProvider randomCryptoString = new RNGCryptoServiceProvider();  
    
            public string getGuidstr()  
            {  
                byte[] newGuid = GetRandomData(24);  
                return ConvertToHex(newGuid);  
            }  
    
            private byte[] GetRandomData(int keySize)  
            {  
                byte[] randomData = new byte[keySize];  
                randomCryptoString.GetBytes(randomData);  
                return randomData;  
            }  
    
            private string ConvertToHex(byte[] key)  
            {  
                StringBuilder hexString = new StringBuilder();  
                for (int i = 0; i < key.Length; ++i)  
                {  
                    hexString.Append(String.Format("{0:X2}", key[i]));  
                }  
                return hexString.ToString();  
            }  
        }  
    }  
    
  3. Especifique un espacio de nombres predeterminado de MQId y un nombre de ensamblado de GetId en la página Aplicación de propiedades del proyecto.

  4. Especifique un archivo de clave de nombre seguro para firmar el ensamblado en la página Firma de propiedades del proyecto y, a continuación, compile el proyecto.

  5. Use la herramienta de caché global de ensamblados (gacutil.exe) para cargar el ensamblado compilado en la GAC (nombre gacutil /i < del archivo >dll compilado).

  6. Agregue una referencia al ensamblado GetId en el proyecto de BizTalk para este ejemplo.

  7. Agregue dos variables para la orquestación usada en este ejemplo:

    Nombre de variable (identificador) Tipo
    GetId MQId.GetId
    strGuid System.String
  8. Pegue el código siguiente en la forma de expresión usada en la orquestación de este ejemplo; este código debe invalidar el código existente:

    GetId = new MQId.GetId();  
    strGuid = GetId.getGuidstr();  
    MQSeriesRequestSendMessageModified = MQSeriesRequestSendMessage;  
    MQSeriesRequestSendMessageModified(MQSeries.MQMD_MsgId) = strGuid;  
    MQSeriesRequestSendMessageModified(MQSeries.MQMD_CorrelId) = strGuid;  
    
  9. Detenga y quite la orquestación en la consola de administración de BizTalk Server si ya está implementada. A continuación, siga los pasos descritos en las secciones Compilación e implementación de este ejemplo, Enlace e inicio de Orchestration y Para probar la aplicación.

    Nota

    El uso de este método para crear un identificador de 24 bytes único para los mensajes enviados a MQSeries no garantiza al 100% identificadores únicos para todos los mensajes que se envían, pero la probabilidad de identificadores de mensaje duplicados es muy baja. Si las necesidades empresariales requieren una garantía al 100% de que no se duplicará ningún identificador de mensaje, entonces será necesario implementar un código personalizado diferente para garantizar esta funcionalidad.

Clases o métodos usados en el ejemplo

En este ejemplo no se utilizan de manera explícita ninguna clase o método.

Consulte también

Correlación de mensajes mediante procedimientos de solicitud-respuesta
Ejemplos del adaptador de MQSeries