[Risolto] Codici di errore: eccezioni di messaggistica bus di servizio (deprecate)

Questo articolo elenca le eccezioni .NET generate dalle API .NET Framework deprecate per bus di servizio di Azure. Per ogni eccezione, trovare la causa e la risoluzione suggerita.

Il 30 settembre 2026 verranno ritirate le librerie dell'SDK del bus di servizio di Azure WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus e com.microsoft.azure.servicebus, che non sono conformi alle linee guida di Azure SDK. Verrà terminato anche il supporto del protocollo SBMP, quindi non sarà più possibile usare questo protocollo dopo il 30 settembre 2026. Eseguire la migrazione alle librerie più recenti di Azure SDK, che offrono aggiornamenti critici della sicurezza e funzionalità migliorate, prima di tale data.

Anche se le librerie precedenti possono ancora essere usate oltre il 30 settembre 2026, non riceveranno più il supporto e gli aggiornamenti ufficiali da Microsoft. Per ulteriori informazioni, consultare l'annuncio della cessazione del supporto.

Categorie di eccezioni di bus di servizio

Le API di messaggistica generano eccezioni che possono rientrare nelle categorie seguenti, insieme all'azione associata che è possibile eseguire per tentare di risolverle. Il significato e le cause di un'eccezione possono variare a seconda del tipo di entità di messaggistica:

  1. Errore di codifica utente (System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException). Azione generale: prova a correggere il codice prima di procedere.
  2. Errore di installazione/configurazione (Microsoft. ServiceBus.Messaging.MessagingEntityNotFoundException, System.UnauthorizedAccessException). Azione generale: rivedere la configurazione e modificarla se necessario.
  3. Eccezioni temporanee (Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException). Azione generale: riprovare l'operazione o inviare una notifica agli utenti. La classe RetryPolicy nel client SDK può essere configurata per gestire automaticamente i tentativi. Per altre informazioni, vedere Linee guida per la ripetizione dei tentativi.
  4. Altre eccezioni (System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException). Azione generale: specifica per il tipo di eccezione; Fare riferimento alla tabella nella sezione seguente:

Importante

Tipi di eccezioni di bus di servizio e relativa risoluzione

Nella tabella seguente sono elencati i tipi di eccezione di messaggistica e le relative cause, nonché le note sulle azioni suggerite che è possibile eseguire.

Tipo di eccezione Descrizione/Causa/Esempi Azione suggerita Nota sui tentativi automatici/immediati
Eccezione di timeout Il server non ha risposto all'operazione richiesta entro il tempo specificato, controllato da OperationTimeout. Il server può aver completato l'operazione richiesta. Può accadere a causa di ritardi nella rete o in altre infrastrutture. Controllare la coerenza dello stato del sistema e riprovare se necessario. Vedi le eccezioni di timeout. In alcuni casi può essere utile ripetere l'operazione; aggiungere al codice la logica di ripetizione dei tentativi.
InvalidOperationException L'operazione utente richiesta non è consentita all'interno del server o del servizio. Per informazioni dettagliate, vedere il messaggio di eccezione. Ad esempio, Complete() genera questa eccezione se il messaggio è stato ricevuto in modalità ReceiveAndDelete . Controllare il codice e la documentazione. Assicurarsi che l'operazione richiesta sia valida. I tentativi non sono utili.
OperationCanceledException È stato eseguito un tentativo di richiamare un'operazione su un oggetto già chiuso, interrotto o eliminato. In rari casi, la transazione ambientale è già stata smaltita. Controllare il codice e assicurarsi che non richiami le operazioni su un oggetto eliminato. I tentativi non sono utili.
Eccezione di accesso non autorizzato L'oggetto TokenProvider non è stato in grado di acquisire un token, il token non è valido o il token non contiene le attestazioni necessarie per eseguire l'operazione. Assicurarsi che il provider di token sia stato creato con i valori corretti. Verificare la configurazione del servizio di controllo accessi. In alcuni casi può essere utile ripetere l'operazione; aggiungere al codice la logica di ripetizione dei tentativi.
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Uno o più argomenti forniti al metodo non sono validi.
L'URI fornito a NamespaceManager o Create contiene segmenti di percorso.
Lo schema URI fornito a NamespaceManager o Create non è valido.
Il valore della proprietà è maggiore di 32 KB.
Controllare il codice chiamante e assicurarsi che gli argomenti siano corretti. I tentativi non sono utili.
MessagingEntityNotFoundException L'entità associata all'operazione non esiste o è stata eliminata. Assicurati che l'entità esista. I tentativi non sono utili.
MessageNotFoundException Tentativo di ricevere un messaggio con un numero di sequenza specifico. Questo messaggio non è stato trovato. Assicurati che il messaggio non sia già stato ricevuto. Controllare la coda dei messaggi non recapitabili per verificare se il messaggio è stato spostato nella coda dei messaggi non recapitabili. I tentativi non sono utili.
MessagingCommunicationException Il client non è in grado di stabilire una connessione al bus di servizio. Assicurarsi che il nome host fornito sia corretto e che l'host sia raggiungibile.

