Freigeben über


Debuggen von Orchestrierungs-Runtime-Fehlern

Dieser Abschnitt enthält eine Reihe von Fragen und Antworten, die Ihnen helfen sollen, Laufzeitprobleme mit Ihren Orchestrierungen zu beheben.

Warum erhalte ich zeitweilige Abonnementfehler beim Senden an eine untergeordnete Orchestrierung, die gerade vom übergeordneten Element gestartet wurde?

Der Abonnementfehler "Abonnement konnte nicht gefunden werden" ist ein Ergebnis einer Rennbedingung. Eine Wettlaufsituation tritt auf, wenn das Ergebnis eines Prozesses von der spezifischen Reihenfolge abhängt, in der der Prozess stattfindet. In diesem Fall tritt das Problem auf, wenn die Kind-Orchestrierung nicht rechtzeitig gestartet wurde, um die Nachricht vom übergeordneten Element zu empfangen.

Um dieses Problem zu vermeiden, könnte die Kind-Orchestrierung eine Nachricht zurück an die Eltern-Orchestrierung senden, wenn sie gestartet wurde und bereit ist, eine Nachricht zu erhalten. Auf diese Weise würde die übergeordnete Orchestrierung, die sie gestartet hat, wissen, dass es vor dem Senden einer Nachricht einen Empfänger gibt.

Warum erhalte ich Fehler beim Anfügen eines dynamischen Sendeports an einen logischen Port?

Ein dynamischer Port ist nicht darauf ausgelegt, alle Attribute und Merkmale des ihm zugewiesenen Ports zu erben. Ein dynamischer Port erhält nur eine Adresse; sie erbt nicht die anderen Informationen, die dem logischen Port zugeordnet sind.

Wenn Sie beispielsweise einen dynamischen Sendeport an einen logischen Port mit Übermittlungsbenachrichtigung = Übertragen anfügen, liefert die Laufzeit keine Übermittlungsbenachrichtigung. Die XLANGs-Laufzeit lauscht nur auf eine Übermittlungsbenachrichtigung, wenn der Port tatsächlich so eingerichtet wurde, dass er statisch eingerichtet wurde.

Hinweis

In XLANGs verhalten sich Ports nur so, wie sie statisch konfiguriert wurden.

Wenn ich versuche, meine Anwendung nach der Bereitstellung einer Orchestrierung mit benutzerdefinierten Komponenten auszuführen, erhalte ich die Fehlermeldung: "Datei- oder Assemblyname oder eine ihrer Abhängigkeiten wurde nicht gefunden."

Dieser Fehler bedeutet in der Regel, dass das BizTalk-Orchestrierungsmodul die benutzerdefinierte Komponente nicht finden kann. Sie müssen alle Assemblys installieren, die in einer BizTalk-Anwendung im globalen Assemblycache des Computers enthalten sind, auf dem die Anwendung gehostet wird.

Ein Fehler "AssemblyName-Kontexteigenschaft war ungültig" tritt auf, wenn ein Dokument über eine Orchestrierung an einen Webdienst übermittelt wird.

Das Problem

Das Übermitteln eines Dokuments an einen Webdienst über eine Orchestrierung führt zu einem Fehler der ungültigen Eigenschaft "AssemblyName-Kontext".

Ursache

Die BizTalk-Anwendung wurde ursprünglich mit einem "Messaging"-Ansatz ohne eingreifende Orchestrierung entwickelt. Dieser Lösungstyp verwendet einen Sendeportfilter, um den Empfangsport und den Sendeport zu verknüpfen, sodass das Dokument nach Erhalt an den Sendeport übergeben wird. Später wurde die Lösung so geändert, dass sie eine Orchestrierung enthält, die an den Sendeport gebunden war.

Beschluss

Entfernen Sie den Filter für den Sendeport. Wenn Sie einen Filter auf einen Sendeport anwenden, der an eine Orchestrierung gebunden ist, umgehen Nachrichten häufig die Orchestrierung und verursachen den Kontexteigenschaftsfehler.

Eine "WrongBodyPartException" tritt auf, wenn eine mehrteilige MIME-Nachricht in einer Orchestrierung behandelt wird.

Das Problem

Das Empfangen einer mehrteiligen MIME-Nachricht in eine Orchestrierung führt zu einer WrongBodyPartException-Ausnahme .

