Freigeben über


Tipps zum Entwerfen Ihres Adapters

Dieser Abschnitt enthält Hinweise und Tipps, die auf Erfahrungen von Adapterentwicklern beruhen.

Handlereigenschaften sollten Zeichenfolgen sein, wenn diese als Standardkonfigurationen verwendet werden

Es erscheint attraktiv, die Eigenschaften auf dem XSD-generierten Handlereigenschaftenblatt als Standardwerte für ihre Location-Eigenschaften zu verwenden, da, wenn der Wert nicht in Location festgelegt ist, die Laufzeit automatisch den Wert im Handler verwendet. Dieser Ansatz ist jedoch aufgrund mehrerer Probleme weniger hilfreich.

Das Problem tritt auf, wenn nicht klar ist, ob der an die Laufzeit übergebene Wert überschrieben werden soll oder nicht. Üblicherweise wird dies geregelt, indem eine Art NULL-Wert für Werte definiert wird und dann auf diesen Wert getestet wird. Das Problem bei der Verwendung der XSD-basierten Eigenschaftenblätter in BizTalk Server ist, dass NULL nur für Zeichenfolgen unterstützt wird. Selbst wenn Ihr Adapter mittels dieses NULL-Tests Standardeinstellungen übernehmen soll und Sie bereit sind, diesen auf Zeichenfolgentypen zu beschränken, wäre die Handhabung auf der Benutzeroberfläche immer noch sehr unkomfortabel.

Die von XSD generierten Eigenschaftenblätter unterstützen nur die Einstellung einer Eigenschaft zurück auf NULL, indem sie mit der rechten Maustaste auf die Eigenschaft klicken. An diesem Punkt wird ein Kontextmenü nullify? angezeigt, und die Eigenschaft kann auf NULL festgelegt werden. Es existiert keine visuelle Bestätigung darüber, ob eine Eigenschaft den Wert NULL hat.

Überlegungen zur Implementierung von Schemagenerierungs-Assistenten

Programmierer schreiben gerne Code für Objektmodelle mit strikter Typbindung. Das Bearbeiten von XML in Code kann auf den ersten Blick umständlich und fehleranfällig erscheinen. Mithilfe einiger Tricks und einer geschickten Verwendung der von .NET Framework bereitgestellten Hilfestellungen kann dieser Vorgang jedoch maßgeblich vereinfacht werden.

Erstellen Sie keine XML-Dokumente mit Zeichenfolgenverkettung

Einer der schwerwiegendsten Fehler beim Arbeiten mit XML ist die Generierung von XML-Code mithilfe von Zeichenfolgenverkettung und Print-Anweisungen im Arbeitsspeicher. Dadurch werden CPU-Zeit und Arbeitsspeicher stark beansprucht. Selbst beim trivialsten XML-Codeausschnitt ist es einfacher, ein Tool wie XmlWriter oder das DOM (Document Object Model) zu verwenden. Wenn Sie XmlWriter nutzen, sollten Sie nicht die Funktion zum Schreiben von unformatiertem XML-Code verwenden, da sonst der Status des Dokuments verloren geht.

Zur Laufzeit wird XmlWriter dem XML-DOM vorgezogen, da das DOM Probleme aufgrund einer zu hohen Auslastung des Arbeitsspeichers verursacht. Während der Konfiguration und zur Entwurfszeit stellt dies höchstwahrscheinlich jedoch kein Problem dar. Die Verwendung des DOM vereinfacht den Einsatz von XPATH-Abfragen. Dies kann ein weiteres nützliches Tool sein.

Betrachten Sie die Definition des Grundgerüsts Ihres XML-Dokuments als Erstellen einer Ressource

Wenn Sie mit einem Entwurfstool ein großes XML-Dokument generieren und dieses Dokument immer derselben grundlegenden Struktur folgt, sollten Sie die gesamte Datei mit dem XML-Grundgerüst als Ressource im Projekt ablegen, um jederzeit Änderungen daran vornehmen zu können.

