Share via


Schemaauflösung in Pipelinekomponenten

Assembler- und Disassemblerkomponenten von Pipelines verwenden XSD-Schemas zum Verarbeiten von Nachrichten. Die Schemas enthalten Informationen wie die Liste der höher gestuften Eigenschaften, gekennzeichnete Felder, Anmerkungen für Flatfile-Nachrichten und Anmerkungen für XML-Umschläge.

Standardmäßige Dissasembler- und Assemblerkomponenten unterstützen das Abrufen von bereitgestellten Schemas durch Verwendung des Schematypnamens und des Nachrichtentyps. Einige Komponenten verwenden zum Abrufen sowohl den Schematypnamen als auch den Nachrichtentyp, andere Komponenten (z. B. der Flatfile-Disassembler) verwenden hierzu nur den Schematyp.

Pipelinekomponenten, die XML-Nachrichten empfangen, ermitteln den Nachrichtentyp, indem sie das Stammelement und den Namespace der Nachricht untersuchen. Der Nachrichtentyp für den folgenden XML-Code ist z. B http://MyDocument.org#MyDocument. .

<ns0:MyDocument xmlns:ns0="http://MyDocument.org">  
  
</ns0:MyDocument>  

Wenn für ein Schema kein Namespace definiert ist, lautet der Nachrichtentyp "<rootNode>". Wenn das vorhergehende XML-Beispiel keinen Namespace besäße, würde der Nachrichtentyp "MyDocument" lauten.

Standardmäßige Pipelinekomponenten rufen das entsprechende Schema mithilfe des Nachrichtentyps aus der Datenbank ab. Standardmäßige XML-Empfangs- und Sendepipelines bestimmen das zu ladende Schema immer anhand des Nachrichtentyps, der zur Laufzeit dynamisch aus dem XML-Inhalt der Nachricht ermittelt wird (es sei denn, die Pipelinekomponente wurde so konfiguriert, dass sie unbekannte Nachrichten zulässt). Zwar kann auf diese Weise der XML-Disassembler den Nachrichtenumschlag entfernen, der XML-Assembler kann jedoch keinen Umschlag für eine ausgehende Nachricht erstellen, wenn er nicht weiß, welches Umschlagschema verwendet werden soll.

Das Umschlagschema geben Sie in den Konfigurationseigenschaften für den XML-Assembler im Pipeline-Designer an.

So werden Schemas aufgelöst

Wenn Sie das Schema nicht direkt im XML-Disassembler angeben, werden Schemas auf folgende Weise aufgelöst:

  1. Zunächst wird eine nicht qualifizierte Suche für die bereitgestellten Schemas mithilfe des Stammknotennamens und -namespaces (z. B http://MyNamespace#MyRoot. ) durchgeführt. Wenn eine eindeutige Übereinstimmung gefunden wird, ist das Schema aufgelöst. Wenn mehrere Übereinstimmungen gefunden werden, die sich nur in der Versionsnummer unterscheiden, und von denen nur eine aktiv ist, wird diese Version verwendet, und das Schema ist aufgelöst. Wenn dasselbe Schema in mehreren Anwendungen aktiv ist, werden mehrere aktive Schemas gefunden, und die Suche wird mit Schritt 2 (weiter unten) fortgesetzt.

  2. Wenn mehrere Übereinstimmungen vorhanden sind, die Schritt 1 nicht auflösen können, wird die Suche von der Assembly qualifiziert, in der die Pipeline ausgeführt wird. Wenn ein eindeutiges Schema in derselben Assembly gefunden wird, in der die Pipeline ausgeführt wird, wird das Schema aufgelöst.

  3. Wenn es immer noch keine Übereinstimmungen gibt, wird der Verleger zum Auflösen des Schemas verwendet. Die Suche wird mithilfe des Stammknotens, Namespaces und öffentlichen Schlüsseltokens eingeschränkt. Wenn mit dieser Suche ein eindeutiges Schema gefunden wird, ist das Schema aufgelöst.

  4. Das Schema kann nicht aufgelöst werden. Ein Fehler wird zurückgegeben, der besagt, dass kein eindeutiges Schema gefunden werden kann.

    Weitere Überlegungen, einschließlich der Auswirkungen von SQL Server Sortierung und Sensitivität der Groß-/Kleinschreibung auf die Schemaauflösung, finden Sie unter Namespaceverwaltung.

    Wenn Sie einen Umschlag im XML-Assembler oder einen Header und Nachspann im Flatfile-Assembler erstellen möchten, können Sie auf eine der folgenden Weisen vorgehen:

  • Erstellen sie eine benutzerdefinierte Sendepipeline, und geben Sie die Schemas für den Umschlag in den Konfigurationseigenschaften für den XML-Assembler an. Dies können Sie im Pipeline-Designer konfigurieren.

  • Geben Sie in der BizTalk Server-Verwaltungskonsole "XML-Übertragung" als Eigenschaft für die Sendepipeline auf einem Sendeport an. Klicken Sie zum Konfigurieren der Pipelineeigenschaften auf die Schaltfläche […], und geben Sie in der Eigenschaft EnvelopeDocSpecNames das Schema für den Umschlag an.

    Wenn in der Datenbank mehrere Versionen desselben Schemas bereitgestellt sind (z. B. bei einer parallelen Bereitstellung oder wenn es in mehreren Szenarien keine eindeutigen Nachrichtentypen gibt), kann die Schemaauflösung anhand des Nachrichtentyps möglicherweise fehlschlagen. Wenn die Schemaauflösung anhand des Nachrichtentyps fehlschlägt, wird ein Fehler vom Typ "Schemamehrdeutigkeit" zum Ereignisprotokoll hinzugefügt. Wählen Sie eine der folgenden Vorgehensweisen, um sicherzustellen, dass die Schemaauflösung anhand des Nachrichtentyps erfolgreich ist:

  • Definieren Sie die Schemas im selben BizTalk-Projekt wie Ihre benutzerdefinierte Pipeline.

  • Signieren Sie die Assembly mit den Schemas mit demselben Schlüssel wie die Assembly mit den Pipelines.

  • Geben Sie Schemas in Pipelinekomponenten explizit an (die Namen der Nachrichtentypen sollten innerhalb der BizTalk-Verwaltungsdatenbank eindeutig sein).

Wichtig

Wenn mehrere Schemas innerhalb einer Assembly denselben Nachrichtentyp verwenden, dürfen diese Schemas aufgrund der Einschränkungen von mehrdeutigen Auflösungen nicht in derselben Pipelinekomponentenassembly enthalten sein. Verwenden Sie stattdessen externe Schemas, auf die in der Pipelinekomponentenassembly verwiesen wird. Die Auflösung von Mehrdeutigkeiten funktioniert nicht, wenn Schemas und Pipelinekomponenten Teil derselben Assembly sind, selbst wenn die Schematypnamen explizit in Pipelinekomponenten innerhalb benutzerdefinierter Pipelines angegeben werden.

Hinweis

Benutzerdefinierte Pipelinekomponenten, die IPipelineContext zum Abrufen bereitgestellter Schemas verwenden, sollten Schemas nur nach Schematyp abrufen, wenn der Schematypname für die Komponente zur Laufzeit nicht angegeben ist, und Schemas nach Nachrichtentyp nur abrufen, wenn die Schematypinformationen nicht verfügbar sind, wenn die Komponente ausgeführt wird.

Weitere Informationen

Pipelinekomponenten