Programmgesteuertes Erstellen von MSMQ-Empfangsspeicherorten und Sendeports
In diesem Thema wird erläutert, wie mithilfe von WMI ein Port oder Speicherort für den MSMQ-Adapter erstellt wird.
Weitere Informationen finden Sie unter Erstellen eines Empfangsspeicherorts mit einer Datetime-Zeitplankonfiguration mithilfe von WMI in der Referenz zu API-Namespace für Benutzeroberflächen und Entwickler.For more information, see Creating a Receive Location with a Datetime Schedule Configuration Using WMI in the UI guidance and developers API namespace reference.
Festlegen von Eigenschaftswerten
Der Prozess zum Erstellen eines Ports oder Speicherorts ist immer identisch:
Erstellen Sie ein Objekt des gewünschten Typs.
Legen Sie die Werte von Eigenschaften für das Objekt fest.
Führen Sie ein Commit der Objektwerte in die Datenbank aus.
Alle Adapter haben bestimmte Eigenschaften, z. B. HostName, gemeinsam. Diese gemeinsamen Eigenschaften werden durch direkte Zuweisung zum Objekt festgelegt. Der folgende C#-Code zeigt einen typischen Fall:
objReceiveLocation["HostName"] = "BizTalkServerApplication";
Sie weisen Eigenschaften, die nicht alle Adapter besitzen, Werte zu. Sie erstellen ein XML-Dokument in einer Zeichenfolge und weisen diese Zeichenfolge der Eigenschaft CustomCfg zu. Der folgende C#-Code zeigt einen typischen Fall für einen Dateiadapter:
objReceiveLocation["CustomCfg"] =
@"<CustomProps>"
+ @"<BatchSize>20</BatchSize>"
+ @"<FileMask>*.xml</FileMask>"
+ @"<FileNetFailRetryCount>5</FileNetFailRetryCount>"
+ @"<FileNetFailRetryInt>5</FileNetFailRetryInt>"
+ @"</CustomProps>";
Die Namen der Tags im CustomProps-Element sind die internen Namen, die vom Adapter für die Eigenschaften verwendet werden.
Der MSMQ-Adapter besitzt ein einzelnes Tag, AdapterConfig, innerhalb des CustomProps-Tags. Das AdapterConfig-Tag enthält eine Zeichenfolge aus XML-Tags für die in einem Config-Tag enthaltenen Werte der benutzerdefinierten Eigenschaften. Die Tags sind jedoch codiert: "<" ersetzt "<" und ">" ersetzt ">". So könnte der XML-Code für eine Teilmenge der Eigenschaften des Adapters für MSMQ wie folgt aussehen:
<Config>
<batchSize>40</batchSize>
</Config>
Beachten Sie, dass das vt-Attribut nicht verwendet wird. Die der CustomCfg-Eigenschaft zugewiesene Zeichenfolge wird nach der Codierung wie folgt angezeigt:
<CustomProps><AdapterConfig vt="8"><Config><batchSize>40</batchSize></Config></AdapterConfig></CustomProps>
Namen benutzerdefinierter Eigenschaften
In der folgenden Tabelle werden die internen Namen der benutzerdefinierten Eigenschaften des MSMQ-Adapters "Senden" beschrieben.
Name der benutzerdefinierten „Send“-Eigenschaft | Anzeigename |
---|---|
acknowledgeType | Bestätigungstyp |
administrationQueue | Verwaltungswarteschlange |
Zertifikat | Zertifikatfingerabdruck |
encryptionAlgorithm | Verschlüsselungsalgorithmus |
maximumMessageSize | Maximale Nachrichtengröße (in KB) |
password | Kennwort |
priority | Nachrichtenpriorität |
queue | Zielwarteschlange |
Wiederherstellbar | Wiederherstellbar |
segmentationSupport | Segmentierung unterstützen |
sendBatchSize | Batchgröße |
sendQueueName | Zielwarteschlange |
timeOut | Timeout |
timeOutUnits | Timeouteinheit |
transactional | Transaktionsreplikation |
useAuthentication | Authentifizierung verwenden |
useDeadLetterQueue | Warteschlange der unzustellbaren Nachrichten verwenden |
useJournalQueue | Journalwarteschlange verwenden |
userName | Benutzername |
In der folgenden Tabelle werden die internen Namen der benutzerdefinierten Eigenschaften des MSMQ-Adapters Receive beschrieben.
Name der benutzerdefinierten „Receive“-Eigenschaft | Anzeigename |
---|---|
batchSize | Batchgröße |
Kennwort | Kennwort |
Warteschlange | Warteschlange |
serialProcessing | Serielle Verarbeitung |
Transaktionsreplikation | Transaktionsreplikation |
userName | Benutzername |
Beispielcode
Das folgende C#-Programm erstellt einen einzigen Empfangsspeicherort für den MSMQ-Adapter. Es setzt voraus, dass der Empfangsport ReceivePort1 vorhanden ist und verwendet eine Hilfsfunktion zum Codieren und Formatieren der benutzerdefinierten Eigenschaften.
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);
}
}
}
}