Laden Sie den Code in ein DOM, und fügen Sie dem Gerüst des Dokuments die benötigten Elemente hinzu, indem Sie mithilfe von XPATH den Knoten aussuchen, dem Sie diese hinzufügen möchten. In diesem Fall erstellen Sie eine WSDL-Datei (Web Services Description Language). Der Assistent speichert die WSDL-Datei mit dem Grundgerüst in einer Ressource und fügt die generierten untergeordneten XSD-Komponenten (XML Schema Definition) hinzu. selectNode wird mit einem XPath verwendet, um das richtige übergeordnete Element zu finden. Hierbei handelt es sich um Benutzeroberflächencode. Die Leistung stellt daher kein Problem dar, und die anschließende Implementierung ist einfach, stabil und verwaltbar.

Fügen Sie Verarbeitungsschritte in die BizTalk-Pipeline ein

Im Allgemeinen werden bei von Microsoft entwickelten Adaptern nachrichtenformatbasierte Verarbeitungsschritte aus dem Adapter in die BizTalk-Pipeline verschoben. Ein gutes Beispiel ist ein Adapter für eine strukturierte Datenquelle, die jedoch nicht auf XML basiert.

In diesem Fall werden die Daten vom Adapter nur abgerufen und dann mithilfe der BizTalk-Pipeline analysiert und in ein XML-Äquivalent konvertiert. Der Vorteil besteht darin, dass die Pipelinekomponente selbst zu einem wiederverwendbaren Teil der Architektur wird.

Das Verhalten des Adapters sollte konfigurierbar sein

Eine der Erfahrungen durch das MQSeries-Adapterbetaprogramm war, dass nicht alle Kunden mit dem gleichen Verhalten zufrieden waren. Dies galt besonders in Bezug auf Fehlerbehandlung und Sortierung. Die Lösung bestand darin, das Verhalten konfigurierbar zu gestalten. Sie können festlegen, ob der Adapter Sortierung unterstützen soll, ob Fehler in die Warteschlange Angehalten verschoben werden sollen oder ob die Verarbeitung durch den Adapter bei Fehlern beendet werden und dieser sich selbst deaktivieren soll. Durch die Konfigurierbarkeit solcher Verhaltensweisen wird die Arbeit für Kunden maßgeblich vereinfacht, wenn diese andernfalls außerhalb von BizTalk Server komplexe Orchestrierungen oder Skripts schreiben müssen, um das gleiche Ergebnis zu erhalten.

Unterstützung der Korrelation mit Nachrichtenwarteschlangen

Viele Messaging-Plattformen unterstützen die Idee einer Korrelations-ID im Nachrichtenheader, um ein Anforderungsantwort-Szenario auf Anwendungsebene zu unterstützen. Beispiele dafür sind MQSeries, MSMQ und SQL Service Broker. Es mag vorteilhaft erscheinen, das Anforderungsantwort-Muster des externen Nachrichtensystems einem Senden-Antwort-Adapter in BizTalk Server zuzuordnen. Aufgrund des Orts, an dem die Transaktionen ausgeführt werden, ist dies jedoch nicht sinnvoll. Speziell beim Senden an das externe Nachrichtensystem ist ein transaktionales Commit erforderlich, bevor die Daten für das andere Ende der Warteschlange zur Verfügung stehen. Der Empfang muss ebenfalls als separate Transaktion ausgeführt werden.

Bei BizTalk Server gibt es folgenden Lösungsansatz:

  • Verwenden Sie Korrelationssätze in Orchestrierungen.

  • Konfigurieren Sie zwei separate Ports: einen für das Senden und einen für den Empfang.

    In einem einfachen Fall gibt die Orchestrierung die Korrelations-ID an, die durch den Adapter mit der Nachricht verknüpft ist. Diese wird als Kontexteigenschaft der Nachricht an den Adapter übergeben. In einem komplexeren Fall erfordert das Szenario, dass das externe Messagingsystem die ID zuweist. In diesem Fall kann es vom Sendeport an die Orchestrierung mit einer Antwortnachricht zurückgegeben werden. Diese Antwortnachricht dient ausschließlich dem Zurückgeben der ID und stellt nicht die richtige Antwort auf die Nachricht dar.

Hinweis

In der Orchestrierungs-Engine gibt es eine Racebedingung, wie beispielsweise, dass die eigentliche Antwort auf die Nachricht gegenüber der ID-Antwort vom Sendeport Vorrang haben kann. Diese Racebedingung muss in der Orchestrierung selbst behandelt werden.