Créer des emplacements de réception MSMQ et des ports d’envoi par programmation
Cette rubrique décrit l'utilisation de WMI afin de créer un port ou un emplacement pour l'adaptateur MSMQ.
Pour plus d’informations, consultez Création d’un emplacement de réception avec une configuration de planification Datetime à l’aide de WMI dans l’aide de l’interface utilisateur et informations de référence sur l’espace de noms d’API des développeurs.
Définition de valeurs de propriétés
Le processus de création d'un port ou d'un emplacement est toujours le même :
Création d'un objet du type approprié.
Définition des valeurs des propriétés sur l'objet.
Validation des valeurs de l'objet dans la base de données.
Tous les adaptateurs ont certaines propriétés, telles que HostName, en commun. Vous pouvez les définir en les attribuant directement à l'objet. Le code C# suivant illustre un cas classique :
objReceiveLocation["HostName"] = "BizTalkServerApplication";
Vous attribuez des valeurs aux propriétés qui ne sont pas communes à tous les adaptateurs. Pour ce faire, vous devez créer un document XML dans une chaîne, puis attribuer celle-ci à la propriété CustomCfg. Le code C# suivant illustre un cas classique pour un adaptateur FILE :
objReceiveLocation["CustomCfg"] =
@"<CustomProps>"
+ @"<BatchSize>20</BatchSize>"
+ @"<FileMask>*.xml</FileMask>"
+ @"<FileNetFailRetryCount>5</FileNetFailRetryCount>"
+ @"<FileNetFailRetryInt>5</FileNetFailRetryInt>"
+ @"</CustomProps>";
Les noms des balises présentes dans l'élément CustomProps représentent les noms internes que l'adaptateur utilise pour les propriétés.
L'adaptateur MSMQ possède une balise unique, AdapterConfig, qui se trouve à l'intérieur de la balise CustomProps. La balise AdapterConfig contient une chaîne de balises XML pour les valeurs des propriétés personnalisées incluses dans une balise Config. Toutefois, les balises sont encodées : «< » remplace «< » et «> » remplace «> ». Par exemple, le XML d'un sous-ensemble de l'adaptateur associé à des propriétés MSMQ peut s'afficher comme suit :
<Config>
<batchSize>40</batchSize>
</Config>
Notez que l’attribut vt n’est pas utilisé. La chaîne affectée à la propriété CustomCfg s’affiche comme suit après l’encodage :
<CustomProps><AdapterConfig vt="8"><Config><batchSize>40</batchSize></Config></AdapterConfig></CustomProps>
Noms des propriétés personnalisées
Le tableau suivant décrit les noms internes des propriétés personnalisées d’envoi de l’adaptateur MSMQ.
Envoyer le nom de la propriété personnalisée | Nom complet |
---|---|
acknowledgeType | Type d'accusé de réception |
administrationQueue | File d'attente d'administration |
certificat | Empreinte de certificat |
encryptionAlgorithm | Algorithme de chiffrement |
maximumMessageSize | Taille maximale message (en Ko) |
mot de passe | Mot de passe |
priority | Priorité du message |
queue | File d’attente de destination |
récupérables | Récupérable |
segmentationSupport | Prise en charge de la segmentation |
sendBatchSize | Taille du lot |
sendQueueName | File d’attente de destination |
timeOut | Délai d'expiration |
timeOutUnits | Unité délai d'expiration |
transactional | Transactionnelle |
useAuthentication | Utiliser l'authentification |
useDeadLetterQueue | Utiliser file d'attente messages non distribués |
useJournalQueue | Utiliser file d'attente journal |
userName | User Name |
Le tableau suivant décrit les noms internes des propriétés personnalisées receive de l’adaptateur MSMQ.
Nom de la propriété personnalisée de réception | Nom complet |
---|---|
batchSize | Taille du lot |
Mot de passe | Mot de passe |
File d'attente | File d'attente |
serialProcessing | Traitement en série |
Transactionnelle | Transactionnelle |
userName | User Name |
Exemple de code
Le programme C# suivant permet de créer un emplacement de réception unique pour l'adaptateur MSMQ. Il considère que le port de réception, à savoir ReceivePort1, existe et utilise une fonction d'assistance pour coder et mettre en forme les propriétés personnalisées.
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);
}
}
}
}