Frage

Ich bin nicht sicher, ob ich die richtige Frage zu stellen, aber dies ist das Szenario, das ich zu laufen versuche:

Mehrere Dateien (XML und einige verwandte Dateien, „Anhänge“) haben in BizTalk als eine einzelne Nachricht zu erhalten. Ich habe in bestehenden Adapter sah, und nicht sehen, dass mit dem bestehenden einmal getan. Um genauer zu sein, werden die Dateien aus dem Dateisystem genommen. Die Dateien werden nicht zur gleichen Zeit gefunden, aber kommen einen nach dem anderen, bei der Bestellung nicht gewährleistet ist. XML (Inhalt) Datei ist derjenige, der weiß, was Anhänge es (was andere Dateien) haben muss.

Wir suchen in BizTalk 2009 und ich habe mich gefragt, sonst würde, dass die Verantwortung eines benutzerdefinierten Adapter, oder so etwas. Und waren ich für Proben aussehen könnte.

Danke.

War es hilfreich?

Lösung

Es ist wohl möglich, zu tun, was Sie einen benutzerdefinierten Adapter wollen verwenden, obwohl ich davon abraten würde. Sie können erreichen, was Sie mit Orchestrierung benötigen.

Was Sie suchen ist likey ein Konvoi, oder zumindest einige Verwendung von Korrelation.

In BizTalk ein Konvoi ist ein Messaging-Muster (wie eine BizTalk-Funktion im Gegensatz), die Gruppen von Nachrichten ermöglicht, durch eine einzige Orchestrierung verarbeitet werden.

Sie verwenden im Wesentlichen Korrelation auf einem Empfangsanschluss zu Gruppennachrichten zusammen in eine parallele (was Sie wollen wahrscheinlich) oder sequentielle Weise.