Se il codice viene eseguito in un ambiente con un firewall/proxy, assicurarsi che il traffico verso il dominio/indirizzo IP e le porte del bus di servizio non sia bloccato.

Se si verificano problemi di connettività intermittenti, potrebbe essere utile ripetere il tentativo.
ServerBusyException Il servizio non è in grado di elaborare la richiesta in questo momento. Il client può attendere un periodo di tempo, quindi riprovare l'operazione. Il client potrebbe riprovare dopo un determinato intervallo. Se un nuovo tentativo provoca un'eccezione diversa, verificare il comportamento dei tentativi di ripetizione per tale eccezione.
Eccezione di messaggistica Eccezione generica di messaggistica che potrebbe essere sollevata nei casi seguenti:

Viene effettuato un tentativo di creare un QueueClient utilizzando un nome o un percorso che appartiene a un tipo di entità diverso, ad esempio un argomento.

Viene effettuato un tentativo di inviare un messaggio di dimensioni superiori a 256 KB.

Il server o il servizio ha riscontrato un errore durante l'elaborazione della richiesta. Per informazioni dettagliate, vedere il messaggio di eccezione. Di solito si tratta di un'eccezione temporanea.

La richiesta è stata terminata perché l'entità è sottoposta a limitazione della frequenza. Codice errore: 50001, 50002, 50008.

Controllare il codice e assicurarsi che per il corpo del messaggio vengano utilizzati solo oggetti serializzabili (oppure utilizzare un serializzatore personalizzato).

Controllare la documentazione per i tipi di valore supportati delle proprietà e utilizzare solo i tipi supportati.

Controllare la proprietà IsTransient . Se è vero, è possibile riprovare l'operazione.

