Výjimky zasílání zpráv služby Service Bus (zastaralé)
Tento článek obsahuje seznam výjimek rozhraní .NET generovaných rozhraními API rozhraní .NET Framework.
30. září 2026 vyřadíme knihovny sady SDK služby Azure Service Bus pro WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus a com.microsoft.azure.servicebus, které nevyhovují pokynům sady Azure SDK. Také ukončíme podporu protokolu SBMP, takže tento protokol už nebudete moct používat po 30. září 2026. Před tímto datem migrujte na nejnovější knihovny sady Azure SDK, které nabízejí důležité aktualizace zabezpečení a vylepšené funkce.
I když starší knihovny je možné používat i po 30. září 2026, nebudou už od Microsoftu dostávat oficiální podporu a aktualizace. Další informace najdete v oznámení o vyřazení podpory.
Kategorie výjimek
Rozhraní API pro zasílání zpráv generují výjimky, které můžou spadat do následujících kategorií, spolu s přidruženou akcí, kterou můžete provést a zkusit je opravit. Význam a příčiny výjimky se mohou lišit v závislosti na typu entity zasílání zpráv:
- Chyba kódování uživatele (System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException). Obecná akce: Před pokračováním zkuste kód opravit.
- Chyba nastavení/konfigurace (Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, System.UnauthorizedAccessException. Obecná akce: Zkontrolujte konfiguraci a v případě potřeby ji změňte.
- Přechodné výjimky (Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException). Obecná akce: Zkuste operaci zopakovat nebo upozornit uživatele. Třídu
RetryPolicy
v klientské sadě SDK je možné nakonfigurovat tak, aby zpracovávala opakované pokusy automaticky. Další informace najdete v doprovodných materiálech k opakování. - Další výjimky (System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException). Obecná akce: specifická pro typ výjimky; projděte si tabulku v následující části:
Důležité
- Azure Service Bus neopakuje operaci v případě výjimky, pokud je operace v oboru transakce.
- Pokyny pro opakování specifické pro Službu Azure Service Bus najdete v pokynech k opakování služby Service Bus.
Typy výjimek
Následující tabulka uvádí typy výjimek zasílání zpráv a jejich příčiny a navrhované akce, které můžete provést.
Typ výjimky | Popis, příčina/ příklady | Navrhovaná akce | Poznámka k automatickému nebo okamžitému opakování |
---|---|---|---|
TimeoutException | Server neodpověděl na požadovanou operaci v zadaném čase, který je řízen operací OperationTimeout. Server mohl dokončit požadovanou operaci. Může k tomu dojít kvůli zpoždění sítě nebo jiné infrastruktury. | Zkontrolujte konzistenci systému a v případě potřeby to zkuste znovu. Viz výjimky časového limitu. | Opakování může v některých případech pomoct; přidání logiky opakování do kódu |
Invalidoperationexception | Požadovaná operace uživatele není v rámci serveru nebo služby povolená. Podrobnosti najdete ve zprávě o výjimce. Například Complete() vygeneruje tuto výjimku, pokud byla zpráva přijata v režimu ReceiveAndDelete . | Zkontrolujte kód a dokumentaci. Ujistěte se, že požadovaná operace je platná. | Opakování nepomůže. |
Operationcanceledexception | Došlo k pokusu o vyvolání operace u objektu, který již byl uzavřen, přerušen nebo uvolněn. Ve výjimečných případech je okolí transakce již uvolněna. | Zkontrolujte kód a ujistěte se, že nevolá operace s odstraněným objektem. | Opakování nepomůže. |
Unauthorizedaccessexception | Objekt TokenProvider nemohl získat token, token je neplatný nebo token neobsahuje deklarace identity potřebné k provedení operace. | Ujistěte se, že je zprostředkovatel tokenu vytvořen se správnými hodnotami. Zkontrolujte konfiguraci služby Řízení přístupu. | Opakování může v některých případech pomoct; přidání logiky opakování do kódu |
Argumentexception Argumentnullexception ArgumentOutOfRangeException |
Jeden nebo více argumentů zadaných metodě je neplatný. Identifikátor URI zadaný pro NamespaceManager nebo Create obsahuje segmenty cest. Schéma identifikátoru URI zadané pro NamespaceManager nebo Create je neplatné. Hodnota vlastnosti je větší než 32 kB. |
Zkontrolujte volající kód a ujistěte se, že jsou argumenty správné. | Opakování nepomůže. |
MessagingEntityNotFoundException | Entita přidružená k operaci neexistuje nebo byla odstraněna. | Ujistěte se, že entita existuje. | Opakování nepomůže. |
MessageNotFoundException | Pokus o přijetí zprávy s určitým pořadovým číslem Tato zpráva nebyla nalezena. | Ujistěte se, že zpráva ještě nebyla přijata. Zkontrolujte frontu deadletter a zkontrolujte, jestli zpráva nebyla mrtvá. | Opakování nepomůže. |
MessagingCommunicationException | Klient nemůže navázat připojení ke službě Service Bus. | Ujistěte se, že je zadaný název hostitele správný a hostitel je dostupný. Pokud váš kód běží v prostředí s bránou firewall nebo proxy serverem, ujistěte se, že provoz do domény nebo IP adresy služby Service Bus a porty nejsou blokované. |
Pokud dochází k přerušovaným problémům s připojením, může to pomoct opakování. |
ServerBusyException | Služba v tuto chvíli nemůže požadavek zpracovat. | Klient může nějakou dobu počkat a pak operaci zopakovat. | Klient se může po určitém intervalu opakovat. Pokud opakování vede k jiné výjimce, zkontrolujte chování opakování této výjimky. |
MessagingException | Obecná výjimka zasílání zpráv, která může být vyvolán v následujících případech: Pokusí se vytvořit QueueClient pomocí názvu nebo cesty, která patří jinému typu entity (například tématu). Při pokusu o odeslání zprávy větší než 256 kB. Při zpracování požadavku došlo k chybě serveru nebo služby. Podrobnosti najdete ve zprávě o výjimce. Obvykle se jedná o přechodnou výjimku.Požadavek byl ukončen, protože entita je omezena. Kód chyby: 50001, 50002, 50008. |
Zkontrolujte kód a ujistěte se, že se pro text zprávy používají pouze serializovatelné objekty (nebo použijte vlastní serializátor). Projděte si dokumentaci k podporovaným typům hodnot vlastností a používejte pouze podporované typy. Zkontrolujte vlastnost IsTransient. Pokud je to pravda, můžete operaci zopakovat. |
Pokud je výjimka způsobená omezováním, počkejte několik sekund a zkuste operaci zopakovat. Chování opakování není definováno a nemusí pomoct v jiných scénářích. |
MessagingEntityAlreadyExistsException | Pokus o vytvoření entity s názvem, který již používá jiná entita v oboru názvů služby. | Odstraňte existující entitu nebo zvolte jiný název entity, která se má vytvořit. | Opakování nepomůže. |
Quotaexceededexception | Entita zasílání zpráv dosáhla maximální povolené velikosti nebo byl překročen maximální počet připojení k oboru názvů. | Vytvořte v entitě prostor příjmem zpráv z entity nebo jejích dílčích front. Viz QuotaExceededException. | Opakování může pomoct, pokud se mezitím odebraly zprávy. |
RuleActionException | Služba Service Bus vrátí tuto výjimku, pokud se pokusíte vytvořit neplatnou akci pravidla. Service Bus připojí tuto výjimku ke zprávě typu deadlettered, pokud při zpracování akce pravidla pro tuto zprávu dojde k chybě. | Zkontrolujte správnost akce pravidla. | Opakování nepomůže. |
FilterException | Služba Service Bus vrátí tuto výjimku, pokud se pokusíte vytvořit neplatný filtr. Service Bus připojí tuto výjimku ke zprávě typu deadlettered, pokud při zpracování filtru pro tuto zprávu došlo k chybě. | Zkontrolujte správnost filtru. | Opakování nepomůže. |
SessionCannotBeLockedException | Pokus o přijetí relace s konkrétním ID relace, ale relace je aktuálně uzamčena jiným klientem. | Ujistěte se, že je relace odemknutá jinými klienty. | Opakování může pomoct, pokud byla relace vydána dočasně. |
TransactionSizeExceededException | Příliš mnoho operací je součástí transakce. | Snižte počet operací, které jsou součástí této transakce. | Opakování nepomůže. |
MessagingEntityDisabledException | Žádost o operaci modulu runtime u zakázané entity | Aktivujte entitu. | Opakování může pomoct, pokud byla entita aktivována dočasně. |
NoMatchingSubscriptionException | Služba Service Bus vrátí tuto výjimku, pokud odešlete zprávu do tématu s povoleným předfiltrováním a žádné filtry se neshodují. | Ujistěte se, že alespoň jeden filtr odpovídá. | Opakování nepomůže. |
MessageSizeExceededException | Datová část zprávy překračuje limit 256 kB. Limit 256 kB je celková velikost zprávy, která může zahrnovat systémové vlastnosti a veškeré režijní náklady na .NET. | Zmenšete velikost datové části zprávy a zkuste operaci zopakovat. | Opakování nepomůže. |
TransactionException | Okolí transakce (Transaction.Current ) je neplatné. Je možné, že byla dokončena nebo přerušena. Vnitřní výjimka může poskytnout další informace. |
Opakování nepomůže. | |
TransactionInDoubtException | Operace se pokouší o transakci, která je pochybnosti, nebo je proveden pokus o potvrzení transakce a transakce se stane pochybností. | Vaše aplikace musí tuto výjimku zpracovat (jako zvláštní případ), protože transakce již mohla být potvrzena. | - |
Quotaexceededexception
QuotaExceededException indikuje, že došlo k překročení kvóty pro některou z entit.
Poznámka:
Kvóty služby Service Bus najdete v tématu Kvóty.
Fronty a témata
U front a témat se často jedná o velikost fronty. Vlastnost chybové zprávy obsahuje další podrobnosti, jak je znázorněno v následujícím příkladu:
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
Zpráva uvádí, že téma překročilo limit velikosti, v tomto případě 1 GB (výchozí limit velikosti).
Obory názvů
U oborů názvů může kvótaExceededException znamenat, že aplikace překročila maximální počet připojení k oboru názvů. Příklad:
Microsoft.ServiceBus.Messaging.QuotaExceededException: ConnectionsQuotaExceeded for namespace xxx.
<tracking-id-guid>_G12 --->
System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]:
ConnectionsQuotaExceeded for namespace xxx.
Běžné příčiny
Existují dvě běžné příčiny této chyby: fronta nedoručených zpráv a nefunkční příjemce zpráv.
Fronta nedoručených zpráv Čtenář nedokončí zprávy a při vypršení platnosti zámku se zprávy vrátí do fronty nebo tématu. K tomu může dojít, pokud čtenář narazí na výjimku, která brání v volání BrokeredMessage.Complete. Po přečtení zprávy 10krát se ve výchozím nastavení přesune do fronty nedoručených zpráv. Toto chování je řízeno QueueDescription.MaxDeliveryCount vlastnost a má výchozí hodnotu 10. Když se zprávy hromadí ve frontě mrtvých dopisů, zabírají místo.
Pokud chcete tento problém vyřešit, přečtěte si a dokončete zprávy z fronty nedoručených zpráv stejně jako z jakékoli jiné fronty. Pomocí metody FormatDeadLetterPath můžete naformátovat cestu fronty nedoručených písmen.
Přijímač se zastavil. Příjemce přestal přijímat zprávy z fronty nebo odběru. Způsob, jak to identifikovat, je podívat se na QueueDescription.MessageCountDetails vlastnost, která zobrazuje úplný rozpis zpráv. Pokud je vlastnost ActiveMessageCount vysoká nebo roste, zprávy se nečtou tak rychle, jak se zapisují.
TimeoutException
Výjimka TimeoutException zpravidla indikuje, že operace iniciovaná uživatelem trvá déle, než je příslušný časový limit.
Měli byste zkontrolovat hodnotu ServicePointManager.Default Připojení ionLimit vlastnost, protože dosažení tohoto limitu může také způsobit Vypršení časového limitu.
Vypršení časových limitů se dá očekávat během operací údržby nebo mezi nimi, například při aktualizacích služby Service Bus nebo aktualizacích operačního systému u prostředků, pomocí kterých je služba spuštěna. Během aktualizací operačního systému se přesunují entity a aktualizují se nebo se restartují uzly, což může způsobovat vypršení časových limitů. Podrobnosti o smlouvě o úrovni služeb (SLA) pro službu Service Bus viz Smlouva SLA pro službu Service Bus.
Fronty a témata
Pro fronty a témata je časový limit zadán buď v MessagingFactory Nastavení. OperationTimeout vlastnost, jako součást připojovací řetězec, nebo prostřednictvím ServiceBus Připojení ionStringBuilder. Samotná chybová zpráva se může lišit, ale vždy obsahuje hodnotu časového limitu zadanou pro aktuální operaci.
MessageLockLostException
Příčina
MessageLockLostException je vyvolána při přijetí zprávy pomocí režimu přijetí PeekLock a zámek uchovávaný klientem vyprší na straně služby.
Zámek zprávy může vypršet z různých důvodů:
- Časovač uzamčení vypršel dříve, než ho klientská aplikace obnovila.
- Klientská aplikace získala zámek, uložila ho do trvalého úložiště a pak se restartovala. Po restartování se klientská aplikace podívala na příchozí zprávy a pokusila se je dokončit.
Tuto výjimku můžete obdržet také v následujících scénářích:
- Aktualizace služby
- Aktualizace operačního systému
- Změna vlastností entity (fronta, téma, předplatné) při podržení zámku
Rozlišení
Když klientská aplikace obdrží zprávu MessageLockLostException, už ji nemůže zpracovat. Klientská aplikace může volitelně zvážit protokolování výjimky pro analýzu, ale klient musí zprávu odstranit.
Vzhledem k tomu, že vypršela platnost zámku zprávy, vrátí se zpět do fronty (nebo odběru) a může ji zpracovat další klientská aplikace, která volá.
Pokud došlo k překročení hodnoty MaxDeliveryCount, může být zpráva přesunuta do deadLetterQueue.
SessionLockLostException
Příčina
Relace SessionLockLostException je vyvolána, když je relace přijata a zámek uložený klientem vyprší na straně služby.
Zámek relace může vypršet z různých důvodů:
- Časovač uzamčení vypršel dříve, než ho klientská aplikace obnovila.
- Klientská aplikace získala zámek, uložila ho do trvalého úložiště a pak se restartovala. Po restartování se klientská aplikace podívala na příchozí relace a pokusila se zpracovat zprávy v těchto relacích.
Tuto výjimku můžete obdržet také v následujících scénářích:
- Aktualizace služby
- Aktualizace operačního systému
- Změna vlastností entity (fronta, téma, předplatné) při podržení zámku
Rozlišení
Když klientská aplikace obdrží SessionLockLostException, nemůže již zpracovávat zprávy v relaci. Klientská aplikace může zvážit protokolování výjimky pro analýzu, ale klient musí zprávu odstranit.
Vzhledem k tomu, že vypršela platnost zámku relace, vrátí se zpět do fronty (nebo předplatného) a může ji uzamknout další klientská aplikace, která tuto relaci přijme. Vzhledem k tomu, že zámek relace je uchován jednou klientskou aplikací v daném okamžiku, je zaručeno zpracování v daném pořadí.
SocketException
Příčina
SocketException je vyvolán v následujících případech:
- Když pokus o připojení selže, protože hostitel po zadané době správně neodpověděl (kód chyby TCP 10060).
- Navázané připojení se nezdařilo, protože se nepodařilo odpovědět připojenému hostiteli.
- Při zpracování zprávy došlo k chybě nebo vzdálený hostitel překročil časový limit.
- Problém s podkladovým síťovým prostředkem
Rozlišení
Chyby SocketException označují, že virtuální počítač hostující aplikace nemůže převést název <mynamespace>.servicebus.windows.net
na odpovídající IP adresu.
Zkontrolujte, jestli se následující příkaz úspěšně namapuje na IP adresu.
PS C:\> nslookup <mynamespace>.servicebus.windows.net
Který by měl poskytovat výstup jako:
Name: <cloudappinstance>.cloudapp.net
Address: XX.XX.XXX.240
Aliases: <mynamespace>.servicebus.windows.net
Pokud se výše uvedený název nepřeloží na IP adresu a alias oboru názvů, obraťte se na správce sítě a prověřte to podrobněji. Překlad názvů se provádí prostřednictvím serveru DNS, který obvykle představuje prostředek v síti zákazníka. Pokud překlad DNS provádí Azure DNS, kontaktujte podpora Azure.
Pokud překlad adres IP funguje podle očekávání, zkontrolujte, jestli je tady povolené připojení ke službě Azure Service Bus.
MessagingException
Příčina
MessagingException je obecná výjimka, která může být vyvolán z různých důvodů. Mezi důvody patří:
- Došlo k pokusu o vytvoření objektu QueueClient v tématu nebo předplatném.
- Velikost odeslané zprávy je větší než limit pro danou úroveň. Přečtěte si další informace o kvótách a omezeních služby Service Bus.
- Konkrétní žádost o rovinu dat (odeslání, příjem, dokončení, opuštění) byla ukončena kvůli omezování.
- Přechodné problémy způsobené upgrady služeb a restartováním
Poznámka:
Výše uvedený seznam výjimek není vyčerpávající.
Rozlišení
Postup řešení závisí na tom, co způsobilo vyvolání výjimky MessagingException .
- U přechodných problémů (kde je hodnota IsTransient nastavená na hodnotu true) nebo u problémů s omezováním může operace opakováním vyřešit. K tomu je možné použít výchozí zásady opakování v sadě SDK.
- V případě jiných problémů podrobnosti v výjimce označují problém a kroky řešení je možné odvodit ze stejného problému.
StorageQuotaExceededException
Příčina
StorageQuotaExceededException se vygeneruje, když celková velikost entit v oboru názvů premium překročí limit 1 TB na jednotku zasílání zpráv.
Rozlišení
- Zvýšení počtu jednotek zasílání zpráv přiřazených k oboru názvů Premium
- Pokud už pro obor názvů používáte maximální povolené jednotky zasílání zpráv, vytvořte samostatný obor názvů.
Další kroky
Kompletní referenční informace k rozhraní .NET API služby Service Bus najdete v referenčních informacích k rozhraní AZURE .NET API. Tipy pro řešení potíží najdete v průvodci odstraňováním potíží.