Es gibt einen Artikel [hier] ( http : //msdn.microsoft.com/en-us/library/ms942189 (BTS.10) .aspx) von Stephen W. Thomas über Konvoi (es für BT 2004 ist aber die Konzepte noch halten) und es gibt viele zusätzliche Informationen, die im Internet und in Bücher (Professional BizTalk Server 2006 über einen Abschnitt auf sie hat)

Ohne weitere Details zu Ihrem Szenario ist es schwer, genau zu wissen, wie der Konvoi gebaut werden würde, aber unten sind zwei Ansätze auf (auch zu sehen, habe ich eine Chance nicht gehabt, um richtig BT2009, daher wird es Unterstützung erweitert werden kann Korrelation Szenarien, die Sie aus).

Hilfe

Flexible Korrelation

Wenn Sie nicht wissen, etwas über die Dateien, die in Zusammenhang mit XML Sie wahrscheinlich ein Muster wie die von Charles Young in diese Post.

Uneinheitliche sequenzieller Konvoi

Wenn Sie zu tun, ein wenig Informationen vor der Hand ein Weg sein könnte wie folgt (im Grunde eine Uneinheitliche sequenziellen Konvoi):

Damit ist die Annahme, dass es eine Möglichkeit ist es, alle Dateien zu verknüpfen zusammen, damit Sie sie korrelieren können.

Erstellen Sie eine einzelne Orchestrierung, die Sie abonniert Port Inbound erhalten (die die Datei enthält Empfangsort).

Diese Orchestrierung wird eine einzelne Aktivierung Form erhalten, die für Ihre Content-Datei eingerichtet.

Sobald die Orchestrierung durch einen Gehalt gestartet wird eine zweite Empfangsform korreliert Datei startet die Nachrichten Aufnehmen, dass die Content-Datei übereinstimmen. (Die zweiten könnte möglich in einer Schleife erhält für variable Anzahl von Dateien zu ermöglichen)

Sie packen sie dann alle zusammen in eine einzige Ausgangsdatei Ihres Designs und senden sie aus, sobald die volle Anzahl der Dateien empfangen wurde.

Andere Tipps

Scheint mir ein besserer Ansatz wäre es, die oben genannten Anforderungen mit einer Kombination aus einer benutzerdefinierten Pipelinekomponente und / oder einem benutzerdefinierten Adapter zu implementieren. Ich nehme an, Sie nicht wirklich die eingehenden Dateien bearbeiten müssen - außer für den Inhalt XML-Datei - oder dass Sie kann nicht, da sie im Binärformat sind. Dies erfordert eine benutzerdefinierte Pipeline-Komponente.

Was Sie tun können, ist ein eigenes BizTalk Adapter entwickeln mit dem Dateisystem zu interagieren und die Hör- und Looping Logik zu implementieren. Als nächstes können Sie eine benutzerdefinierte Pipeline-Komponente entwickeln vielleicht darin mit Base64-Datentyp für binäre Daten eines einzelnen BizTalk-Nachricht zu erstellen. Zusätzlich können Sie auch Nachrichten direkt in dieser Komponente fördern, um Orchestrierung Abonnements zu ermöglichen.

Orchestrierungen sind besser geeignet für die Umsetzung Geschäft Work-Flow Szenarien, in denen die Nachrichten bereits im XML-Format sind. Dies scheint nicht der Fall zu sein. Auf jeden Fall denke ich, zumindest aber eine benutzerdefinierte Pipelinekomponente benötigt würde.

David Antwort ist die richtige Antwort.

Auch in Fällen, in denen Sie nicht wissen absolut nichts über die Inhalte der erwarteten Anhänge, sicher, dass Sie ihren Namen und Orte. Deshalb können Sie mit der Flexible Korrelation verknüpft in Davids Antwort wie folgt:

Der Schlüssel zur Lösung liegt auf der eingebauten BTS.ReceivedFileName Eigenschaft zu korrelieren.

Erstellen Sie zunächst eine benutzerdefinierte Empfangspipeline, mit einer benutzerdefinierten Pipelinekomponente, die die BTS.ReceivedFileName Kontexteigenschaft der empfangenen Nachrichten fördern. Diese einfache benutzerdefinierte Komponente ist ziemlich einfach zu schreiben, aber man kann es einfach machen von Dritt Frameworks wie ( schamlose Stecker, hier ) mein PipelineComponentBase Klasse oder die ausgezeichnete BizTalk Server Pipeline Component Wizard .

Jetzt für den einfachen Teil:

  • Anhänge werden in einem bestimmten Ort empfangen werden, indem Sie den Pfad im Dateisystem bezeichnet.
  • Erstellen Sie eine Position an, die hört einen alternativen Standort , verwendet nur zu steuern, wenn Dateien werden von BizTalk tatsächlich geschluckt.
  • In Ihrer Orchestrierung erstellen Korrelationsart mit der BTS.ReceivedFileName Eigenschaft und einer Korrelation gesetzt Basis auf dieser Korrelation Art.
  • Wenn Sie binäre Anlagen erhalten mögen, eine Dummy-Nachricht mit der BTS.ReceivedFileName Kontext-Eigenschaft auf die Dateinamen der binären Anlage aber mit dem Pfad Anpassung des alternativen Standorts gesetzt senden; die eine von dem Empfang Ort verwendet. Initialisieren Sie die Korrelation auf der Sendeform.
  • einen Ausdruck Form Verwenden Sie die Binärdatei von seiner ursprünglichen Position zu dem von dem Empfangsort verwendet zu kopieren.
  • Verwenden Sie schließlich eine Form erhalten, um den Hafen erhalten gebunden, die die Empfangsort deren benutzerdefinierte Pipeline erhalten enthält die BTS.ReceivedFileName Eigentum fördern.

Beachten Sie, dass Sie tatsächlich benötigen eine Nachricht zu senden, um die Korrelation zu initialisieren. Es spielt keine Rolle, welche Botschaft Sie tatsächlich senden. Was ich tun würde, ist die Nachricht über eine Sendepipeline senden, die eine enthalten leere Pipeline-Komponente. Das ist eine Pipeline-Komponente, die die Nachricht aber return null liest (so, dass die Nachricht in dünne Luft verschwindet, bevor er den Adapter erreicht). Eine aufwendigere Lösung wäre, einen null verwenden Adapter. Das ist ein Adapter, der die Nachricht liest, aber tut nichts über sie.

Diese beiden Lösungen vermeiden, dass viele Dateien in einem temporären Speicherort akkumulieren irgendwo, nur um eine Korrelation der Initialisierung!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top