Se l'eccezione è dovuta alla limitazione della frequenza, attendere alcuni secondi e ripetere l'operazione. Il comportamento di ripetizione dei tentativi non è definito e potrebbe non essere utile in altri scenari.
MessagingEntityAlreadyExistsException Tentare di creare un'entità con un nome già utilizzato da un'altra entità nello spazio dei nomi del servizio. Elimina l'entità esistente o scegli un nome diverso per l'entità da creare. I tentativi non sono utili.
QuotaExceededException L'entità di messaggistica ha raggiunto la dimensione massima consentita oppure è stato superato il numero massimo di connessioni a uno spazio dei nomi. Crea spazio nell'entità ricevendo messaggi dall'entità o dalle sue code secondarie. Vedi QuotaExceededException. Se nel frattempo sono stati rimossi i messaggi, può essere utile ripetere l'operazione.
RuleActionException bus di servizio restituisce questa eccezione se si tenta di creare un'azione di regola non valida. Il bus di servizio associa questa eccezione a un messaggio non recapitabile se si verifica un errore durante l'elaborazione dell'azione della regola per tale messaggio. Controllare che l'azione della regola sia corretta. I tentativi non sono utili.
Eccezione filtro Il bus di servizio restituisce questa eccezione se si tenta di creare un filtro non valido. Il bus di servizio associa questa eccezione a un messaggio non recapitabile se si è verificato un errore durante l'elaborazione del filtro per tale messaggio. Controllare la correttezza del filtro. I tentativi non sono utili.
SessionCannotBeLockedException Tentare di accettare una sessione con un ID di sessione specifico, ma la sessione è attualmente bloccata da un altro client. Assicurarsi che la sessione sia sbloccata da altri client. Se nel frattempo la sessione è stata rilasciata, potrebbe essere utile ripetere il tentativo.
TransactionSizeExceededException Troppe operazioni fanno parte della transazione. Ridurre il numero di operazioni che fanno parte di questa transazione. I tentativi non sono utili.
MessagingEntityDisabledException Richiesta di un'operazione di runtime su un'entità disabilitata. Attivare l'entità. Un nuovo tentativo potrebbe essere utile se l'entità è stata attivata nel frattempo.
NoMatchingSubscriptionException Il bus di servizio restituisce questa eccezione se si invia un messaggio a un argomento in cui è abilitato il prefiltro e nessuno dei filtri corrisponde. Assicurati che almeno un filtro corrisponda. I tentativi non sono utili.
MessageSizeExceededException Un payload del messaggio supera il limite di 256 KB. Il limite di 256 KB è la dimensione totale dei messaggi, che può includere le proprietà di sistema e qualsiasi sovraccarico .NET. Ridurre le dimensioni del payload del messaggio e quindi ripetere l'operazione. I tentativi non sono utili.
TransactionException La transazione di ambiente (Transaction.Current) non è valida. Potrebbe essere stato completato o interrotto. L'eccezione interna potrebbe fornire informazioni aggiuntive. I tentativi non sono utili.
TransactionInDoubtException Si tenta di eseguire un'operazione su una transazione in stato di dubbio, oppure si tenta il commit della transazione e questa entra in stato di dubbio. L'applicazione deve gestire questa eccezione (come caso speciale), poiché è possibile che sia già stato eseguito il commit della transazione. -

Eccezione QuotaExceededException

QuotaExceededException indica che è stata superata la quota di un'entità specifica.

Annotazioni

Per le quote di bus di servizio, vedere Quote.

Code e argomenti

Per le code e i topic, spesso si tratta della dimensione della coda. La proprietà del messaggio di errore contiene altri dettagli, come nell'esempio seguente:

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

Il messaggio indica che l'argomento ha superato il limite di dimensioni, in questo caso 1 GB (limite di dimensioni predefinito).

Namespace

Per gli spazi dei nomi, QuotaExceededException può indicare che un'applicazione ha superato il numero massimo di connessioni a uno spazio dei nomi. Per esempio:

Microsoft.ServiceBus.Messaging.QuotaExceededException: ConnectionsQuotaExceeded for namespace xxx.
<tracking-id-guid>_G12 ---> 
System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: 
ConnectionsQuotaExceeded for namespace xxx.

Cause comuni

Esistono due cause comuni per questo errore: la coda dei messaggi non recapitabili e i ricevitori di messaggi non funzionali.

  1. Coda dei messaggi non recapitabili: un lettore non riesce a completare i messaggi e questi vengono restituiti alla coda o all'argomento alla scadenza del blocco. Può verificarsi se il lettore rileva un'eccezione che impedisce di chiamare BrokeredMessage.Complete. Dopo che un messaggio è stato letto 10 volte, viene spostato nella coda dei messaggi non recapitabili per impostazione predefinita. Questo comportamento è controllato dalla proprietà QueueDescription.MaxDeliveryCount e il valore predefinito è 10. Man mano che i messaggi si accumulano nella coda dei messaggi non recapitati, occupano spazio.

    Per risolvere il problema, leggi e completa i messaggi dalla coda dei messaggi non recapitati, come faresti con qualsiasi altra coda. È possibile utilizzare il metodo FormatDeadLetterPath per formattare il percorso della coda dei messaggi non recapitabili.

  2. Ricevitore arrestato. Un ricevitore ha smesso di ricevere messaggi da una coda o da una sottoscrizione. Il modo per identificarlo consiste nell'esaminare la proprietà QueueDescription.MessageCountDetails , che mostra la suddivisione completa dei messaggi. Se la proprietà ActiveMessageCount è alta o crescente, i messaggi non vengono letti alla stessa velocità con cui vengono scritti.

