MQSCorrelationSetOrchestration (BizTalk Server-Beispiel)
Anhand des Beispiels MQSCorrelationSetOrchestration wird veranschaulicht, wie Sie den MQSeries-Korrelationsbezeichner zum Korrelieren von Nachrichten verwenden, die erst an eine MQSeries-Warteschlange und dann zurück an eine ausgeführte Orchestrierung gesendet werden. Die Orchestrierung legt die MQSeries-Korrelationsbezeichner- und Nachrichtenbezeichnerwerte mithilfe der Eigenschaften MQMD_CorrelId und MQMD_MsgID fest. Der MQSeries-Warteschlangen-Manager kopiert den Wert der Nachrichten-ID in die CorrelationID-Eigenschaft der Nachricht.
Voraussetzungen
In diesem Beispiel wird davon ausgegangen, dass Sie IBM WebSphere MQSeries auf demselben Server installiert haben, auf dem Sie BizTalk Server ausführen.
Ziel des Beispiels
In diesem Beispiel wird das Festlegen einer Nachrichten-ID und eines Korrelationsbezeichners in einer an den IBM WebSphere MQSeries-Server gesendeten Nachricht veranschaulicht. Dies ist eine Methode zum Korrelieren einer Nachricht mit einer ausgeführten Orchestrierungsinstanz. Wenn der MQSeries-Warteschlangen-Manager die Nachricht empfängt, kopiert er den Wert der Nachrichten-ID in die CorrelationID-Eigenschaft der Nachricht. Diese CorrelationID (MQMD_CorrelId) wird dann in der Orchestrierung verwendet, um die Antwortnachricht in MQSeries dem instance zuzuordnen, der zum Senden von Nachrichten an MQSeries verwendet wird.
Wie dieses Beispiel entworfen wird und warum
In diesem Beispiel wird ein Szenario dargestellt, in dem ein von einer Orchestrierung verarbeitetes Dokument (vermutlich zur weiteren Verarbeitung) an eine MQSeries-Warteschlange gesendet und wieder an die ausgeführte Orchestrierung zurückgegeben werden kann.
Speicherort dieses Beispiels
<Samples Path>\AdaptersUsage\MQSeriesAdapter\MQSCorrelationSetOrchestration
In der folgenden Tabelle werden die Dateien in diesem Beispiel samt Zweck beschrieben.
File | Beschreibung |
---|---|
MQSCorrelationSetOrchestration.btproj , MQSCorrelationSetOrchestration.sln |
Projekt- und Projektmappendateien für die Anwendung. |
MQSCorrelationSetOrchestration.odx | Die Orchestrierung der Anwendung |
MQSCorrelationSetOrchestration.snk | Die Schlüsseldatei für starke Benennung. |
Setup.bat | Erstellt und initialisiert dieses Beispiel. |
Verwenden dieses Beispiels
Integrieren Sie die in diesem Beispiel verwendete Logik, wenn Sie im Rahmen eines Workflows in einem der Schritte eine Nachricht an MQSeries Server senden müssen.
So erstellen Sie die MQSeries-Warteschlange mit WebSphere MQ Explorer
Klicken Sie auf Start, zeigen Sie auf Programme, zeigen Sie auf IBM WebSphere MQ, und klicken Sie dann auf WebSphere MQ Explorer.
Doppelklicken Sie auf Warteschlangen-Manager, und doppelklicken Sie dann auf den Standardwarteschlangen-Manager. Der Standardwarteschlangen-Manager heißt in der Regel QM_<machine_name> wobei machine_name der Name Ihres Computers ist.
Klicken Sie mit der rechten Maustaste auf Warteschlangen, zeigen Sie auf Neu, und klicken Sie dann auf Lokale Warteschlange.
Geben Sie im Dialogfeld Lokale Warteschlange erstellen unter Warteschlangenname den Namen "MQCorrelation" ein, und klicken Sie dann auf OK.
So erstellen Sie den Empfangsspeicherort und die MQSeries-Warteschlange
Öffnen Sie die BizTalk Server-Verwaltungskonsole.
Erweitern Sie BizTalk Server Verwaltung, BizTalk-Gruppe, Anwendungen und dann die erforderliche Anwendung.
Klicken Sie mit der rechten Maustaste auf Empfangsports, zeigen Sie auf Neu, und klicken Sie dann auf Unidirektionale Empfangsport.
Geben Sie im Dialogfeld Eigenschaften für unidirektionale Empfangsports im Feld Name "MQIn" ein, und klicken Sie auf OK.
Klicken Sie im linken Bereich auf die Registerkarte Empfangsspeicherorte , und klicken Sie dann auf Neu.
Geben Sie im Dialogfeld Eigenschaften des Empfangsspeicherorts im Feld Name den Namen "MQIn" ein.
Wählen Sie im Feld Transporttyp die Option MQSeries aus.
Wählen Sie im Feld Empfangshandler die Option BizTalkServerAnwendung aus.
Wählen Sie im Feld Empfangspipelinedie Option Microsoft.BizTalk.DefaultPipelines.PassThruReceive aus.
Klicken Sie auf Konfigurieren.
Geben Sie im Dialogfeld MQSeries-Transporteigenschaften im Feld Abrufintervall den Wert "10" ein.
Klicken Sie im Feld Warteschlangendefinition auf die Schaltfläche mit den Auslassungspunkten (...).
Geben Sie im Dialogfeld Warteschlangendefinition im Feld Servername den Computernamen ein.
Wählen Sie im Feld Warteschlangen-Manager den Standardwarteschlangen-Manager aus.
Geben Sie im Feld Warteschlange "MQCorrelation" ein, und klicken Sie dann auf Exportieren.
Klicken Sie im Dialogfeld Exportieren auf Warteschlange erstellen, und klicken Sie dann aufOKoder Fertig , bis Sie alle Dialogfelder beendet haben.
So erstellen Sie den Sendeport für MQSeries
Klicken Sie mit der rechten Maustaste auf Sendeports, zeigen Sie auf Neu, und klicken Sie dann auf Statischer unidirektionale Sendeport.
Geben Sie im Dialogfeld Porteigenschaften senden im Feld Name den Namen "MQOut" ein.
Wählen Sie im Feld Transporttyp die Option MQSeries aus.
Wählen Sie im Feld Pipeline senden die Option Microsoft.BizTalk.DefaultPipelines.PassThruTransmit aus.
Klicken Sie auf Konfigurieren.
Klicken Sie im Dialogfeld MQSeries-Transporteigenschaften im Feld Warteschlangendefinition auf die Schaltfläche mit den Auslassungspunkten (...).
Geben Sie im Dialogfeld Warteschlangendefinition im Feld Servername den Computernamen ein.
Wählen Sie im Feld Warteschlangen-Manager den Standardwarteschlangen-Manager aus.
Geben Sie im Feld Warteschlange "MQCorrelation" ein, und klicken Sie dann auf OK.
Klicken Sie auf OK , bis Sie alle Dialogfelder beendet haben.
So aktivieren Sie den Empfangsspeicherort und starten den Sendeport
Klicken Sie in der BizTalk Server-Verwaltungskonsole auf Empfangsports.
Klicken Sie im Detailbereich mit der rechten Maustaste auf den MQIn-Empfangsspeicherort , und klicken Sie auf Aktivieren.
Klicken Sie im Detailbereich mit der rechten Maustaste auf den MQOut-Sendeport , und klicken Sie auf Start.
So erstellen Sie die von der Anwendung verwendeten Ordner
Erstellen Sie auf Ihrem Laufwerk "C:\ " einen Ordner mit dem Namen "temp", wenn er noch nicht vorhanden ist.
Erstellen Sie im Verzeichnis C:\temp die Ordner "Pickup" und "Dropit".
Erstellen und Bereitstellen dieses Beispiels
Navigieren Sie in einem Befehlsfenster zum folgenden Ordner:
<Samples Path>\AdaptersUsage\MQSeriesAdapter\MQSCorrelationSetOrchestration
Führen Sie die Datei "Setup.bat" aus, von der folgende Aktionen ausgeführt werden:
Sie erstellt einen Schlüssel mit starkem Namen für das Projekt.
Sie kompiliert das Orchestrierungsprojekt und stellt es bereit.
Sie erstellt einen Sendeport und einen Empfangsport mit dem Dateiadapter.
Binden und Starten der Orchestrierung
Erweitern Sie in der BizTalk Server-Verwaltungskonsole den Ordner Orchestrierungen.
Klicken Sie im Detailbereich mit der rechten Maustaste auf die Orchestrierung MQSCorrelationSetOrchestration , und klicken Sie dann auf Binden.
Binden Sie die Orchestrierungsports an folgende Sendeports und Empfangsspeicherorte:
Orchestrierungsport Messagingport/Empfangsspeicherort FileReceivePort MQSCorrelationSetOrchestration.FileReceivePort MQSeriesResponseReceivePort MQIn MQSeriesRequestSendPort MQOut FileSendPort MQSCorrelationSetOrchestration.FileSendPort Klicken Sie auf Host.
Wählen Sie im Feld Host die Option BizTalkServerAnwendung aus, und klicken Sie auf OK.
Klicken Sie unter Ports senden mit der rechten Maustaste auf MQSCorrelationSetOrchestration.FileSendPort, und wählen Sie dann Start aus.
Klicken Sie unter Empfangsspeicherorte mit der rechten Maustaste auf MQSCorrelationSetOrchestration.FileReceivePort , und wählen Sie dann Aktivieren aus.
Klicken Sie mit der rechten Maustaste auf die Orchestrierung, und klicken Sie dann auf Start.
Hinweis
Durch das Starten der Orchestrierung wird sie auch automatisch eingetragen.
So testen Sie die Anwendung
Speichern Sie eine Datei im Ordner C:\Temp\Pickup .
Untersuchen Sie die Datei im Ordner C:\Temp\Dropit .
Hinweis
Wenn Sie den MQIn-Empfangsspeicherort deaktivieren, können Sie die Nachricht in WebSphere MQ Explorer untersuchen und feststellen, dass die Nachrichten- und Korrelationsbezeichner festgelegt sind. Starten Sie hierzu die WebSphere MQ-Explorer, und untersuchen Sie die Nachricht in der MQCorrelation-Warteschlange. Die Nachrichten- und Korrelationsbezeichner werden auf der Registerkarte Bezeichner des DialogfeldsNachrichteneigenschaften angezeigt.
Hinweis
In einem Produktionsszenario möchten Sie möglicherweise jeder an die MQSeries-Warteschlange gesendeten Nachricht eine eindeutige ID zuweisen. Hierzu können Sie in der Orchestrierung die Form Ausdruck ändern. Ändern Sie die folgenden Zeilen, sodass diese Eigenschaften auf eine eindeutige 24-Byte-ID festgelegt werden:
MQSeriesRequestSendMessageModified(MQSeries.MQMD_MsgId) = "111213141516171819202122232425262728293031323334";
MQSeriesRequestSendMessageModified(MQSeries.MQMD_CorrelId) = "111213141516171819202122232425262728293031323334";
Wenn Sie eine eindeutige 24-Byte-ID für diese Eigenschaften festlegen möchten, lesen Sie den Abschnitt So erstellen Sie eine eindeutige 24-Byte-ID für Nachrichten, die an MQSeries gesendet werden.
So erstellen Sie eine eindeutige 24-Byte-ID für an MQSeries gesendete Nachrichten
Erstellen Sie ein neues C#-Klassenbibliotheksprojekt in Visual Studio.
Fügen Sie den folgenden Code in die CS-Datei für die Klasse ein:
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(); } } }
Geben Sie den StandardnamespaceMQId und den AssemblynamenGetId auf der Seite Anwendung des Projekts an.
Geben Sie eine Schlüsseldatei mit starkem Namen an, um die Assembly auf der Seite "Projekteigenschaften Signieren" zu signieren, und erstellen Sie dann das Projekt.
Verwenden Sie das globale Assemblycachetool (gacutil.exe), um die kompilierte Assembly in den GAC zu laden (gacutil /i <Name der kompilierten DLL-Datei>).
Fügen Sie der Assembly GetId im BizTalk-Projekt für dieses Beispiel einen Verweis hinzu.
Fügen Sie der in diesem Beispiel verwendeten Orchestrierung zwei Variablen hinzu:
Variablenname (Bezeichner) Typ GetId MQId.GetId strGuid System.String Fügen Sie den folgenden Code in die Form Ausdruck ein, die in der Orchestrierung in diesem Beispiel verwendet wird. Dieser Code sollte den vorhandenen Code überschreiben:
GetId = new MQId.GetId(); strGuid = GetId.getGuidstr(); MQSeriesRequestSendMessageModified = MQSeriesRequestSendMessage; MQSeriesRequestSendMessageModified(MQSeries.MQMD_MsgId) = strGuid; MQSeriesRequestSendMessageModified(MQSeries.MQMD_CorrelId) = strGuid;
Beenden und entfernen Sie die Orchestrierung in der BizTalk Server-Verwaltungskonsole, wenn sie bereits bereitgestellt wurde. Führen Sie dann die Schritte in den Abschnitten Erstellen und Bereitstellen dieses Beispiels aus, binden und starten Sie die Orchestrierung und So testen Sie die Anwendung.
Hinweis
Das Verwenden dieser Methode zum Erstellen einer eindeutigen 24-Byte-ID für an MQSeries gesendete Nachrichten stellt keine hundertprozentige Garantie dar, dass alle gesendeten Nachrichten eindeutige IDs aufweisen. Die Wahrscheinlichkeit, dass doppelte Nachrichten-IDs vorhanden sind, ist jedoch sehr gering. Wenn für ein Unternehmen hundertprozentig garantiert sein muss, dass keine doppelten Nachrichten-IDs vorhanden sind, müssen Sie verschiedene Formen von benutzerdefiniertem Code verwenden, um diese Funktionalität sicherzustellen.
In diesem Beispiel verwendete Klassen oder Methoden
In diesem Beispiel werden Klassen oder Methoden nicht explizit verwendet.
Weitere Informationen
Korrelieren von Nachrichten über Anforderung-Antwort
Beispiele für MQSeries-Adapter