Service Bus-berichtuitzondering (afgeschaft)
Dit artikel bevat de .NET-uitzonderingen die worden gegenereerd door .NET Framework-API's.
Op 30 september 2026 gaan we de Azure Service Bus SDK-bibliotheken WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus en com.microsoft.azure.servicebus buiten gebruik stellen, die niet voldoen aan de Azure SDK-richtlijnen. We beëindigen ook de ondersteuning van het SBMP-protocol, zodat u dit protocol na 30 september 2026 niet meer kunt gebruiken. Migreer naar de nieuwste Azure SDK-bibliotheken, die vóór die datum essentiële beveiligingsupdates en verbeterde mogelijkheden bieden.
Hoewel de oudere bibliotheken nog steeds meer dan 30 september 2026 kunnen worden gebruikt, ontvangen ze geen officiële ondersteuning en updates meer van Microsoft. Zie de aankondiging van de buitengebruikstelling van de ondersteuning voor meer informatie.
Uitzonderingscategorieën
De berichten-API's genereren uitzonderingen die in de volgende categorieën kunnen worden onderverdeeld, samen met de bijbehorende actie die u kunt ondernemen om deze te herstellen. De betekenis en oorzaken van een uitzondering kunnen variëren, afhankelijk van het type berichtenentiteit:
- Fout met gebruikerscodering (System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException). Algemene actie: probeer de code op te lossen voordat u doorgaat.
- Installatie-/configuratiefout (Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, System.UnauthorizedAccessException. Algemene actie: controleer uw configuratie en wijzig indien nodig.
- Tijdelijke uitzonderingen (Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException). Algemene actie: voer de bewerking opnieuw uit of stel gebruikers op de hoogte. De
RetryPolicy
klasse in de client-SDK kan worden geconfigureerd om nieuwe pogingen automatisch af te handelen. Zie Richtlijnen voor opnieuw proberen voor meer informatie. - Andere uitzonderingen (System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException). Algemene actie: specifiek voor het uitzonderingstype; raadpleeg de tabel in de volgende sectie:
Belangrijk
- Azure Service Bus voert een bewerking niet opnieuw uit in het geval van een uitzondering wanneer de bewerking zich in een transactiebereik bevindt.
- Zie Richtlijnen voor opnieuw proberen die specifiek zijn voor Azure Service Bus.
Uitzonderingstypen
De volgende tabel bevat uitzonderingstypen voor berichten, de oorzaken en de voorgestelde actie die u kunt ondernemen.
Uitzonderingstype | Beschrijving/oorzaak/voorbeelden | Voorgestelde actie | Opmerking over automatisch/onmiddellijk opnieuw proberen |
---|---|---|---|
TimeoutException | De server heeft niet gereageerd op de aangevraagde bewerking binnen de opgegeven tijd, die wordt beheerd door OperationTimeout. De aangevraagde bewerking kan zijn voltooid op de server. Dit kan gebeuren vanwege vertragingen in het netwerk of andere infrastructuur. | Controleer de systeemstatus op consistentie en probeer het indien nodig opnieuw. Zie Time-outuitzondering. | In sommige gevallen kan het opnieuw proberen helpen; logica voor opnieuw proberen toe te voegen aan code. |
InvalidOperationException | De aangevraagde gebruikersbewerking is niet toegestaan binnen de server of service. Zie het uitzonderingsbericht voor meer informatie. Met Complete() wordt bijvoorbeeld deze uitzondering gegenereerd als het bericht is ontvangen in de modus ReceiveAndDelete. | Controleer de code en de documentatie. Controleer of de aangevraagde bewerking geldig is. | Het is niet handig om het opnieuw te proberen. |
OperationCanceledException | Er wordt geprobeerd een bewerking aan te roepen voor een object dat al is gesloten, afgebroken of verwijderd. In zeldzame gevallen wordt de omgevingstransactie al verwijderd. | Controleer de code en zorg ervoor dat er geen bewerkingen worden aangeroepen voor een verwijderd object. | Het is niet handig om het opnieuw te proberen. |
UnauthorizedAccessException | Het TokenProvider-object kan geen token verkrijgen, het token is ongeldig of het token bevat niet de claims die nodig zijn om de bewerking uit te voeren. | Zorg ervoor dat de tokenprovider is gemaakt met de juiste waarden. Controleer de configuratie van de Access Control Service. | In sommige gevallen kan het opnieuw proberen helpen; logica voor opnieuw proberen toe te voegen aan code. |
ArgumentException ArgumentNullException ArgumentOutOfRangeException |
Een of meer argumenten die aan de methode worden opgegeven, zijn ongeldig. De URI die wordt geleverd aan NamespaceManager of Create bevat padsegmenten. Het URI-schema dat is opgegeven bij NamespaceManager of Create , is ongeldig. De eigenschapswaarde is groter dan 32 kB. |
Controleer de aanroepende code en controleer of de argumenten juist zijn. | Het is niet handig om het opnieuw te proberen. |
MessagingEntityNotFoundException | De entiteit die is gekoppeld aan de bewerking bestaat niet of is verwijderd. | Zorg ervoor dat de entiteit bestaat. | Het is niet handig om het opnieuw te proberen. |
MessageNotFoundException | Probeer een bericht met een bepaald volgnummer te ontvangen. Dit bericht is niet gevonden. | Controleer of het bericht nog niet is ontvangen. Controleer de wachtrij met deadletters om te zien of het bericht is overgeslagen. | Het is niet handig om het opnieuw te proberen. |
MessagingCommunicationException | De client kan geen verbinding maken met Service Bus. | Zorg ervoor dat de opgegeven hostnaam juist is en dat de host bereikbaar is. Als uw code wordt uitgevoerd in een omgeving met een firewall/proxy, moet u ervoor zorgen dat het verkeer naar het Service Bus-domein/IP-adres en de poorten niet wordt geblokkeerd. |
Het opnieuw proberen kan helpen als er onregelmatige verbindingsproblemen zijn. |
ServerBusyException | De service kan de aanvraag momenteel niet verwerken. | Client kan een bepaalde tijd wachten en de bewerking opnieuw uitvoeren. | De client kan het na een bepaald interval opnieuw proberen. Als een nieuwe poging resulteert in een andere uitzondering, controleert u het gedrag van die uitzondering. |
MessagingException | Algemene berichtuitzondering die in de volgende gevallen kan worden gegenereerd: Er wordt geprobeerd een QueueClient te maken met behulp van een naam of pad dat deel uitmaakt van een ander entiteitstype (bijvoorbeeld een onderwerp). Er wordt geprobeerd een bericht te verzenden dat groter is dan 256 kB. Er is een fout opgetreden tijdens de verwerking van de aanvraag door de server of service. Zie het uitzonderingsbericht voor meer informatie. Dit is meestal een tijdelijke uitzondering.De aanvraag is beëindigd omdat de entiteit wordt beperkt. Foutcode: 50001, 50002, 50008. |
Controleer de code en zorg ervoor dat alleen serialiseerbare objecten worden gebruikt voor de berichttekst (of gebruik een aangepaste serialisatiefunctie). Raadpleeg de documentatie voor de ondersteunde waardetypen van de eigenschappen en gebruik alleen ondersteunde typen. Controleer de eigenschap IsTransient . Als dit het geval is, kunt u de bewerking opnieuw proberen. |
Als de uitzondering wordt veroorzaakt door beperking, wacht u enkele seconden en probeert u de bewerking opnieuw uit te voeren. Gedrag voor opnieuw proberen is niet gedefinieerd en kan niet helpen in andere scenario's. |
MessagingEntityAlreadyExistsException | Probeer een entiteit te maken met een naam die al wordt gebruikt door een andere entiteit in die servicenaamruimte. | Verwijder de bestaande entiteit of kies een andere naam voor de entiteit die moet worden gemaakt. | Het is niet handig om het opnieuw te proberen. |
QuotaExceededException | De berichtenentiteit heeft de maximale toegestane grootte bereikt of het maximum aantal verbindingen met een naamruimte is overschreden. | Maak ruimte in de entiteit door berichten van de entiteit of subqueues te ontvangen. Zie QuotaExceededException. | Het opnieuw proberen kan helpen als berichten ondertussen zijn verwijderd. |
RuleActionException | Service Bus retourneert deze uitzondering als u probeert een ongeldige regelactie te maken. Service Bus voegt deze uitzondering toe aan een bericht met een doodletter als er een fout optreedt tijdens het verwerken van de regelactie voor dat bericht. | Controleer de regelactie op juistheid. | Het is niet handig om het opnieuw te proberen. |
FilterException | Service Bus retourneert deze uitzondering als u probeert een ongeldig filter te maken. Service Bus voegt deze uitzondering toe aan een bericht met een doodletter als er een fout is opgetreden tijdens het verwerken van het filter voor dat bericht. | Controleer het filter op juistheid. | Het is niet handig om het opnieuw te proberen. |
SessionCannotBeLockedException | Probeer een sessie met een specifieke sessie-id te accepteren, maar de sessie is momenteel vergrendeld door een andere client. | Zorg ervoor dat de sessie is ontgrendeld door andere clients. | Het opnieuw proberen kan helpen als de sessie in de tussentijd is uitgebracht. |
TransactionSizeExceededException | Te veel bewerkingen maken deel uit van de transactie. | Verminder het aantal bewerkingen dat deel uitmaakt van deze transactie. | Het is niet handig om het opnieuw te proberen. |
MessagingEntityDisabledException | Aanvraag voor een runtimebewerking op een uitgeschakelde entiteit. | Activeer de entiteit. | Het opnieuw proberen kan helpen als de entiteit in de tussentijd is geactiveerd. |
NoMatchingSubscriptionException | Service Bus retourneert deze uitzondering als u een bericht verzendt naar een onderwerp waarvoor vooraf filteren is ingeschakeld en geen van de filters overeenkomen. | Zorg ervoor dat ten minste één filter overeenkomt. | Het is niet handig om het opnieuw te proberen. |
MessageSizeExceededException | Een nettolading van een bericht overschrijdt de limiet van 256 kB. De limiet van 256 kB is de totale berichtgrootte, waaronder systeemeigenschappen en eventuele .NET-overhead. | Verklein de nettolading van het bericht en voer de bewerking opnieuw uit. | Het is niet handig om het opnieuw te proberen. |
TransactionException | De omgevingstransactie (Transaction.Current ) is ongeldig. Het is mogelijk voltooid of afgebroken. Interne uitzondering kan aanvullende informatie bieden. |
Het is niet handig om het opnieuw te proberen. | |
TransactionInDoubtException | Er wordt geprobeerd een bewerking uit te voeren op een transactie die twijfelt of een poging wordt gedaan om de transactie vast te leggen en de transactie wordt in twijfel genomen. | Uw toepassing moet deze uitzondering verwerken (als een speciaal geval), omdat de transactie mogelijk al is doorgevoerd. | - |
QuotaExceededException
QuotaExceededException geeft aan dat een quotum voor een bepaalde entiteit is overschreden.
Wachtrijen en onderwerpen
Voor wachtrijen en onderwerpen is dit vaak de grootte van de wachtrij. De eigenschap van het foutbericht bevat meer details, zoals in het volgende voorbeeld:
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
Het bericht geeft aan dat het onderwerp de groottelimiet heeft overschreden, in dit geval 1 GB (de standaardgroottelimiet).
Naamruimten
Voor naamruimten kan QuotaExceededException aangeven dat een toepassing het maximum aantal verbindingen met een naamruimte heeft overschreden. Bijvoorbeeld:
Microsoft.ServiceBus.Messaging.QuotaExceededException: ConnectionsQuotaExceeded for namespace xxx.
<tracking-id-guid>_G12 --->
System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]:
ConnectionsQuotaExceeded for namespace xxx.
Veelvoorkomende oorzaken
Er zijn twee veelvoorkomende oorzaken voor deze fout: de wachtrij met dode letters en niet-functionerende berichtontvangers.
Wachtrij met onbestelbare berichten Een lezer kan geen berichten voltooien en de berichten worden geretourneerd naar de wachtrij/het onderwerp wanneer de vergrendeling verloopt. Dit kan gebeuren als de lezer een uitzondering tegenkomt die voorkomt dat BrokeredMessage.Complete wordt aangeroepen. Nadat een bericht 10 keer is gelezen, wordt het standaard verplaatst naar de wachtrij met dode letters. Dit gedrag wordt bepaald door de eigenschap QueueDescription.MaxDeliveryCount en heeft een standaardwaarde van 10. Naarmate berichten zich opstapelen in de wachtrij met dode letters, nemen ze ruimte in beslag.
Als u het probleem wilt oplossen, leest en voltooit u de berichten uit de wachtrij voor onbestelbare berichten, net zoals in een andere wachtrij. U kunt de methode FormatDeadLetterPath gebruiken om het wachtrijpad voor onbestelbare letters op te maken.
Ontvanger is gestopt. Een ontvanger heeft geen berichten meer ontvangen van een wachtrij of abonnement. U kunt dit identificeren door naar de eigenschap QueueDescription.MessageCountDetails te kijken, waarin de volledige uitsplitsing van de berichten wordt weergegeven. Als de eigenschap ActiveMessageCount hoog of groeit, worden de berichten niet zo snel gelezen als ze worden geschreven.
TimeoutException
Een TimeoutException geeft aan dat een door de gebruiker geïnitieerde bewerking langer duurt dan de time-out voor de bewerking.
Controleer de waarde van de eigenschap ServicePointManager.Default Verbinding maken ionLimit, omdat het bereiken van deze limiet ook een TimeoutException kan veroorzaken.
Time-outs kunnen optreden tijdens of tussen onderhoudsbewerkingen, zoals service-updates van Service Bus (of) besturingssysteemupdates voor resources waarop de service wordt uitgevoerd. Tijdens besturingssysteemupdates worden entiteiten verplaatst en worden knooppunten bijgewerkt of opnieuw opgestart, wat time-outs kan veroorzaken. Zie de SLA voor Service Bus voor meer informatie over de serviceovereenkomst voor de Azure Service Bus-service.
Wachtrijen en onderwerpen
Voor wachtrijen en onderwerpen wordt de time-out opgegeven in MessagingFactory Instellingen. De eigenschap OperationTimeout, als onderdeel van de verbindingsreeks of via ServiceBus Verbinding maken ionStringBuilder. Het foutbericht zelf kan variëren, maar bevat altijd de time-outwaarde die is opgegeven voor de huidige bewerking.
MessageLockLostException
Oorzaak
De MessageLockLostException wordt gegenereerd wanneer een bericht wordt ontvangen met behulp van de PeekLock-ontvangstmodus en de vergrendeling die door de client wordt bewaard, verloopt aan de servicezijde.
De vergrendeling van een bericht kan om verschillende redenen verlopen:
- De vergrendelingstimer is verlopen voordat deze is vernieuwd door de clienttoepassing.
- De clienttoepassing heeft de vergrendeling verkregen, opgeslagen in een permanente opslag en vervolgens opnieuw opgestart. Nadat deze opnieuw is opgestart, heeft de clienttoepassing gekeken naar de inflight-berichten en geprobeerd deze te voltooien.
Mogelijk ontvangt u deze uitzondering ook in de volgende scenario's:
- Service-update
- Update van besturingssysteem
- Eigenschappen voor de entiteit wijzigen (wachtrij, onderwerp, abonnement) tijdens het vasthouden van de vergrendeling.
Oplossing
Wanneer een clienttoepassing MessageLockLostException ontvangt, kan het bericht niet meer worden verwerkt. De clienttoepassing kan eventueel overwegen om de uitzondering voor analyse te registreren, maar de client moet het bericht verwijderen.
Omdat de vergrendeling van het bericht is verlopen, gaat het terug naar de wachtrij (of het abonnement) en kan het worden verwerkt door de volgende clienttoepassing die oproepen ontvangt.
Als maxDeliveryCount is overschreden, wordt het bericht mogelijk verplaatst naar de DeadLetterQueue.
SessionLockLostException
Oorzaak
De SessionLockLostException wordt gegenereerd wanneer een sessie wordt geaccepteerd en de vergrendeling die door de client wordt bewaard, verloopt aan de servicezijde.
De vergrendeling van een sessie verloopt mogelijk om verschillende redenen:
- De vergrendelingstimer is verlopen voordat deze is vernieuwd door de clienttoepassing.
- De clienttoepassing heeft de vergrendeling verkregen, opgeslagen in een permanente opslag en vervolgens opnieuw opgestart. Zodra deze opnieuw is opgestart, heeft de clienttoepassing gekeken naar de inflight sessies en geprobeerd de berichten in die sessies te verwerken.
Mogelijk ontvangt u deze uitzondering ook in de volgende scenario's:
- Service-update
- Update van besturingssysteem
- Eigenschappen voor de entiteit wijzigen (wachtrij, onderwerp, abonnement) tijdens het vasthouden van de vergrendeling.
Oplossing
Wanneer een clienttoepassing SessionLockLostException ontvangt, kunnen de berichten in de sessie niet meer worden verwerkt. De clienttoepassing kan overwegen om de uitzondering voor analyse te registreren, maar de client moet het bericht verwijderen.
Omdat de vergrendeling van de sessie is verlopen, gaat deze terug naar de wachtrij (of het abonnement) en kan deze worden vergrendeld door de volgende clienttoepassing die de sessie accepteert. Aangezien de sessievergrendeling op elk gewenst moment wordt bewaard door één clienttoepassing, wordt de verwerking in volgorde gegarandeerd.
SocketException
Oorzaak
In de volgende gevallen wordt een SocketException gegenereerd:
- Wanneer een verbindingspoging mislukt omdat de host na een opgegeven tijd niet goed heeft gereageerd (TCP-foutcode 10060).
- Een tot stand gebrachte verbinding is mislukt omdat de verbonden host niet heeft gereageerd.
- Er is een fout opgetreden bij het verwerken van het bericht of de time-out wordt overschreden door de externe host.
- Probleem met onderliggende netwerkresources.
Oplossing
De SocketException-fouten geven aan dat de VM die als host fungeert voor de toepassingen, de naam <mynamespace>.servicebus.windows.net
niet kan converteren naar het bijbehorende IP-adres.
Controleer of de volgende opdracht slaagt in de toewijzing aan een IP-adres.
PS C:\> nslookup <mynamespace>.servicebus.windows.net
Dit moet een uitvoer bieden zoals:
Name: <cloudappinstance>.cloudapp.net
Address: XX.XX.XXX.240
Aliases: <mynamespace>.servicebus.windows.net
Als de bovenstaande naam niet wordt omgezet in een IP en de naamruimtealias, neemt u contact op met de netwerkbeheerder om verder te onderzoeken. Naamomzetting wordt uitgevoerd via een DNS-server, meestal een resource in het netwerk van de klant. Als de DNS-omzetting wordt uitgevoerd door Azure DNS, neemt u contact op met ondersteuning voor Azure.
Als naamomzetting werkt zoals verwacht, controleert u hier of verbindingen met Azure Service Bus zijn toegestaan.
MessagingException
Oorzaak
MessagingException is een algemene uitzondering die om verschillende redenen kan worden gegenereerd. Enkele van de redenen zijn:
- Er wordt geprobeerd een QueueClient te maken voor een onderwerp of een abonnement.
- De grootte van het verzonden bericht is groter dan de limiet voor de opgegeven laag. Lees meer over de Service Bus-quota en -limieten.
- Specifieke aanvraag voor het gegevensvlak (verzenden, ontvangen, voltooien, verlaten) is beëindigd vanwege beperking.
- Tijdelijke problemen die worden veroorzaakt door service-upgrades en opnieuw opstarten.
Notitie
De bovenstaande lijst met uitzonderingen is niet volledig.
Oplossing
De oplossingsstappen zijn afhankelijk van wat ervoor zorgde dat de MessagingException werd gegenereerd.
- Voor tijdelijke problemen (waarbij isTransient is ingesteld op waar) of voor beperkingsproblemen, kan het opnieuw proberen van de bewerking dit oplossen. Hiervoor kan het standaardbeleid voor opnieuw proberen voor de SDK worden gebruikt.
- Voor andere problemen geven de details in de uitzondering aan dat het probleem en de oplossingsstappen van hetzelfde kunnen worden afgeleid.
StorageQuotaExceededException
Oorzaak
De StorageQuotaExceededException wordt gegenereerd wanneer de totale grootte van entiteiten in een Premium-naamruimte de limiet van 1 TB per berichteneenheid overschrijdt.
Oplossing
- Het aantal berichteneenheden verhogen dat is toegewezen aan de Premium-naamruimte
- Als u al maximaal toegestane berichteneenheden voor een naamruimte gebruikt, maakt u een afzonderlijke naamruimte.
Volgende stappen
Zie de Naslaginformatie over de Azure .NET-API voor de volledige Service Bus .NET-API. Zie de gids voor probleemoplossing voor tips voor probleemoplossing.