Compartir a través de


Creación de ubicaciones de recepción y puertos de envío de MSMQ mediante programación

En este tema se explica cómo usar WMI para crear un puerto o una ubicación para el adaptador de MSMQ.

Para obtener más información, consulte Creación de una ubicación de recepción con una configuración de programación de fecha y hora mediante WMI en la guía de interfaz de usuario y la referencia del espacio de nombres de api de desarrolladores.

Establecer valores de propiedad

El proceso de creación un puerto o una ubicación es siempre el mismo:

  1. Crear un objeto del tipo adecuado.

  2. Establecer el valor de propiedades en el objeto.

  3. Confirmar los valores del objeto en la base de datos.

    Todos los adaptadores tienen ciertas propiedades, como HostName, en común. Establezca estas propiedades comunes mediante su asignación directa en el objeto. En el siguiente código C# se muestra un caso típico:

objReceiveLocation["HostName"] = "BizTalkServerApplication";  

Asigne los valores a las propiedades que no comparten todos los adaptadores. Cree un documento XML en una cadena y asigne dicha cadena a la propiedad CustomCfg. En el siguiente código C# se muestra un caso típico para un adaptador de archivos:

objReceiveLocation["CustomCfg"] =   
        @"<CustomProps>"  
        + @"<BatchSize>20</BatchSize>"  
        + @"<FileMask>*.xml</FileMask>"  
        + @"<FileNetFailRetryCount>5</FileNetFailRetryCount>"  
        + @"<FileNetFailRetryInt>5</FileNetFailRetryInt>"  
        + @"</CustomProps>";  

Los nombres de las etiquetas del elemento CustomProps son nombres internos que el adaptador utiliza para las propiedades.

El adaptador de MSMQ tiene una única etiqueta, AdapterConfig, dentro de la etiqueta CustomProps. La etiquete AdapterConfig contiene una cadena de etiquetas XML para los valores de propiedad personalizados incluidos en una etiqueta Config. Sin embargo, las etiquetas están codificadas: "<" reemplaza "<" y ">" reemplaza a ">". Por ejemplo, el XML de un subconjunto del adaptador de propiedades de MSMQ puede aparecer de la siguiente forma:

<Config>  
    <batchSize>40</batchSize>  
</Config>  

Observe que no se usa el atributo vt . La cadena asignada a la propiedad CustomCfg aparece de la siguiente manera después de la codificación:

<CustomProps><AdapterConfig vt="8"><Config><batchSize>40</batchSize></Config></AdapterConfig></CustomProps>  

Nombres de propiedades personalizadas

En la tabla siguiente se describen los nombres internos del adaptador MSMQ Enviar propiedades personalizadas.

Nombre de propiedad personalizada Enviar Nombre para mostrar
acknowledgeType Tipo de confirmación
administrationQueue Cola de administración
certificado Huella digital del certificado
encryptionAlgorithm Algoritmo de cifrado
maximumMessageSize Tamaño máximo de mensaje (en KB)
password Contraseña
priority Prioridad del mensaje
cola Cola de destino
recuperables Recuperable
segmentationSupport Admitir segmentación
sendBatchSize Tamaño de lote
sendQueueName Cola de destino
timeOut Tiempo de espera
timeOutUnits Unidad de tiempo de espera
transactional Transaccional
useAuthentication Utilizar autenticación
useDeadLetterQueue Usar cola de mensajes con problemas de entrega
useJournalQueue Usar cola de diario
userName Nombre de usuario

En la tabla siguiente se describen los nombres internos del adaptador MSMQ Recibir propiedades personalizadas.

Nombre de propiedad personalizada Recibir Nombre para mostrar
batchSize Tamaño de lote
Contraseña Contraseña
Cola Cola
serialProcessing Procesamiento en serie
Transaccional Transaccional
userName Nombre de usuario

Código de ejemplo

El siguiente programa C# crea una ubicación de recepción única para el adaptador de MSMQ. Se supone que el puerto de recepción, ReceivePort1, sale y usa una función del asistente para codificar y aplicar el formato a las propiedades personalizadas.

using System;  
using System.Management;  
using System.Text;  
  
namespace CreateReceive  
{  
    ///   
    /// Program to create a receive location.  
    ///   
    class CreateReceive  
    {  
        /// The main entry point for the application.  
  
        [STAThread]  
        static void Main()  
        {  
            // Custom properties & values  
            string cfg =   
                    @"<queue>FORMATNAME:DIRECT=OS:MYMACHINE02\PRIVATE$\QUEUE2</queue>"  
                    + @"<batchSize>40</batchSize>"  
                    + @"<transactional>true</transactional>"  
                    + @"<serialProcessing>false</serialProcessing>";  
  
            CreateReceiveLocation (  
                    "Code Created Location",  
                    "ReceivePort1",  
                    "MSMQ",  
                    "BizTalkServerApplication",  
                    EncodeCustomProps(cfg),  // Encode the custom props  
                    "Microsoft.BizTalk.DefaultPipelines.PassThruReceive,"   
                            + " Microsoft.BizTalk.DefaultPipelines,"   
                            + " Version=3.0.1.0, Culture=neutral,"   
                            + " PublicKeyToken=31bf3856ad364e35",  
                    @"FORMATNAME:DIRECT=OS:MYMACHINE\PRIVATE$\QUEUE2"  
                );  
  
        }  
  
        static string EncodeCustomProps (string cp) {  
  
            // Enclose the properties and values in a Config> tag.  
            StringBuilder tmp = new StringBuilder( @"<Config>" + cp + @"</Config>");  
  
            // Encode the string  
            tmp = tmp.Replace("<","<");  
            tmp = tmp.Replace(">",">");  
  
            return (  
                // Enclose the encoded string with necessary tags  
                "<CustomProps><AdapterConfig vt=\"8\">"  
                + tmp.ToString()   
                + "</AdapterConfig></CustomProps>");  
  
        }  
  
        static void CreateReceiveLocation (  
            string name,            // Location name  
            string port,            // Receive port, already exists  
            string adapterName,     // The transport type  
            string hostName,        // BTS host  
            string customCfg,       // Encoded custom properties  
            string pipeline,        // Full specification of pipeline  
            string inboundTransport)// Inbound transport url  
        {  
            try   
            {  
                // Create options to store options in management object  
                PutOptions options = new PutOptions();  
                options.Type = PutType.CreateOnly;  
  
                // Create a management object  
                // Get the class  
                ManagementClass objReceiveLocationClass =   
                           new ManagementClass(  
                               "root\\MicrosoftBizTalkServer",   
                               "MSBTS_ReceiveLocation",   
                               null);  
                // Create an instance of the member of the class  
                ManagementObject objReceiveLocation =  
                          objReceiveLocationClass.CreateInstance();  
  
                // Fill in the properties  
                objReceiveLocation["Name"] = name;  
                objReceiveLocation["ReceivePortName"] = port;  
                objReceiveLocation["AdapterName"] = adapterName;  
                objReceiveLocation["HostName"] = hostName;  
                objReceiveLocation["PipelineName"] = pipeline;  
                objReceiveLocation["CustomCfg"] = customCfg;  
                objReceiveLocation["IsDisabled"] = true;  
                objReceiveLocation["InBoundTransportURL"] = inboundTransport;  
  
                // Put the options -- creates the receive location  
                objReceiveLocation.Put(options);  
            }  
            catch (Exception excep)  
            {  
                System.Console.WriteLine("Create Receive Location ({0}) failed - {1}",  
                                                name, excep.Message);  
            }  
        }  
    }  
}