Die meisten Middleware-APIs geben ein SdvResult-Objekt zurück. Bei Erfolg enthält dieses Objekt das erwartete Ergebnisobjekt. Bei einem Fehler enthält dieses Objekt ein SdvStatus-Objekt, das auf ein unerwartetes Verhalten oder einen Fehlerzustand hinweist, der häufig durch einen Fehlercode wie Internal, Unavailable oder DataLoss identifiziert wird.
Auf dieser Seite finden Sie Informationen zur Fehlerbehebung bei diesen Fehlercodes.
Fehlerbehebung bei Registrierungs- und Erstellungsfehlern
Registrierungs- und Erstellungsfehler treten in der Regel auf, wenn Sie versuchen, einen ungültigen Dienst zu erstellen oder zu registrieren.
Zweiter Dienst kann nicht erstellt werden
Fehler:
Internal-Fehler.
Ursache:
Sie versuchen, dieselbe Servicebündelinstanz (Name und Instanz-ID) zweimal zu registrieren.
Behebung:
Versuchen Sie nicht, dieselbe Servicepaketinstanz (Name und Instanz-ID) zweimal zu registrieren.
Doppeltes Dienstpaket kann nicht gelöscht werden
Fehler:
Status(-3, EX_ILLEGAL_ARGUMENT)
Ursache:
Sie versuchen, ein doppeltes Dienstpaket zu löschen, das nicht vorhanden ist.
Behebung:
Versuchen Sie nicht, ein doppeltes Dienstpaket zu löschen, das nicht vorhanden ist.
Publisher-Instanz zum Senden von Nachrichten kann nicht abgerufen werden
Fehler:
Der Aufruf von take_publisher() gibt none zurück.
Ursache:
Sie haben take_publisher() zweimal für dieselbe Variante aus derselben Servicepaketinstanz aufgerufen.
Behebung:
Rufen Sie take_publisher() nicht zweimal für dieselbe Variante aus derselben Servicepaket-Instanz auf.
Subscriber, Observer, History oder InstantReader können nicht erstellt werden
Fehler:
Unavailable-Fehler.
Ursache:
Sie haben versucht, ein Subscriber, Observer, History oder InstantReader für einen Publisher zu erstellen, der nicht vorhanden oder abgemeldet ist.
Behebung:
Prüfen Sie, ob der Publisher vorhanden oder registriert ist, bevor Sie versuchen, eine Subscriber, Observer, History oder InstantReader für den Publisher zu erstellen.
RPC-Client kann nicht erstellt werden
Fehler:
Unavailable Fehler
Ursache:
Sie haben versucht, einen RPC-Client für einen Server-Unit-Namen zu erstellen, der nicht vorhanden oder nicht registriert ist.
Behebung:
Prüfen Sie, ob der Server vorhanden und registriert ist, bevor Sie den RPC-Client erstellen.
Kommunikationsfehler beheben
Kommunikationsfehler können auftreten, nachdem ein Dienst ausgeführt wurde und mit der Kommunikation mit anderen Diensten beginnt.
Fehlerbehebung bei der Deregistrierung von Publishern
Fehler können auftreten, wenn sich ein Verlag oder Webpublisher abmeldet, während seine Leser noch aktiv sind.
read_next_messages() des Abonnenten gibt leere Listen zurück
Fehler:
read_next_messages() wird erfolgreich ausgeführt, gibt aber leere Listen zurück.
Ursache:
Der Verlag wird abgemeldet, während seine Leser aktiv sind.
Behebung:
Verwenden Sie einen Abonnenten oder Verlauf mit einem Verfügbarkeitsstream. Wenn die letzte Nachricht des Verfügbarkeitsstreams nicht verfügbar ist, wird der Verlag oder Webpublisher abgemeldet und es gibt keine neuen Nachrichten.
„next()“ des Beobachters gibt internen Fehler zurück
Fehler:
next() gibt den Fehler Internal zurück.
Ursache:
Der Verlag wird abgemeldet, während seine Leser aktiv sind.
Behebung:
Verwenden Sie ein Abo oder einen Verlauf mit einem Verfügbarkeitsstream. Wenn die letzte Nachricht des Verfügbarkeitsstreams nicht verfügbar ist, ist der Publisher nicht mehr vorhanden und es gibt keine neuen Nachrichten.
„read_from_history()“ gibt keine neuen Nachrichten zurück
Fehler:
read_from_history() gibt keine neuen Nachrichten zurück, sondern nur ältere.
Ursache:
Der Verlag wird abgemeldet, während seine Leser aktiv sind.
Behebung:
Verwenden Sie ein Abo oder einen Verlauf mit einem Verfügbarkeitsstream. Wenn die letzte Nachricht des Verfügbarkeitsstreams nicht verfügbar ist, ist der Publisher nicht mehr vorhanden und es gibt keine neuen Nachrichten.
InstantReader.read_latest_message() gibt internen Fehler zurück
Fehler:
read_latest_message() gibt den Fehler Internal zurück.
Ursache:
Der Verlag wird abgemeldet, während seine Leser aktiv sind.
Behebung:
Verwenden Sie ein Abo oder einen Verlauf mit einem Verfügbarkeitsstream. Wenn die letzte Nachricht des Verfügbarkeitsstreams nicht verfügbar ist, ist der Publisher nicht mehr vorhanden und es gibt keine neuen Nachrichten.
Fehlerbehebung bei leerer Nachrichtenwarteschlange
Fehler können auftreten, wenn versucht wird, aus einer leeren Nachrichtenwarteschlange zu lesen.
read_next_messages() des Abonnenten gibt eine leere Liste zurück
Fehler:
read_next_messages() gibt eine leere Liste zurück.
Ursache:
Der Publisher ist aktiv, hat aber keine Nachrichten gesendet.
Behebung:
Verwenden Sie einen Abonnenten oder Verlauf mit einem Verfügbarkeitsstream. Wenn die letzte Nachricht des Verfügbarkeitsstreams verfügbar ist, ist der Verlag oder Webpublisher aktiv und es gibt keine neuen Nachrichten.
„next()“ des Beobachters gibt internen Fehler zurück
Fehler:
next() gibt den Fehler Internal zurück.
Ursache:
Der Publisher ist aktiv, hat aber keine Nachrichten gesendet.
Behebung:
Verwenden Sie einen Abonnenten oder Verlauf mit einem Verfügbarkeitsstream. Wenn die letzte Nachricht des Verfügbarkeitsstreams verfügbar ist, ist der Verlag oder Webpublisher aktiv und es gibt keine neuen Nachrichten.
„read_from_history()“ gibt keine neuen Nachrichten zurück
Fehler:
read_from_history() gibt eine leere Liste zurück.
Ursache:
Der Publisher ist aktiv, hat aber keine Nachrichten gesendet.
Behebung:
Verwenden Sie einen Abonnenten oder Verlauf mit einem Verfügbarkeitsstream. Wenn die letzte Nachricht des Verfügbarkeitsstreams verfügbar ist, ist der Verlag oder Webpublisher aktiv und es gibt keine neuen Nachrichten.
InstantReader.read_latest_message() gibt internen Fehler zurück
Fehler:
read_latest_message() gibt den Fehler Internal zurück.
Ursache:
Der Publisher ist aktiv, hat aber keine Nachrichten gesendet.
Behebung:
Verwenden Sie einen Abonnenten oder Verlauf mit einem Verfügbarkeitsstream. Wenn die letzte Nachricht des Verfügbarkeitsstreams verfügbar ist, ist der Verlag oder Webpublisher aktiv und es gibt keine neuen Nachrichten.
Pufferüberlauf oder Datenverlust beheben
Fehler können auftreten, wenn der Publisher Nachrichten schneller sendet, als ein Leser sie verarbeiten kann.
Erster Lesevorgang eines Abonnenten nach einem Überlauf gibt den Fehler „DataLoss“ zurück
Fehler:
read_next_message() gibt den Fehler DataLoss zurück.
Ursache:
Der Publisher sendet Nachrichten schneller, als ein Leser sie lesen kann.
Behebung:
Der erste next()-Aufruf des Observer nach einem Überlauf gibt den Fehler „DataLoss“ zurück.
Fehler:
next() gibt den Fehler DataLoss zurück.
Ursache:
Der Publisher sendet Nachrichten schneller, als ein Leser sie lesen kann.
Lösung:Mögliche Lösungen sind:
Der Publisher veröffentlicht langsamer. Sie haben beispielsweise eine Variable mit dem Zeitstempel der letzten Nachricht. Wenn die aktuelle Zeit weniger als die letzte Veröffentlichungszeit plus ein Delta ist, veröffentlichen Sie die Nachricht nicht. Mit diesem Mechanismus wird höchstens eine Nachricht pro Delta veröffentlicht.
Der Consumer verwendet ein
InstantRead-Objekt anstelle eines Observers. EinInstantRead-Objekt gibt keine Überlauffehler zurück und gibt immer die letzte Nachricht zurück. Wenn die letzte Nachricht die einzige ist, die für Sie wichtig ist, können Sie anstelle eines Observers einInstantRead-Objekt verwenden.Der Verbraucher implementiert das Sampling. Wenn Ihre Lösung einen Publisher (P1) hat, der Nachrichten schneller veröffentlicht, als der Observer (01) sie lesen kann, können Sie einen neuen Publisher (P2) und Observer (02) erstellen, um den Unterschied in der Veröffentlichungs- und Lesegeschwindigkeit auszugleichen.
Angenommen, P1 veröffentlicht alle 10 ms eine Nachricht, aber O1 kann nur alle 100 ms eine Nachricht lesen und verwirft die restlichen neun Nachrichten. So beheben Sie die Abweichung:
- P1 veröffentlicht Nachrichten für O2.
- O2 liest eine Nachricht und verwirft neun.
- O2 sendet die eine gelesene Nachricht an P2.
- P2 sendet die gelesene Nachricht an O1.
- O1 liest alle zehn Sekunden eine Nachricht.
Das folgende Beispiel zeigt, wie Sie dieses Sampling-Szenario implementieren:
int discarded_message = 10; while (true) { message m = O2.read_message(); if discarded_message == 10 { discarded_message = 0; P2.publish(m); } else { discarded_message ++; } }
Verlauf wird unvollständig angezeigt
Fehler:
Die Nachricht geht vor dem Kopieren des Verlaufs verloren. Beim Lesen erfolgt keine direkte Fehlerbenachrichtigung.
Ursache:
Der Publisher sendet Nachrichten schneller, als ein Leser sie lesen kann.
Behebung:
InstantReader liest nur die letzte Nachricht vor
Fehler:
Die Nachricht geht vor dem Kopieren des Verlaufs verloren. Beim Lesen erfolgt keine direkte Fehlerbenachrichtigung.
Ursache:
Der Publisher sendet Nachrichten schneller, als ein Leser sie lesen kann.
Behebung:
–
RPC-Client ruft eine Methode auf, die nicht verfügbar ist
Fehler:
Der Methodenaufruf schlägt mit dem Fehler Unavailable fehl.
Ursache:
SDV kennt den Servernamen nicht und gibt Unavailable zurück. Dieser Fehler wird von der Middleware zurückgegeben, wenn Service Discovery keinen gültigen Servernamen zurückgibt.
Behebung:
Starten Sie ein Dienstbündel, das ein server für die angegebene Schnittstelle definiert, die der Client verwenden möchte.
Bei der serverseitigen Implementierung wird der Fehler „SdvStatus“ zurückgegeben
Fehler:
Die serverseitige Implementierung gibt ein SdvResult-Objekt mit einem SdvStatus-Fehler zurück, z. B. SdvStatusCode::NotFound. Der Fehler wird an den aufrufenden Client zurückgegeben.
Ursache:
SDV und das Kommunikationssystem zwischen Client und Server funktionieren wie erwartet, aber der Client hat eine Anfrage gesendet, die einen Fehler auf dem Server auslöst.
Behebung:
Stellen Sie eine gültige Anfrage mit dem Client oder beheben Sie den Fehler auf dem Server, damit er auf diese Anfragen reagieren kann.