Ursache

Dieser Fehler kann auftreten, wenn die Reihenfolge der Teile falsch angegeben wird oder Meldungen nicht den von Ihnen angegebenen Teilepositionen entsprechen. Wenn Sie zum Beispiel angeben, dass der dritte Teil ein Körperteil ist, aber Nachrichten in der dritten Position mit einem Kopfzeilenteil eintreffen.

Beschluss

Überprüfen Sie, ob die Indexeinstellung des Körperteils korrekt ist, und stellen Sie anschließend sicher, dass alle Nachrichten, die über den Adapter ankommen, mit der Einstellung konsistent sind. Sie können den Inhalt von MIME-Nachrichten überprüfen, die innerhalb einer Orchestrierung fehlschlagen, indem Sie die Orchestrierung beenden (aber die Liste beibehalten); dadurch wird erzwungen, dass die Nachricht veröffentlicht wird, damit Sie sie mithilfe der Verwaltungskonsole untersuchen und die Reihenfolge der Teile überprüfen können.

Mehrteiliges MIME-Nachrichtenteil wurde nicht gefunden

Das Problem

Das Abrufen eines MIME-Nachrichtenteils mit einem Indexwert größer als 0 führt zu einem Fehler in der BizTalk Server-Laufzeit, der ähnlich lautet wie "Teil-Nachricht mit Index = <Wert>" nicht gefunden werden kann.

Ursache

Die häufigsten Ursachen für diesen Fehler sind:

  • Die MIME-Nachricht weist weniger Teile auf als erwartet.

  • Die MIME-Nachricht konnte nicht vollständig analysiert werden.

Beschluss

Sie können dieses Problem beheben, indem Sie sicherstellen, dass Ihr Code nur Nachrichtenteile abruft, die sich innerhalb des von der Nachrichtenquelle erwarteten Bereichs befinden. Bei einem Parsingproblem sollten Sie überprüfen, ob die ursprüngliche MIME-Nachricht strukturell einwandfrei und ordnungsgemäß konstruiert ist. Wenn Sie gelegentliche Analyseprobleme erwarten, stellen Sie sicher, dass die Orchestrierung über geeignete Ausnahmehandler verfügt.

Beim Senden mithilfe eines dynamischen Sendeports wird ein Fehler "Der DATEI-Sendeadapter kann keine Datei zum Schreiben öffnen" angezeigt.

Das Problem

Sie erhalten einen Fehler "Der FILE-Sendeadapter kann die Datei <dateiname> nicht zum Schreiben öffnen" in der BizTalk Server-Ereignisanzeige beim Senden mithilfe eines dynamischen Sendeports.

Dieses Problem tritt auf, wenn die BTS.OutBoundTransportLocation-Eigenschaft in einem Orchestrierungsausdruck definiert wird und der Dateitransport angegeben ist, z. B. führen die folgenden Ausdrücke zur Laufzeit zu diesem Fehler:

Message2=Message1;  
Message2(BTS.OutboundTransportLocation) = "file:///c:/test/out";  
MySendPort(Microsoft.XLANGs.BaseTypes.Address)=Message2(BTS.OutboundTransportLocation);  

-Oder-

Message2=Message1;  
Message2(BTS.OutboundTransportLocation) = "file://mymachine/test/out";  
MySendPort(Microsoft.XLANGs.BaseTypes.Address)=Message2(BTS.OutboundTransportLocation);  

Ursache

Dieses Problem tritt auf, da zur Laufzeit das Orchestrierungsmodul den Text "file://" aus der angegebenen URL entfernt. Mit den obigen Beispielen wird "file:///c:/test/out" also als \c:\test\out ausgewertet, und "file://mymachine/test/out" wird als mymachine\test\out ausgewertet.

Beschluss

Wenn Sie die URL für die BTS.OutBoundTransportLocation-Eigenschaft in einem Ausdruck angeben, fügen Sie nach Bedarf "/"-Zeichen hinzu oder entfernen Sie diese. Verwenden Sie die Beispiele oberhalb, die BTS.OutBoundTransportLocation-Eigenschaft sollte als "file://c:/test/out" definiert werden, was zu "c:\test\out" oder "file:////mymachine/test/out" ausgewertet würde, was als \\mymachine\test\out interpretiert werden würde.