Service Bus-Messagingausnahmen (veraltet)
In diesem Artikel werden die von .NET Framework-APIs generierten .NET-Ausnahmen aufgelistet.
Am 30. September 2026 werden die Azure Service Bus SDK-Bibliotheken „WindowsAzure.ServiceBus“, „Microsoft.Azure.ServiceBus“ und „com.microsoft.azure.servicebus“ eingestellt, da sie nicht den Azure SDK-Richtlinien entsprechen. Außerdem wird die Unterstützung des SBMP-Protokolls beendet, sodass Sie dieses Protokoll nach dem 30. September 2026 nicht mehr verwenden können. Migrieren Sie vor diesem Datum zu den neuesten Azure SDK-Bibliotheken, die wichtige Sicherheitsupdates und verbesserte Funktionen bieten.
Obwohl die älteren Bibliotheken noch über den 30. September 2026 hinaus verwendet werden können, erhalten sie keinen offiziellen Support und keine Updates mehr von Microsoft. Weitere Informationen finden Sie in der Ankündigung der Supporteinstellung.
Die von den Messaging-APIs generierten Ausnahmen können – zusammen mit den zugehörigen Korrekturmaßnahmen – zu den folgenden Kategorien gehören. Die Bedeutung und die Ursachen einer Ausnahme können je nach Art der Messagingentität variieren:
- Fehler der Benutzercodierung (System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException). Allgemeine Maßnahme: Korrigieren Sie den Code, bevor Sie fortfahren.
- Fehler bei der Einrichtung oder Konfiguration: (Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, System.UnauthorizedAccessException. Allgemeine Maßnahme: Überprüfen Sie die Konfiguration, und ändern Sie diese gegebenenfalls.
- Vorübergehende Ausnahmen (Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException). Allgemeine Maßnahme: Wiederholen Sie den Vorgang, oder benachrichtigen Sie die Benutzer. Beachten Sie, dass die
RetryPolicy
-Klasse im Client-SDK so konfiguriert werden kann, dass Wiederholungsversuche automatisch verarbeitet werden. Weitere Informationen finden Sie in im Leitfaden zu Wiederholungsversuchen. - Andere Ausnahmen (System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException). Allgemeine Aktion: spezifisch für den Typ der Ausnahme, weitere Informationen finden Sie in der Tabelle im folgenden Abschnitt.
Wichtig
- Azure Service Bus versucht bei einer Ausnahme nicht, einen Vorgang zu wiederholen, wenn sich der Vorgang in einem Transaktionsbereich befindet.
- Anleitungen zu Wiederholungen speziell für Azure Service Bus finden Sie unter Wiederholungsanleitung für Service Bus.
In der folgenden Tabelle werden die Typen von Messagingausnahmen, ihre Ursachen und Vorschläge für Korrekturmaßnahmen aufgelistet.
Ausnahmetyp | Beschreibung/Ursache/Beispiele | Vorgeschlagene Maßnahme | Hinweis zur automatischen/sofortigen Wiederholung |
---|---|---|---|
TimeoutException | Der Server hat nicht innerhalb der von OperationTimeout vorgegebenen Zeit auf den angeforderten Vorgang reagiert. Möglicherweise hat der Server den angeforderten Vorgang abgeschlossen. Dies kann aufgrund von Verzögerungen im Netzwerk oder in der Infrastruktur auftreten. | Überprüfen Sie den Systemzustand auf Konsistenz, und wiederholen Sie den Vorgang bei Bedarf. Siehe Timeoutausnahmen. | In einigen Fällen kann eine Wiederholung helfen. Fügen Sie dem Code eine Wiederholungslogik hinzu. |
InvalidOperationException | Der angeforderte Benutzervorgang ist auf dem Server oder innerhalb des Diensts unzulässig. Sehen Sie sich die Details in der Ausnahmemeldung an. Beispielsweise generiert Complete() diese Ausnahme, wenn die Meldung im ReceiveAndDelete-Modus empfangen wurde. | Überprüfen Sie den Code und die Dokumentation. Stellen Sie sicher, dass der angeforderte Vorgang gültig ist. | Der Wiederholungsversuch ist nicht hilfreich. |
OperationCanceledException | Es wurde versucht, einen Vorgang für ein Objekt aufzurufen, das bereits geschlossen, abgebrochen oder verworfen wurde. In seltenen Fällen wurde die Ambient-Transaktion bereits verworfen. | Überprüfen Sie den Code, und stellen Sie sicher, dass keine Vorgänge für verworfene Objekte aufgerufen werden. | Der Wiederholungsversuch ist nicht hilfreich. |
UnauthorizedAccessException | Das TokenProvider-Objekt konnte kein Token abrufen, das Token ist ungültig, oder das Token enthält nicht die Ansprüche, die zum Ausführen des Vorgangs erforderlich sind. | Stellen Sie sicher, dass der Tokenanbieter mit den richtigen Werten erstellt wird. Überprüfen Sie die Konfiguration für den Access Control Service. | In einigen Fällen kann eine Wiederholung helfen. Fügen Sie dem Code eine Wiederholungslogik hinzu. |
ArgumentException ArgumentNullException ArgumentOutOfRangeException |
Mindestens eines der für die Methode bereitgestellten Argumente ist ungültig. Der für die Klassen NamespaceManager oder Create bereitgestellte URI enthält Pfadsegmente. Das für NamespaceManager oder für Create bereitgestellte URI-Schema ist ungültig. Der Eigenschaftswert ist größer als 32 KB. |
Überprüfen Sie den aufrufenden Code, und stellen Sie sicher, dass die Argumente richtig sind. | Der Wiederholungsversuch ist nicht hilfreich. |
MessagingEntityNotFoundException | Die dem Vorgang zugeordnete Entität ist nicht vorhanden oder wurde gelöscht. | Stellen Sie sicher, dass die Entität vorhanden ist. | Der Wiederholungsversuch ist nicht hilfreich. |
MessageNotFoundException | Es wurde versucht, eine Nachricht mit einer bestimmten Sequenznummer zu empfangen. Diese Nachricht wurde nicht gefunden. | Stellen Sie sicher, dass die Nachricht nicht bereits empfangen wurde. Überprüfen Sie in der Warteschlange für unzustellbare Nachrichten, ob die Nachricht als unzustellbar gekennzeichnet wurde. | Der Wiederholungsversuch ist nicht hilfreich. |
MessagingCommunicationException | Der Client kann keine Verbindung mit Service Bus herstellen. | Stellen Sie sicher, dass der angegebene Hostname richtig und der Host erreichbar ist. Falls Ihr Code in einer Umgebung mit einer Firewall oder einem Proxy ausgeführt wird, stellen Sie sicher, dass der für die Service Bus-Domäne/IP-Adresse und -Ports bestimmte Datenverkehr nicht blockiert wird. |
Eine Wiederholung kann helfen, wenn zeitweilige Verbindungsprobleme vorliegen. |
ServerBusyException | Der Dienst kann die Anforderung derzeit nicht verarbeiten. | Der Client kann eine gewisse Zeit warten und dann den Vorgang wiederholen. | Der Client kann den Vorgang nach einer gewissen Zeitspanne möglicherweise wiederholen. Wenn die Wiederholung zu einer anderen Ausnahme führt, überprüfen Sie das Wiederholungsverhalten dieser Ausnahme. |
MessagingException | Dabei handelt es sich um eine allgemeine Messagingausnahme, die in den folgenden Fällen ausgelöst werden könnte: Es wird versucht, ein QueueClient-Element mit einem Namen oder einem Pfad zu erstellen, der zu einem anderen Entitätstyp gehört (z.B. zu einem Thema). Es wird versucht, eine Nachricht zu senden, die größer als 256 KB ist. Der Server oder der Dienst hat beim Verarbeiten der Anforderung einen Fehler festgestellt. Sehen Sie sich die Details in der Ausnahmemeldung an. Dies ist in der Regel eine vorübergehende Ausnahme.Die Anforderung wurde beendet, da die Entität gedrosselt wird. Fehlercode: 50001, 50002, 50008. |
Überprüfen Sie den Code, und stellen Sie sicher, dass nur serialisierbare Objekte für den Nachrichtentext verwendet werden (oder verwenden Sie ein benutzerdefiniertes Serialisierungsprogramm). Überprüfen Sie die Dokumentation für die unterstützten Werttypen der Eigenschaften, und verwenden Sie nur unterstützte Typen. Überprüfen Sie die IsTransient -Eigenschaft. Wenn sie den Wert TRUEaufweist, können Sie versuchen, den Vorgang zu wiederholen. |
Ist die Ausnahme auf eine Drosselung zurückzuführen, wiederholen Sie den Vorgang nach einigen Sekunden. Das Wiederholungsverhalten ist nicht definiert und in anderen Szenarien unter Umständen nicht hilfreich. |
MessagingEntityAlreadyExistsException | Es wurde versucht, eine Entität mit einem Namen zu erstellen, der bereits von einer anderen Entität in diesem Dienstnamespace verwendet wird. | Löschen Sie die vorhandene Entität, oder wählen Sie einen anderen Namen für die zu erstellende Entität. | Der Wiederholungsversuch ist nicht hilfreich. |
QuotaExceededException | Die Messagingentität hat die maximal zulässige Größe erreicht, oder die maximale Anzahl von Verbindungen zu einem Namespace wurde überschritten. | Schaffen Sie Platz in der Entität, indem Sie Nachrichten aus der Entität oder ihren Unterwarteschlangen empfangen. Siehe QuotaExceededException. | Eine Wiederholung kann helfen, wenn in der Zwischenzeit Nachrichten entfernt wurden. |
RuleActionException | Service Bus gibt diese Ausnahme zurück, wenn Sie versuchen, eine ungültige Regelaktion zu erstellen. Service Bus fügt diese Ausnahme zu einer unzustellbaren Nachricht hinzu, wenn beim Verarbeiten der Regelaktion für diese Nachricht ein Fehler festgestellt wird. | Überprüfen Sie die Regelaktion auf ihre Richtigkeit. | Der Wiederholungsversuch ist nicht hilfreich. |
FilterException | Service Bus gibt diese Ausnahme zurück, wenn Sie versuchen, einen ungültigen Filter zu erstellen. Service Bus fügt diese Ausnahme zu einer unzustellbaren Nachricht hinzu, wenn beim Verarbeiten des Filters für diese Nachricht ein Fehler festgestellt wird. | Überprüfen Sie den Filter auf Richtigkeit. | Der Wiederholungsversuch ist nicht hilfreich. |
SessionCannotBeLockedException | Es wurde versucht, eine Sitzung mit einer bestimmten Sitzungs-ID zu akzeptieren, aber die Sitzung wird derzeit durch einen anderen Client gesperrt. | Stellen Sie sicher, dass die Sperre für die Sitzung von den anderen Clients aufgehoben wird. | Eine Wiederholung kann helfen, wenn die Sitzung in der Zwischenzeit freigegeben wurde. |
TransactionSizeExceededException | Die Transaktion umfasst zu viele Vorgänge. | Reduzieren Sie die Anzahl der Vorgänge, die Teil dieser Transaktion sind. | Der Wiederholungsversuch ist nicht hilfreich. |
MessagingEntityDisabledException | Es wurde ein Laufzeitvorgang für eine deaktivierte Entität angefordert. | Aktivieren Sie die Entität. | Eine Wiederholung kann helfen, wenn die Entität in der Zwischenzeit aktiviert wurde. |
NoMatchingSubscriptionException | Service Bus gibt diese Ausnahme zurück, wenn Sie eine Nachricht zu einem Thema senden, für das keine der Filter der aktivierten Vorfilterung übereinstimmen. | Stellen Sie sicher, dass mindestens ein Filter übereinstimmt. | Der Wiederholungsversuch ist nicht hilfreich. |
MessageSizeExceededException | Eine Nachrichtennutzlast überschreitet den Grenzwert von 256 KB. Der Grenzwert von 256 KB gilt für die Gesamtgröße der Nachricht, zu der auch Systemeigenschaften und .NET-Mehraufwand gehören. | Reduzieren Sie die Größe der Nachrichtennutzlast, und wiederholen Sie den Vorgang. | Der Wiederholungsversuch ist nicht hilfreich. |
TransactionException | Die Ambient-Transaktion (Transaction.Current ) ist ungültig. Sie wurde möglicherweise abgeschlossen oder abgebrochen. Möglicherweise enthält die innere Ausnahme weitere Informationen. |
Der Wiederholungsversuch ist nicht hilfreich. | |
TransactionInDoubtException | Es wurde versucht, einen Vorgang für eine unsichere Transaktion auszuführen, oder es wurde versucht, ein Commit für die Transaktion auszuführen, und die Transaktion wurde unsicher. | Die Anwendung muss diese Ausnahme (als Sonderfall) behandeln, da die Transaktion bereits committet sein könnte. | - |
QuotaExceededException gibt an, dass das Kontingent für eine bestimmte Entität überschritten wurde.
Hinweis
Informationen zu Service Bus-Kontingenten finden Sie unter Kontingente.
Für Warteschlangen und Themen ist dies häufig die Größe der Warteschlange. Die Fehlermeldungseigenschaft enthält weitere Details, wie das folgende Beispiel zeigt:
Microsoft.ServiceBus.Messaging.QuotaExceededException
Message: The maximum entity size has been reached or exceeded for Topic: 'xxx-xxx-xxx'.
Size of entity in bytes:1073742326, Max entity size in bytes:
1073741824..TrackingId:xxxxxxxxxxxxxxxxxxxxxxxxxx, TimeStamp:3/15/2013 7:50:18 AM
Die Meldung besagt, dass das Thema seine maximale Größe überschritten hat, in diesem Fall 1GB (Standardgrenzwert).
Für Namespaces kann QuotaExceededException angeben, dass eine Anwendung die maximale Anzahl der Verbindungen zu einem Namespace überschritten hat. Beispiel:
Microsoft.ServiceBus.Messaging.QuotaExceededException: ConnectionsQuotaExceeded for namespace xxx.
<tracking-id-guid>_G12 --->
System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]:
ConnectionsQuotaExceeded for namespace xxx.
Für diesen Fehler gibt es zwei häufige Ursachen: die Warteschlange für unzustellbare Nachrichten und nicht funktionierende Nachrichtenempfänger.
Warteschlange für unzustellbare Nachrichten : Ein Leser kann Nachrichten nicht abschließen, und die Nachrichten werden nach Ablauf der Sperre an die Warteschlange/das Thema zurückgegeben. Dies kann auftreten, wenn der Leser auf eine Ausnahme trifft, die den Aufruf von BrokeredMessage.Complete verhindert. Nachdem eine Nachricht 10 Mal gelesen wurde, wird sie standardmäßig in die Warteschlange für unzustellbare Nachrichten verschoben. Dieses Verhalten wird von der Eigenschaft QueueDescription.MaxDeliveryCount gesteuert, die standardmäßig den Wert 10 aufweist. Wenn sich Nachrichten in der Warteschlange für unzustellbare Nachrichten anhäufen, belegen sie Speicherplatz.
Um das Problem zu beheben, lesen und schließen Sie die Nachrichten in der Warteschlange für unzustellbare Nachrichten ab – genau wie in jeder anderen Warteschlange. Sie können die Methode FormatDeadLetterPath verwenden, die Sie beim Formatieren des Pfads für die Warteschlange für unzustellbare Nachrichten unterstützt.
Empfänger beendet. Ein Empfänger hat den Empfang von Nachrichten aus einer Warteschlange oder einem Abonnement beendet. Dies können Sie anhand der Eigenschaft QueueDescription.MessageCountDetails feststellen, die die vollständige Aufschlüsselung der Nachrichten zeigt. Wenn die Eigenschaft ActiveMessageCount einen hohen oder steigenden Wert aufweist, werden die Nachrichten nicht so schnell gelesen, wie sie geschrieben werden.
Eine TimeoutException zeigt an, dass ein von einem Benutzer initiierter Vorgang länger als das Timeout des Vorgangs dauert.
Überprüfen Sie den Wert der ServicePointManager.DefaultConnectionLimit-Eigenschaft, da das Erreichen dieses Limits auch eine TimeoutException auslösen kann.
Es wird erwartet, dass es während oder zwischen Wartungsarbeiten, z. B. bei Service Bus-Dienstupdates (oder) Betriebssystemaktualisierungen für Ressourcen, die den Dienst ausführen, zu Timeouts kommt. Bei Betriebssystemupdates werden Entitäten verschoben, und Knoten werden aktualisiert oder neu gestartet. Dies kann zu Timeouts führen. Details zur Vereinbarung zum Service Level (SLA) für den Azure Service Bus-Dienst finden Sie unter SLA für Service Bus.
Für Warteschlangen und Themen wird das Zeitlimit entweder in der MessagingFactorySettings.OperationTimeout-Eigenschaft als Teil der Verbindungszeichenfolge oder über ServiceBusConnectionStringBuilder angegeben. Die Fehlermeldung selbst kann variieren, aber sie enthält immer den Timeoutwert für den aktuellen Vorgang.
Die Ausnahme MessageLockLostException wird ausgelöst, wenn eine Nachricht über den Empfangsmodus PeekLock empfangen wird und die Sperre des Clients auf Dienstseite abgelaufen ist.
Die Sperre einer Nachricht könnte aufgrund verschiedener Gründe ablaufen:
- Der Timer der Sperre ist abgelaufen, bevor die Clientanwendung ihn erneuert hat.
- Die Clientanwendung hat die Sperre abgerufen, diese in einem dauerhaften Speicher gespeichert und dann neu gestartet. Nach diesem Neustart hat die Clientanwendung die In-Flight-Nachrichten abgerufen und versucht, diese abzuschließen.
Möglicherweise wird diese Ausnahme auch in den folgenden Szenarios ausgelöst:
- Dienstupdate
- Betriebssystemupdate
- Ändern von Eigenschaften für die Entität (Warteschlange, Thema, Abonnement) während Aufrechterhaltung der Sperre.
Wenn die Clientanwendung die Ausnahme MessageLockLostException empfängt, kann sie die Nachrichten nicht mehr verarbeiten. Die Clientanwendung könnte die Ausnahme optional zu Analysezwecken protokollieren, jedoch muss der Client die Nachricht verwerfen.
Da die Sperre der Nachricht abgelaufen ist, wird sie wieder in die Warteschlange (oder das Abonnement) eingereiht, sodass sie von der nächsten Clientanwendung verarbeiten werden kann, die einen Empfangsaufruf sendet.
Wenn der MaxDeliveryCount-Wert überschritten wurde, kann die Nachricht in die Warteschlange DeadLetterQueue verschoben werden.
Die Ausnahme SessionLockLostException wird ausgelöst, wenn eine Sitzung akzeptiert wird und die Sperre des Clients auf Dienstseite abläuft.
Die Sperre einer Sitzung kann aus verschiedenen Gründen ablaufen:
- Der Timer der Sperre ist abgelaufen, bevor die Clientanwendung ihn erneuert hat.
- Die Clientanwendung hat die Sperre abgerufen, diese in einem dauerhaften Speicher gespeichert und dann neu gestartet. Nach diesem Neustart hat die Clientanwendung die In-Flight-Sitzungen abgerufen und versucht, die Nachrichten in diesen Sitzungen abzuschließen.
Möglicherweise wird diese Ausnahme auch in den folgenden Szenarios ausgelöst:
- Dienstupdate
- Betriebssystemupdate
- Ändern von Eigenschaften für die Entität (Warteschlange, Thema, Abonnement) während Aufrechterhaltung der Sperre.
Wenn die Clientanwendung die Ausnahme SessionLockLostException empfängt, kann sie die Nachrichten in der Sitzung nicht mehr verarbeiten. Die Clientanwendung kann die Ausnahme zu Analysezwecken protokollieren, jedoch muss der Client die Nachricht verwerfen.
Da die Sperre der Sitzung abgelaufen ist, wird sie wieder in die Warteschlange (oder das Abonnement) eingereiht, sodass sie von der nächsten Clientanwendung, die die Sitzung akzeptiert, gesperrt werden kann. Da die Sitzungssperre immer von jeweils einer einzelnen Clientanwendung aufrechterhalten wird, wird die Reihenfolge der Verarbeitung garantiert.
In den folgenden Fällen wird eine SocketException-Ausnahme ausgelöst:
- Wenn ein Verbindungsversuch fehlschlägt, weil der Host nach einem festgelegten Zeitraum nicht ordnungsgemäß reagiert hat (TCP-Fehlercode 10060)
- Eine aktive Verbindung ist fehlgeschlagen, weil der verbundene Host nicht reagiert hat.
- Ein Fehler ist beim Verarbeiten der Nachricht aufgetreten, oder es kam beim Remotehost zu einer Zeitüberschreitung.
- Es liegt ein Problem mit der zugrunde liegenden Netzwerkressource vor.
Die SocketException-Fehler geben an, dass die VM, die die Anwendungen hostet, den Namen <mynamespace>.servicebus.windows.net
nicht in die entsprechende IP-Adresse konvertieren kann.
Überprüfen Sie, ob der folgende Befehl erfolgreich eine IP-Adresse zuweisen kann.
PS C:\> nslookup <mynamespace>.servicebus.windows.net
Dadurch sollte eine Ausgabe ähnlich der folgenden zurückgegeben werden:
Name: <cloudappinstance>.cloudapp.net
Address: XX.XX.XXX.240
Aliases: <mynamespace>.servicebus.windows.net
Wenn der obige Name nicht in eine IP-Adresse und den Namespace-Alias aufgelöst wird, wenden Sie sich zur weiteren Untersuchung an den oder die Netzwerkadministrator*in. Die Namensauflösung erfolgt über einen DNS-Server. Diese Ressource befindet sich üblicherweise im Kundennetzwerk. Wenn die DNS-Auflösung über Azure DNS erfolgt, wenden Sie sich an den Azure-Support.
Wenn die Namensauflösung erwartungsgemäß funktioniert, überprüfen Sie hier, ob Verbindungen zu Azure Service Bus zugelassen werden.
Bei MessagingException handelt es sich um eine generische Ausnahme, die aus verschiedenen Gründen ausgelöst werden könnte. Einige dieser Gründe lauten:
- Es wurde versucht, eine QueueClient-Instanz in einem Thema oder Abonnement zu erstellen.
- Die Größe der gesendeten Nachricht ist überschreitet den Grenzwert für die jeweilige Stufe. Erfahren Sie mehr über die Kontingente und Grenzwerte von Service Bus.
- Eine spezifische Datenebenenanforderung (Senden, Empfangen, Abschließen, Verwerfen) wurde aufgrund von Drosselung beendet.
- Vorübergehende Probleme durch Dienstupgrades und Neustarts
Hinweis
Die obige Liste von Ausnahmen ist nicht vollständig.
Die Lösungsschritte hängen davon ab, wodurch die Ausnahme MessagingException ausgelöst wurde.
- Bei vorübergehenden Problemen (bei denen isTransient auf true festgelegt ist) oder Drosselungsproblemen lässt sich das Problem manchmal durch Wiederholen des Vorgangs lösen. Hierfür kann die Standardwiederholungsrichtlinie für das SDK verwendet werden.
- Bei anderen Problemen geben die in der Ausnahme angegebenen Details Informationen zum Problem und den Lösungsschritten an.
StorageQuotaExceededException wird generiert, wenn die Gesamtgröße der Entitäten in einem Premium-Namespace den Grenzwert von 1 TB pro Messagingeinheit überschreitet.
- Erhöhen Sie die Anzahl der Messagingeinheiten, die dem Premium-Namespace zugewiesen sind.
- Wenn Sie bereits die maximal zulässige Anzahl von Messagingeinheiten für einen Namespace verwenden, erstellen Sie einen separaten Namespace.
Die vollständige .NET-API-Referenz für Service Bus finden Sie unter Azure .NET API Referenz. Weitere Informationen zur Problembehandlung finden Sie im Leitfaden zur Problembehandlung.