Condividi tramite


Creare percorsi di ricezione MSMQ e porte di trasmissione a livello di codice

In questo argomento viene illustrato come utilizzare WMI per creare una porta o un indirizzo per l'adapter MSMQ.

Per altre informazioni, vedere Creating a Receive Location with a Datetime Schedule Configuration Using WMI (Creazione di un percorso di ricezione con una configurazione di pianificazione datetime tramite WMI ) nelle linee guida dell'interfaccia utente e nelle informazioni di riferimento sugli spazi dei nomi delle API per sviluppatori.

Impostazione dei valori delle proprietà

Il processo di creazione di una porta o di un indirizzo è sempre lo stesso:

  1. Creare un oggetto del tipo corretto.

  2. Impostare il valore delle proprietà dell'oggetto.

  3. Eseguire il commit dei valori dell'oggetto nel database.

    Tutte le schede hanno alcune proprietà, ad esempio HostName, in comune. È possibile impostare queste proprietà comuni assegnandole direttamente all'oggetto. Nel codice C# seguente viene illustrato un caso tipico:

objReceiveLocation["HostName"] = "BizTalkServerApplication";  

È necessario assegnare i valori alle proprietà non condivise da tutti gli adapter. Creare un documento XML in una stringa e assegnare tale stringa alla proprietà CustomCfg. Nel codice C# seguente viene illustrato un caso tipico per un adapter FILE:

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

I nomi dei tag dell'elemento CustomProps sono i nomi interni utilizzati dall'adapter per le proprietà.

L'adapter MSMQ include un singolo tag, AdapterConfig, all'interno del tag CustomProps. Il tag AdapterConfig contiene una stringa di tag XML per i valori delle proprietà personalizzate racchiusi in un tag Config. Tuttavia, i tag sono codificati: "<" sostituisce "<" e ">" sostituisce ">". Ad esempio, l'XML per un sottoinsieme dell'adapter per le proprietà MSMQ è simile al seguente:

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

Si noti che l'attributo vt non viene usato. La stringa assegnata alla proprietà CustomCfg viene visualizzata come segue dopo la codifica:

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

Nomi di proprietà personalizzate

Nella tabella seguente vengono descritti i nomi interni dell'adapter MSMQ Invia proprietà personalizzate.

Nome della proprietà personalizzata Send Nome visualizzato
acknowledgeType Tipo di riconoscimento
administrationQueue Coda di amministrazione
certificato Identificazione personale del certificato
encryptionAlgorithm Algoritmo di crittografia
maximumMessageSize Dimensione massima messaggio (in KB)
password Password
priority Priorità messaggio
coda Coda di destinazione
ripristinabili Recuperabile
segmentationSupport Supporto segmentazione
sendBatchSize Dimensioni batch
sendQueueName Coda di destinazione
timeOut Timeout
timeOutUnits Unità timeout
transactional Transazionale
useAuthentication Usa autenticazione
useDeadLetterQueue Usa coda di messaggi non recapitabili
useJournalQueue Usa coda diario
userName Nome utente

Nella tabella seguente vengono descritti i nomi interni dell'adapter MSMQ Ricevere proprietà personalizzate.

Nome della proprietà personalizzata Receive Nome visualizzato
batchSize Dimensioni batch
Password Password
Coda Coda
serialProcessing Elaborazione sequenziale
Transazionale Transazionale
userName Nome utente

Codice di esempio

Nel programma C# seguente viene creato un singolo indirizzo di ricezione per l'adapter MSMQ. Si presuppone che la porta di ricezione ReceivePort1 esista e utilizzi una funzione di supporto per codificare e formattare le proprietà personalizzate.

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);  
            }  
        }  
    }  
}