Megosztás a következőn keresztül:


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:

  1. 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.
  2. 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.
  3. Á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ó.
  4. 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.

  1. 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.

  2. 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.