Freigeben über


Debuggen von Laufzeitfehlern einer Orchestrierung

In diesem Abschnitt finden Sie eine Reihe von Fragen und Antworten, die beim Lösen von Laufzeitproblemen mit Orchestrierungen hilfreich sind.

Warum werden beim Senden an eine untergeordnete Orchestrierung, die gerade durch das übergeordnete Element gestartet wurde, Abonnementfehler angezeigt?

Der Abonnementfehlermeldung, dass das Abonnement nicht gefunden wurde, ist das Ergebnis einer Racebedingung. Eine Racebedingung tritt auf, wenn das Ergebnis eines Prozesses von einer festgelegten Ablaufreihenfolge dieses Prozesses abhängig ist. In dem hier erläuterten Fall tritt die Bedingung auf, wenn die untergeordnete Orchestrierung nicht rechtzeitig gestartet wurde, um die von der übergeordneten Orchestrierung gesendete Nachricht zu empfangen.

Dieses Problem kann umgangen werden, wenn die untergeordnete Orchestrierung eine Nachricht an die übergeordnete Orchestrierung zurücksendet, sobald sie gestartet wurde und für den Empfang von Nachrichten bereit ist. So wird der übergeordneten Orchestrierung, die die untergeordnete Orchestrierung gestartet hat, vor dem Senden der Nachricht mitgeteilt, dass ein Empfänger vorhanden ist.

Warum treten beim Anfügen eines dynamischen Sendeports an einen logischen Port Fehler auf?

Ein dynamischer Port ist nicht dafür entworfen, sämtliche Attribute und Merkmale des ihm zugewiesenen Ports zu erben. Ein dynamischer Port erhält nur eine Adresse, erbt jedoch nicht die weiteren Informationen, die dem logischen Port zugeordnet sind.

Wenn Sie z. B. einen dynamischen Sendeport an einen logischen Port mit der Kennzeichnung Übermittlungsbenachrichtigung = Übertragen anfügen, wird vom Laufzeitmodul keine Übermittlungsbenachrichtigung gesendet. Das XLANGs-Laufzeitmodul wartet nur auf eine Übermittlungsbenachrichtigung, wenn der Port entsprechend statisch eingerichtet wurde.

Hinweis

In XLANGs verhalten sich Ports nur entsprechend ihrer statischen Konfiguration.

Wenn die Anwendung ausgeführt werden soll, nachdem eine Orchestrierung mit benutzerdefinierten Komponenten bereitgestellt wurde, wird die Fehlermeldung angezeigt, dass der Datei- oder Assemblyname bzw. eine der Abhängigkeiten nicht gefunden wurde

Dieser Fehler bedeutet in der Regel, dass die BizTalk-Orchestrierungs-Engine die benutzerdefinierte Komponente nicht findet. Sie müssen alle Assemblys, die eine BizTalk-Anwendung umfasst, im globalen Assemblycache des Computers installieren, der als Host für die Anwendung dient.

Beim Senden eines Dokuments über eine Orchestrierung an einen Webdienst wird die Fehlermeldung angezeigt, dass die Kontexteigenschaft 'AssemblyName' ungültig ist

Problem

Wird ein Dokument über eine Orchestrierung an einen Webdienst gesendet, wird die Fehlermeldung angezeigt, dass die Kontexteigenschaft AssemblyName ungültig ist.

Ursache

Die BizTalk-Anwendung wurde ursprünglich für das Senden und Empfangen von Nachrichten ohne dazwischen liegende Orchestrierung entworfen. Bei dieser Art von Lösung werden Empfangsport und Sendeport mithilfe eines Sendeportfilters verknüpft, sodass das Dokument nach Empfang an den Sendeport durchgelassen wird. Die Lösung wurde später um eine Orchestrierung erweitert, die an den Sendeport gebunden ist.

Lösung

Entfernen Sie den Filter am Sendeport. Wenn Sie einen Filter auf einen Sendeport anwenden, der an eine Orchestrierung gebunden ist, wird die Orchestrierung oft von Nachrichten umgangen und damit der Kontexteigenschaftsfehler ausgelöst.

Bei der Behandlung einer mehrteiligen MIME-Nachricht in einer Orchestrierung tritt eine 'WrongBodyPartException'-Ausnahme auf

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 Nachrichtenteile falsch angegeben wurde oder Nachrichten nicht mit den angegebenen Teilpositionen übereinstimmen. Dies ist z. B. dann der Fall, wenn Sie angeben, dass der dritte Teil ein Textteil ist und dann Nachrichten mit einem Headerteil an dritter Position empfangen werden.

Lösung

Vergewissern Sie sich, dass die Einstellung des Textteilindex korrekt ist und dass alle Nachrichten, die über den Adapter empfangen werden, diesen Einstellungen entsprechen. Der Inhalt von MIME-Nachrichten, die innerhalb einer Orchestrierung Fehler verursachen, kann angezeigt werden, indem Sie die Orchestrierung beenden, deren Eintragung jedoch beibehalten. Dadurch erzwingen Sie eine Veröffentlichung der Nachricht, die Sie mithilfe der Verwaltungskonsole anzeigen können, um die Reihenfolge der Teile zu überprüfen.

Ein Teil einer mehrteiligen MIME-Nachricht wird nicht gefunden

Problem

Versuche, einen MIME-Nachrichtenteil mit einem Indexwert größer als 0 abzurufen, führt dazu, dass die BizTalk Server Runtime einen Fehler wie "mehrteilige Nachricht mit index = <Wert> nicht finden" auslöst.

Ursache

Im Folgenden sind die häufigsten Ursachen dieses Fehlers aufgeführt:

  • Die MIME-Nachricht besteht aus weniger Teilen als erwartet.

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

Lösung

Dieses Problem kann behoben werden, indem Sie sicherstellen, dass von Ihrem Code nur Nachrichtenteile abgerufen werden, die sich im erwarteten Bereich der Nachrichtenquelle befinden. Wenn ein Analyseproblem vorliegt, vergewissern Sie sich, dass die ursprüngliche MIME-Nachricht ordnungsgemäß strukturiert ist. Wenn Sie gelegentliche Analyseprobleme vermuten, stellen Sie sicher, dass die Orchestrierung über entsprechende Ausnahmehandler verfügt.

Beim Senden über einen dynamischen Sendeport erhalten Sie die Fehlermeldung „Der Dateisendeadapter kann die Datei nicht zum Schreiben öffnen“

Problem

Beim Senden mithilfe eines dynamischen Sendeports erhalten Sie im BizTalk Server Ereignisprotokoll den Fehler "Dateidateiname> kann nicht zum Schreiben geöffnet< werden".

Dieses Problem tritt beim BTS auf. Die OutBoundTransportLocation-Eigenschaft wird in einem Orchestrierungsausdruck definiert, und der Dateitransport wird angegeben, z. B. verursachen die folgenden Ausdrücke diesen Fehler zur Laufzeit:

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, weil die Orchestrierungs-Engine zur Laufzeit den Text "file://" aus der angegebenen URL entfernt. So wird anhand der obigen Beispiele „file:///c:/test/out“ als „\c:\test\out“ ausgewertet, und „file://mymachine/test/out“ wird als „mymachine\test\out“ ausgewertet.

Lösung

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