TimeoutException

Un'eccezione TimeoutException indica che un'operazione avviata dall'utente richiede più tempo del timeout dell'operazione.

Controllare il valore della proprietà ServicePointManager.DefaultConnectionLimit, in quanto il raggiungimento di questo limite può anche causare un evento di TimeoutException.

È prevedibile che si verifichino timeout durante le operazioni di manutenzione o negli intervalli tra di esse, ad esempio durante gli aggiornamenti del servizio bus di servizio (o) gli aggiornamenti del sistema operativo delle risorse che eseguono il servizio. Durante gli aggiornamenti del sistema operativo, le entità vengono spostate e i nodi vengono aggiornati o riavviati, causando timeout. Per informazioni dettagliate sul contratto di servizio per il servizio bus di servizio di Azure, vedere Contratto di servizio per il bus di servizio.

Code e argomenti

Per le code e i topic, il timeout viene specificato o nella proprietà MessagingFactorySettings.OperationTimeout, come parte della stringa di connessione, oppure tramite ServiceBusConnectionStringBuilder. Il messaggio di errore stesso può variare, ma contiene sempre il valore di timeout specificato per l'operazione corrente.

MessageLockLostException

MessageLockLostException indica che il blocco mantenuto dal client su un messaggio è scaduto sul lato servizio.

Motivo

L'eccezione MessageLockLostException viene generata quando un messaggio viene ricevuto utilizzando la modalità di ricezione PeekLock e il blocco mantenuto dal client scade sul lato servizio.

Il blocco su un messaggio potrebbe scadere a causa di diversi motivi:

  • Il timer di blocco è scaduto prima del rinnovo da parte dell'applicazione client.
  • L'applicazione client ha acquisito il blocco, lo ha salvato in un archivio permanente e quindi riavviato. Una volta riavviato, l'applicazione client ha esaminato i messaggi in corso e ha tentato di completarli.

È anche possibile ricevere questa eccezione negli scenari seguenti:

  • Aggiornamento del servizio
  • Aggiornamento del sistema operativo
  • Modifica delle proprietà sull'entità (coda, argomento, sottoscrizione) mentre si mantiene il blocco.

Risoluzione

Quando un'applicazione client riceve MessageLockLostException, non può più elaborare il messaggio. L'applicazione client può facoltativamente prendere in considerazione la registrazione dell'eccezione per l'analisi, ma il client deve eliminare il messaggio.

Poiché il blocco del messaggio è scaduto, verrà rimesso nella coda (o nella sottoscrizione) e potrà essere elaborato dall'applicazione client successiva che chiama receive.

Se MaxDeliveryCount è stato superato, il messaggio potrebbe essere spostato in DeadLetterQueue.

SessionLockLostException

SessionLockLostException indica che il blocco mantenuto dal client in una sessione è scaduto sul lato servizio.

Motivo

L'eccezione SessionLockLostException viene generata quando una sessione viene accettata e il blocco mantenuto dal client scade sul lato servizio.

Il blocco della sessione può scadere per vari motivi:

  • Il timer di blocco è scaduto prima del rinnovo da parte dell'applicazione client.
  • L'applicazione client ha acquisito il blocco, lo ha salvato in un archivio permanente e quindi riavviato. Dopo il riavvio, l'applicazione client ha esaminato le sessioni in corso e ha tentato di elaborare i messaggi in tali sessioni.

È anche possibile ricevere questa eccezione negli scenari seguenti:

  • Aggiornamento del servizio
  • Aggiornamento del sistema operativo
  • Modifica delle proprietà nell'entità (coda, argomento, sottoscrizione) mantenendo il blocco.

Risoluzione

Quando un'applicazione client riceve SessionLockLostException, non può più elaborare i messaggi nella sessione. L'applicazione client può prendere in considerazione la registrazione dell'eccezione per l'analisi, ma il client deve eliminare il messaggio.

