Condividi tramite


Eccezioni di messaggistica del bus di servizio (deprecate)

Questo articolo elenca le eccezioni .NET generate dalle API .NET Framework.

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

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 RetryPolicy classe nell'SDK client 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

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 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. Vedere le eccezioni di timeout. In alcuni casi può essere utile ripetere l'operazione; aggiungere al codice la logica di ripetizione dei tentativi.
Eccezione 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.
Eccezione OperationCanceledException È stato eseguito un tentativo di richiamare un'operazione su un oggetto già chiuso, interrotto o eliminato. In alcuni casi rari, la transazione di ambiente è già stata eliminata. 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.
Eccezione ArgumentException
Eccezione 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.
Eccezione MessagingEntityNotFoundException L'entità associata all'operazione non esiste o è stata eliminata. Assicurati che l'entità esista. I tentativi non sono utili.
Eccezione 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 inserito in messaggi non recapitabili. I tentativi non sono utili.
Eccezione 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.
Eccezione 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 genera un'eccezione diversa, controllare il comportamento dei tentativi di tale eccezione.
Eccezione di messaggistica Eccezione di messaggistica generica che potrebbe essere generata 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à è stata limitata. 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, attendere alcuni secondi e riprovare 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.
Eccezione QuotaExceededException L'entità di messaggistica ha raggiunto la dimensione massima consentita oppure è stato superato il numero massimo di connessioni a uno spazio dei nomi. Creare spazio nell'entità mediante la ricezione di messaggi dall'entità o dalle relative code secondarie. Vedere QuotaExceededException. Se nel frattempo sono stati rimossi i messaggi, può essere utile ripetere l'operazione.
Eccezione RuleActionException Il bus di servizio restituisce questa eccezione se si tenta di creare un'azione della 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. Verificare la correttezza dell'azione della regola. 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.
Eccezione 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.
Eccezione 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.
Eccezione 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.
Eccezione 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.
Eccezione TransactionInDoubtException Viene tentato un tentativo di eseguire un'operazione su una transazione in dubbio oppure viene effettuato un tentativo di eseguire il commit della transazione e la transazione diventa in 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 bus di servizio quote, vedere Quote.

Code e argomenti

Per le code e gli argomenti, è spesso la 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, si sposta alla 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 recapitabili, occupano spazio.

    Per risolvere il problema, leggere e completare i messaggi nella coda dei messaggi non recapitabili, come si farebbe per qualsiasi altra coda. È possibile utilizzare il metodo FormatDeadLetterPath per formattare il percorso della coda dei messaggi non recapitabili.

  2. Interruzione da parte del destinatario. Un destinatario ha interrotto la ricezione di 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.

Si prevede che i timeout si verifichino durante o tra le operazioni di manutenzione, ad esempio gli aggiornamenti del servizio del bus di servizio (o) gli aggiornamenti del sistema operativo sulle 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 gli argomenti, il timeout viene specificato nella proprietà MessagingFactorySettings.OperationTimeout , come parte della stringa di connessione o tramite ServiceBusConnectionStringBuilder. Il messaggio di errore stesso può variare, ma contiene sempre il valore di timeout specificato per l'operazione corrente.

Eccezione MessageLockLostException

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à nell'entità (coda, argomento, sottoscrizione) mantenendo 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 sul messaggio è scaduto, tornerebbe alla coda (o alla sottoscrizione) e può essere elaborato dall'applicazione client successiva che chiama riceve.

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

Eccezione SessionLockLostException

Motivo

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

Il blocco in una sessione 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. 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 sulla sessione è scaduto, tornerebbe alla coda (o alla sottoscrizione) e può essere bloccato dall'applicazione client successiva che accetta la sessione. Poiché il blocco della sessione viene mantenuto da una singola applicazione client in qualsiasi momento, l'elaborazione in ordine è garantita.

Eccezione SocketException

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 viene risolto in un indirizzo IP e nell'alias dello spazio dei nomi, rivolgersi all'amministratore di rete per approfondire le indagini. La risoluzione dei nomi viene eseguita tramite un server DNS in genere una risorsa nella 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 a bus di servizio di Azure sono consentite qui.

Eccezione di messaggistica

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

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.