Service Bus-üzenetkezelési kivételek (elavult)
Ez a cikk a .NET-keretrendszer API-k által létrehozott .NET-kivételeket sorolja fel.
2026. szeptember 30-án kivonjuk az Azure Service Bus SDK-kódtárakat a WindowsAzure.ServiceBus, a Microsoft.Azure.ServiceBus és a com.microsoft.azure.servicebus kódtárakból, amelyek nem felelnek meg az Azure SDK irányelveinek. Az SBMP protokoll támogatását is megszüntetjük, így 2026. szeptember 30. után már nem használhatja ezt a protokollt. Migrálás a legújabb Azure SDK-kódtárakba, amelyek kritikus fontosságú biztonsági frissítéseket és továbbfejlesztett képességeket kínálnak ezen dátum előtt.
Bár a régebbi kódtárak 2026. szeptember 30-tól továbbra is használhatók, a Microsoft már nem kap hivatalos támogatást és frissítéseket. További információkért lásd a támogatási nyugdíjazási bejelentést.
Kivételkategóriák
Az üzenetkezelési API-k kivételeket hoznak létre, amelyek a következő kategóriákba sorolhatók, valamint a javításukhoz szükséges műveletekkel együtt. A kivétel jelentése és okai az üzenetküldési entitás típusától függően változhatnak:
- Felhasználói kódolási hiba (System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.SerializationException). Általános művelet: a folytatás előtt próbálja meg kijavítani a kódot.
- Beállítási/konfigurációs hiba (Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, System.UnauthorizedAccessException). Általános művelet: tekintse át a konfigurációt, és szükség esetén módosítsa.
- Átmeneti kivételek (Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException). Általános művelet: próbálkozzon újra a művelettel, vagy értesítse a felhasználókat. Az
RetryPolicy
ügyféloldali SDK osztálya konfigurálható úgy, hogy automatikusan kezelje az újrapróbálkozásokat. További információ: Újrapróbálkozás útmutató. - Egyéb kivételek (System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException). Általános művelet: a kivétel típusára jellemző; tekintse meg a következő szakaszban található táblázatot:
Fontos
- Az Azure Service Bus nem próbálkozik újra egy művelettel kivétel esetén, ha a művelet tranzakciós hatókörben van.
- Az Azure Service Busra vonatkozó újrapróbálkozáshoz kapcsolódó útmutatásért tekintse meg a Service Bus újrapróbálkozására vonatkozó útmutatóját.
Kivételtípusok
Az alábbi táblázat az üzenetküldési kivételtípusokat és azok okait, valamint a javasolt műveletek megjegyzéseit sorolja fel.
Kivétel típusa | Leírás/Ok/Példák | Javasolt művelet | Megjegyzés az automatikus/azonnali újrapróbálkozásról |
---|---|---|---|
TimeoutException | A kiszolgáló nem válaszolt a kért műveletre a megadott időn belül, amelyet az OperationTimeout vezérel. Lehetséges, hogy a kiszolgáló befejezte a kért műveletet. Ez hálózati vagy egyéb infrastruktúra-késések miatt fordulhat elő. | Ellenőrizze a rendszerállapot konzisztenciáját, és szükség esetén próbálkozzon újra. Tekintse meg az időtúllépési kivételeket. | Az újrapróbálkozás bizonyos esetekben segíthet; adja hozzá az újrapróbálkozás logikáját a kódhoz. |
InvalidOperationException | A kért felhasználói művelet nem engedélyezett a kiszolgálón vagy a szolgáltatáson belül. Részletekért tekintse meg a kivételről szóló üzenetet. A Complete() például akkor hozza létre ezt a kivételt, ha az üzenet FogadásAndDelete módban érkezett. | Ellenőrizze a kódot és a dokumentációt. Győződjön meg arról, hogy a kért művelet érvényes. | Az újrapróbálkozás nem segít. |
OperationCanceledException | Megkísérlik meghívni egy műveletet egy már lezárt, megszakított vagy megsemmisített objektumon. Ritkán a környezeti tranzakció már el van dobva. | Ellenőrizze a kódot, és győződjön meg arról, hogy nem indítja el a műveleteket egy megsemmisített objektumon. | Az újrapróbálkozás nem segít. |
UnauthorizedAccessException | A TokenProvider objektum nem tudott jogkivonatot beszerezni, a jogkivonat érvénytelen, vagy a jogkivonat nem tartalmazza a művelet végrehajtásához szükséges jogcímeket. | Győződjön meg arról, hogy a jogkivonat-szolgáltató a megfelelő értékekkel van létrehozva. Ellenőrizze a hozzáférés-vezérlési szolgáltatás konfigurációját. | Az újrapróbálkozás bizonyos esetekben segíthet; adja hozzá az újrapróbálkozás logikáját a kódhoz. |
ArgumentException ArgumentNullException ArgumentOutOfRangeException |
A metódushoz megadott egy vagy több argumentum érvénytelen. A NamespaceManager vagy a Create számára megadott URI elérési utakat tartalmaz. A NamespaceManager vagy a Create számára megadott URI-séma érvénytelen. A tulajdonság értéke nagyobb, mint 32 KB. |
Ellenőrizze a hívó kódot, és győződjön meg arról, hogy az argumentumok helyesek. | Az újrapróbálkozás nem segít. |
MessagingEntityNotFoundException | A művelethez társított entitás nem létezik, vagy törölték. | Győződjön meg arról, hogy az entitás létezik. | Az újrapróbálkozás nem segít. |
MessageNotFoundException | Egy adott sorszámmal rendelkező üzenet fogadása. Ez az üzenet nem található. | Győződjön meg arról, hogy az üzenet még nem érkezett meg. Ellenőrizze a deadletter-üzenetsort, hogy az üzenet holtpontra került-e. | Az újrapróbálkozás nem segít. |
MessagingCommunicationException | Az ügyfél nem tud kapcsolatot létesíteni a Service Bus szolgáltatással. | Győződjön meg arról, hogy a megadott gazdagép neve helyes, és a gazdagép elérhető. Ha a kód tűzfallal/proxyval rendelkező környezetben fut, győződjön meg arról, hogy a Service Bus-tartomány/IP-cím és portok felé történő forgalom nincs blokkolva. |
Az újrapróbálkozás segíthet, ha időszakos csatlakozási problémák merülnek fel. |
ServerBusyException | A szolgáltatás jelenleg nem tudja feldolgozni a kérést. | Az ügyfél várhat egy ideig, majd próbálkozzon újra a művelettel. | Előfordulhat, hogy az ügyfél bizonyos időközönként újra próbálkozik. Ha egy újrapróbálkozás más kivételt eredményez, ellenőrizze a kivétel újrapróbálkozásának viselkedését. |
MessagingException | Általános üzenetkezelési kivétel, amely a következő esetekben fordulhat elő: A QueueClient létrehozása egy másik entitástípushoz (például egy témakörhöz) tartozó név vagy elérési út használatával történik. 256 KB-nál nagyobb üzenet küldésére tett kísérlet. A kiszolgáló vagy szolgáltatás hibát észlelt a kérés feldolgozása során. Részletekért tekintse meg a kivételről szóló üzenetet. Ez általában átmeneti kivétel.A kérés azért lett megszakítva, mert az entitás szabályozása folyamatban van. Hibakód: 50001, 50002, 50008. |
Ellenőrizze a kódot, és győződjön meg arról, hogy csak szerializálható objektumokat használ az üzenet törzséhez (vagy egyéni szerializálót használ). Ellenőrizze a tulajdonságok támogatott értéktípusait a dokumentációban, és csak a támogatott típusokat használja. Ellenőrizze az IsTransient tulajdonságot. Ha igaz, újrapróbálhatja a műveletet. |
Ha a kivétel szabályozás miatt van, várjon néhány másodpercet, és próbálkozzon újra a művelettel. Az újrapróbálkozások viselkedése nincs meghatározva, és előfordulhat, hogy más forgatókönyvekben nem segít. |
MessagingEntityAlreadyExistsException | Olyan entitás létrehozása, amelynek neve már szerepel a szolgáltatásnévtérben egy másik entitás által használt névvel. | Törölje a meglévő entitást, vagy válasszon másik nevet a létrehozandó entitásnak. | Az újrapróbálkozás nem segít. |
QuotaExceededException | Az üzenetkezelő entitás elérte a megengedett maximális méretet, vagy túllépte a névtérhez való kapcsolatok maximális számát. | Hozzon létre szóközt az entitásban, ha üzeneteket fogad az entitástól vagy annak alqueu-jaitól. Lásd: QuotaExceededException. | Az újrapróbálkozás segíthet, ha az üzenetek időközben el lettek távolítva. |
RuleActionException | A Service Bus ezt a kivételt adja vissza, ha érvénytelen szabályműveletet próbál létrehozni. A Service Bus ezt a kivételt egy halott üzenethez csatolja, ha hiba történik az üzenet szabályműveletének feldolgozása során. | Ellenőrizze a szabályművelet helyességét. | Az újrapróbálkozás nem segít. |
FilterException | A Service Bus ezt a kivételt adja vissza, ha érvénytelen szűrőt próbál létrehozni. A Service Bus ezt a kivételt egy sikertelen üzenethez csatolja, ha hiba történt az üzenet szűrőjének feldolgozása során. | Ellenőrizze a szűrő helyességét. | Az újrapróbálkozás nem segít. |
SessionCannotBeLockedException | Kísérlet egy adott munkamenet-azonosítóval rendelkező munkamenet elfogadására, de a munkamenetet jelenleg egy másik ügyfél zárolja. | Győződjön meg arról, hogy a munkamenetet más ügyfelek feloldották. | Az újrapróbálkozás segíthet, ha a munkamenet időközben ki lett adva. |
TransactionSizeExceededException | Túl sok művelet része a tranzakciónak. | Csökkentse a tranzakció részét képező műveletek számát. | Az újrapróbálkozás nem segít. |
MessagingEntityDisabledException | Futásidejű művelet kérése letiltott entitáson. | Aktiválja az entitást. | Az újrapróbálkozás segíthet, ha az entitást időközben aktiválták. |
NoMatchingSubscriptionException | A Service Bus akkor adja vissza ezt a kivételt, ha üzenetet küld egy olyan témakörnek, amelyben engedélyezve van az előszűrés, és egyik szűrő sem egyezik. | Győződjön meg arról, hogy legalább egy szűrő egyezik. | Az újrapróbálkozás nem segít. |
MessageSizeExceededException | Az üzenetek hasznos adatai túllépik a 256 KB-os korlátot. A 256 KB-os korlát az üzenet teljes mérete, amely tartalmazhat rendszertulajdonságokat és .NET-többletterheléseket. | Csökkentse az üzenet hasznos adatainak méretét, majd próbálkozzon újra a művelettel. | Az újrapróbálkozás nem segít. |
TransactionException | A környezeti tranzakció (Transaction.Current ) érvénytelen. Lehet, hogy befejeződött vagy megszakadt. A belső kivétel további információkat adhat meg. |
Az újrapróbálkozás nem segít. | |
TransactionInDoubtException | A rendszer egy olyan tranzakción kísérel meg műveletet, amely kétséges, vagy kísérletet tesz a tranzakció véglegesítésére, és a tranzakció kétségessé válik. | Az alkalmazásnak kezelnie kell ezt a kivételt (különleges esetként), mivel lehetséges, hogy a tranzakció már véglegesített. | - |
QuotaExceededException
A QuotaExceededException kivétel azt jelzi, hogy túllépte az adott entitáshoz tartozó kvótát.
Megjegyzés:
A Service Bus-kvótákért lásd a kvótákat.
Üzenetsorok és témakörök
Az üzenetsorok és témakörök esetében gyakran az üzenetsor mérete. A hibaüzenet tulajdonság további részleteket tartalmaz, ahogyan az alábbi példában is látható:
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
Az üzenet azt jelzi, hogy a témakör túllépte a méretkorlátot, ebben az esetben 1 GB-ot (az alapértelmezett méretkorlátot).
Névterek
A névterek esetében a QuotaExceededException azt jelezheti, hogy egy alkalmazás túllépte a névtérrel létesített kapcsolatok maximális számát. Például:
Microsoft.ServiceBus.Messaging.QuotaExceededException: ConnectionsQuotaExceeded for namespace xxx.
<tracking-id-guid>_G12 --->
System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]:
ConnectionsQuotaExceeded for namespace xxx.
Common causes
Ennek a hibának két gyakori oka van: a kézbesítetlen levelek üzenetsora és a nem működő üzenet fogadói.
Kézbesítetlen levelek üzenetsora : Az olvasó nem hajtja végre az üzeneteket, és a zárolás lejártakor az üzenetek visszakerülnek az üzenetsorba/témakörbe. Ez akkor fordulhat elő, ha az olvasó olyan kivételt tapasztal, amely megakadályozza a BrokeredMessage.Complete meghívását. Miután egy üzenetet 10 alkalommal elolvastak, alapértelmezés szerint a kézbesítetlen levelek várólistára kerülnek. Ezt a viselkedést a QueueDescription.MaxDeliveryCount tulajdonság szabályozza, és alapértelmezett értéke 10. Ahogy az üzenetek halmozódnak fel a holt levelek üzenetsorában, helyet foglalnak.
A probléma megoldásához olvassa el és fejezze be az üzeneteket a kézbesítetlen levelek üzenetsorából, ahogyan bármely más üzenetsorból tenné. A FormatDeadLetterPath metódus segítségével formázhatja a kézbesítetlen levelek üzenetsorának elérési útját.
A fogadó leállt. A fogadó leállította az üzenetek fogadását egy üzenetsorból vagy előfizetésből. Ennek azonosításához tekintse meg a QueueDescription.MessageCountDetails tulajdonságot, amely az üzenetek teljes lebontását mutatja. Ha az ActiveMessageCount tulajdonság magas vagy növekvő, akkor az üzenetek írás közben nem lesznek olyan gyorsan olvashatók.
TimeoutException
A TimeoutException kivétel azt jelzi, hogy egy felhasználó által kezdeményezett művelet hosszabb időt vesz igénybe, mint az ahhoz kapcsolódó időtúllépési korlát.
Ellenőrizze a ServicePointManager.Default Csatlakozás ionLimit tulajdonság értékét, mivel ennek a korlátnak a túllépése Is okozhat Időtúllépést.
Időtúllépések várhatóan az olyan karbantartási műveletek során, vagy azok között fordulhatnak elő, mint a Service Bus szolgáltatás frissítései (vagy) az operációs rendszer frissítései a szolgáltatást futtató erőforrásokon. Az operációs rendszer frissítései során egyes entitások áthelyeződnek, és a csomópontok frissülnek vagy újraindulnak, ami időtúllépéseket okozhat. Az Azure Service Bus szolgáltatás szolgáltatói szerződésének (SLA) részleteit a Service Bus SLA című cikk tartalmazza.
Üzenetsorok és témakörök
Az üzenetsorok és témakörök esetében az időtúllépés az MessagingFactoryban van megadva Gépház. OperationTimeout tulajdonság a kapcsolati sztring részeként vagy a ServiceBus Csatlakozás ionStringBuilderen keresztül. Maga a hibaüzenet eltérő lehet, de mindig tartalmazza az aktuális művelethez megadott időtúllépési értéket.
MessageLockLostException
Ok
A MessageLockLostException akkor indul el, ha egy üzenet a PeekLock fogadási módban érkezik, és az ügyfél által tartott zárolás lejár a szolgáltatás oldalán.
Az üzenet zárolása különböző okok miatt lejárhat:
- A zárolási időzítő lejárt, mielőtt az ügyfélalkalmazás megújította volna.
- Az ügyfélalkalmazás megszerezte a zárolást, mentette egy állandó tárolóba, majd újraindult. Miután újraindult, az ügyfélalkalmazás megvizsgálta az inflight üzeneteket, és megpróbálta befejezni ezeket.
A következő esetekben is előfordulhat, hogy ez a kivétel jelenik meg:
- Szolgáltatásfrissítés
- Operációs rendszer frissítése
- Az entitás tulajdonságainak módosítása (üzenetsor, témakör, előfizetés) a zárolás megtartása közben.
Resolution (Osztás)
Amikor egy ügyfélalkalmazás megkapja a MessageLockLostException parancsot, az már nem tudja feldolgozni az üzenetet. Előfordulhat, hogy az ügyfélalkalmazás megfontolja a kivétel naplózását elemzés céljából, de az ügyfélnek el kell végeznie az üzenetet.
Mivel az üzenet zárolása lejárt, visszalép az üzenetsorba (vagy előfizetésbe), és a következő ügyfélalkalmazás feldolgozhatja, amely hívásokat fogad.
Ha a MaxDeliveryCount túllépte az értéket, lehetséges, hogy az üzenet átkerül a DeadLetterQueue fájlba.
SessionLockLostException
Ok
A SessionLockLostException a munkamenet elfogadásakor és az ügyfél által tartott zárolás a szolgáltatás oldalán lejár.
A munkamenet zárolása különböző okok miatt lejárhat:
- A zárolási időzítő lejárt, mielőtt az ügyfélalkalmazás megújította volna.
- Az ügyfélalkalmazás megszerezte a zárolást, mentette egy állandó tárolóba, majd újraindult. Miután újraindult, az ügyfélalkalmazás megvizsgálta a gyenge módban lévő munkameneteket, és megpróbálta feldolgozni az ezekben a munkamenetekben lévő üzeneteket.
A következő esetekben is előfordulhat, hogy ez a kivétel jelenik meg:
- Szolgáltatásfrissítés
- Operációs rendszer frissítése
- Az entitás tulajdonságainak módosítása (üzenetsor, témakör, előfizetés) a zárolás megtartása közben.
Resolution (Osztás)
Amikor egy ügyfélalkalmazás megkapja a SessionLockLostException parancsot, az már nem tudja feldolgozni a munkamenetben lévő üzeneteket. Az ügyfélalkalmazás megfontolhatja a kivétel naplózását elemzés céljából, de az ügyfélnek el kell dobnia az üzenetet.
Mivel a munkamenet zárolása lejárt, az visszaáll az üzenetsorra (vagy előfizetésre), és a munkamenetet elfogadó következő ügyfélalkalmazás zárolhatja. Mivel a munkamenet-zárolást egy ügyfélalkalmazás tartja meg bármikor, a rendelés szerinti feldolgozás garantált.
SocketException
Ok
A SocketException a következő esetekben fordul elő:
- Ha egy csatlakozási kísérlet meghiúsul, mert a gazdagép nem válaszolt megfelelően egy megadott időpont után (TCP-hibakód: 10060).
- A létrehozott kapcsolat nem sikerült, mert a csatlakoztatott gazdagép nem tudott válaszolni.
- Hiba történt az üzenet feldolgozásakor, vagy a távoli gazdagép túllépte az időtúllépést.
- A mögöttes hálózati erőforrás problémája.
Resolution (Osztás)
A SocketException hibák azt jelzik, hogy az alkalmazásokat üzemeltető virtuális gép nem tudja átalakítani a nevet <mynamespace>.servicebus.windows.net
a megfelelő IP-címre.
Ellenőrizze, hogy az alábbi parancs sikeresen megfelel-e egy IP-címnek.
PS C:\> nslookup <mynamespace>.servicebus.windows.net
Amelynek a következő kimenetet kell megadnia:
Name: <cloudappinstance>.cloudapp.net
Address: XX.XX.XXX.240
Aliases: <mynamespace>.servicebus.windows.net
Ha a fenti név nem oldja fel az IP-címet és a névtér aliasát, a további vizsgálathoz forduljon a hálózati rendszergazdához. A névfeloldás általában egy DNS-kiszolgálón keresztül történik, amely általában az ügyfélhálózat egyik erőforrása. Ha a DNS-feloldás az Azure DNS-sel történik, forduljon Azure-támogatás.
Ha a névfeloldás a várt módon működik, ellenőrizze, hogy engedélyezett-e az Azure Service Bushoz való csatlakozás.
MessagingException
Ok
A MessagingException egy általános kivétel, amelyet különböző okokból lehet kihozni. Ennek néhány oka a következő:
- Megkísérli létrehozni a QueueClientet egy témakörben vagy előfizetésben.
- Az elküldött üzenet mérete nagyobb, mint az adott szint korlátja. További információ a Service Bus kvótáiról és korlátairól.
- Az adatsík adott kérése (küldés, fogadás, befejezés, megszakítás) a szabályozás miatt le lett állítva.
- Átmeneti problémák, amelyek a szolgáltatásfrissítések és -újraindítások miatt keletkeznek.
Megjegyzés:
A kivételek fenti listája nem teljes.
Resolution (Osztás)
A megoldási lépések attól függenek, hogy mi okozta a MessagingException elvetését .
- Átmeneti problémák (ahol aTransient értéke igaz), vagy a szabályozással kapcsolatos problémák esetén a művelet újrapróbálkozása megoldhatja azt. Ehhez az SDK alapértelmezett újrapróbálkozési szabályzata használható.
- Egyéb problémák esetén a kivétel részletei azt jelzik, hogy a probléma és a megoldás lépései ugyanabból következtethetők.
StorageQuotaExceedEdException
Ok
A StorageQuotaExceededException akkor jön létre, ha a prémium névtérben lévő entitások teljes mérete meghaladja az üzenetkezelési egységenként 1 TB-os korlátot.
Resolution (Osztás)
- A prémium névtérhez rendelt üzenetkezelési egységek számának növelése
- Ha már használ maximálisan engedélyezett üzenetkezelési egységeket egy névtérhez, hozzon létre egy külön névteret.
Következő lépések
A Service Bus .NET API teljes referenciájának megtekintéséhez tekintse meg az Azure .NET API-referenciát. Hibaelhárítási tippekért tekintse meg a hibaelhárítási útmutatót.