Poiché il blocco della sessione è scaduto, la sessione tornerà nella coda (o nella Subscription) e potrà essere bloccata dall'applicazione client successiva che accetterà la sessione. Poiché il blocco della sessione è detenuto da una singola applicazione client in un dato momento, è garantita l'elaborazione in ordine.

Eccezione socket

Un'eccezione SocketException indica un problema di connettività di rete tra il client e il servizio bus di servizio.

Motivo

Nei casi seguenti viene generata un'eccezione SocketException :

  • Quando un tentativo di connessione non riesce perché l'host non ha risposto correttamente dopo un'ora specificata (codice di errore TCP 10060).
  • Connessione stabilita non riuscita perché l'host connesso non è riuscito a rispondere.
  • Si è verificato un errore durante l'elaborazione del messaggio o il timeout è stato superato dall'host remoto.
  • Problema della risorsa di rete sottostante.

Risoluzione

Gli errori SocketException indicano che la macchina virtuale che ospita le applicazioni non è in grado di convertire il nome <mynamespace>.servicebus.windows.net nell'indirizzo IP corrispondente.

Verificare se il comando seguente ha esito positivo nel mapping a un indirizzo IP.

PS C:\> nslookup <mynamespace>.servicebus.windows.net

Quale dovrebbe fornire un output simile al seguente:

Name:    <cloudappinstance>.cloudapp.net
Address:  XX.XX.XXX.240
Aliases:  <mynamespace>.servicebus.windows.net

Se il nome non si risolve nell'indirizzo IP e nell'alias dello spazio dei nomi, rivolgersi all'amministratore di rete per ulteriori verifiche. La risoluzione dei nomi avviene tramite un server DNS, tipicamente una risorsa della rete del cliente. Se la risoluzione DNS viene eseguita da DNS di Azure, contattare supporto tecnico di Azure.

Se la risoluzione dei nomi funziona come previsto, verificare se le connessioni ad bus di servizio di Azure sono consentite nella guida alla risoluzione dei problemi di connettività.

Eccezione di messaggistica

MessagingException è un'eccezione di messaggistica generica che può essere generata per vari motivi.

Motivo

MessagingException è un'eccezione generica che può essere generata per vari motivi. Alcuni dei motivi sono:

  • Viene effettuato un tentativo di creare un QueueClient su un argomento o una sottoscrizione.
  • La dimensione del messaggio inviato è maggiore del limite per il livello specificato. Altre informazioni sulle quote e sui limiti del bus di servizio.
  • La richiesta specifica del piano dati (invio, ricezione, completamento, abbandono) è stata terminata a causa della limitazione.
  • Problemi temporanei causati da aggiornamenti e riavvii del servizio.

Annotazioni

L'elenco delle eccezioni non è esaustivo.

Risoluzione

I passaggi per la risoluzione dipendono da ciò che ha causato la generazione di MessagingException .

  • Per i problemi temporanei (dove isTransient è impostato su true) o per i problemi di limitazione, è possibile che l'operazione venga risolta da un nuovo tentativo. È possibile usare i criteri di ripetizione dei tentativi predefiniti nell'SDK.
  • Per altri problemi, i dettagli nell'eccezione indicano che il problema e i passaggi per la risoluzione possono essere dedotti dallo stesso.

Eccezione StorageQuotaExceededException

Un'eccezione StorageQuotaExceededException indica che le dimensioni totali delle entità in uno spazio dei nomi Premium hanno superato il limite di archiviazione.

Motivo

L'eccezione StorageQuotaExceededException viene generata quando le dimensioni totali delle entità in uno spazio dei nomi Premium superano il limite di 1 TB per unità di messaggistica.

Risoluzione

  • Aumentare il numero di unità di messaggistica assegnate allo spazio dei nomi premium
  • Se si usa già il numero massimo di unità di messaggistica consentite per uno spazio dei nomi, creare uno spazio dei nomi separato.

Passaggi successivi

Per informazioni complete sull'API .NET del bus di servizio, vedere Azure .NET API reference (Informazioni di riferimento sulle API di Azure per .NET). Per suggerimenti sulla risoluzione dei problemi, vedere la guida alla risoluzione dei problemi.