Condividi tramite


bus di servizio eccezioni di messaggistica (deprecate)

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

Il 30 settembre 2026 verranno ritirati le librerie bus di servizio di Azure SDK WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus e com.microsoft.azure.servicebus, che non sono conformi alle linee guida di Azure SDK. Il supporto del protocollo SBMP verrà terminato, 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 altre informazioni, vedere l'annuncio di ritiro del supporto.

Categorie di eccezioni

Le API di messaggistica generano eccezioni che possono essere raggruppate nelle categorie seguenti e a ognuna delle quali è associata un'azione che è possibile eseguire per tentare di risolverla. Il significato e le cause di un'eccezione possono variare a seconda del tipo di entità di messaggistica:

  1. Errore nella codifica dell'utente (System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException). Azione generale: provare a correggere il codice prima di continuare.
  2. Errore di configurazione/installazione (Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, System.UnauthorizedAccessException. Azione generale: controllare la configurazione e modificarla, se necessario.
  3. Eccezioni temporanee (Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException). Azione generale: ripetere 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 Indicazioni sulla ripetizione dei tentativi.
  4. Altre eccezioni (System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException). Azione generale: specifica del tipo di eccezione; fare riferimento alla tabella nella sezione seguente:

Importante

Tipi di eccezioni

La tabella seguente elenca i tipi di eccezioni di messaggistica, ne riporta le possibili cause, e indica l'azione suggerita che è possibile eseguire.

Tipo di eccezione Descrizione/Causa/Esempi Azione suggerita Nota sulla ripetizione automatica/immediata
TimeoutException Il server non ha risposto all'operazione richiesta entro il tempo specificato, controllato da OperationTimeout. Il server può aver completato l'operazione richiesta. Può verificarsi a causa di ritardi di rete o di altre infrastrutture. Controllare lo stato del sistema per verificarne la coerenza e, se necessario, ripetere l'operazione. Vedere 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 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.
UnauthorizedAccessException L'oggetto TokenProvider non è riuscito ad 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. Controllare la configurazione del servizio Controllo di accesso. 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. Assicurarsi che l'entità esista. I tentativi non sono utili.
MessageNotFoundException Tentativo di ricevere un messaggio con un particolare numero di sequenza. Questo messaggio non viene trovato. Assicurarsi che il messaggio non sia già stato ricevuto. Controllare la coda dei messaggi non recapitabili per verificare che il messaggio non si trovi al suo interno. I tentativi non sono utili.
MessagingCommunicationException Il client non è in grado di stabilire una connessione a bus di servizio. Assicurarsi che il nome host fornito sia corretto e l'host sia raggiungibile.

Se il codice viene eseguito in un ambiente con firewall/proxy, assicurarsi che il traffico verso l'indirizzo ip/dominio bus di servizio non sia bloccato.

Se sono presenti problemi di connettività intermittente, può essere utile ripetere l'operazione.
ServerBusyException Il servizio non è in grado di elaborare la richiesta in questo momento. Il client può attendere per un certo periodo di tempo ed è quindi opportuno ripetere l'operazione. Il client potrebbe riprovare dopo un determinato intervallo. Se viene generata un'eccezione diversa, controllare il comportamento di ripetizione del tentativo della nuova eccezione.
MessagingException Eccezione di messaggistica generica che potrebbe essere generata nei casi seguenti:

È stato eseguito un tentativo di creare una classe QueueClient usando un nome o un percorso appartenente a un tipo di entità diverso, ad esempio un argomento.

È stato eseguito un tentativo di inviare un messaggio di dimensioni superiori a 256 kB.

Si è verificato un errore nel server o nel servizio durante l'elaborazione della richiesta. Per informazioni dettagliate, vedere il messaggio di eccezione. In genere si tratta di un'eccezione temporanea.

La richiesta è stata terminata perché l'entità viene limitata. Codice errore: 50001, 50002, 50008.

Controllare il codice e verificare che per il corpo del messaggio siano stati usati solo oggetti serializzabili (oppure usare un serializzatore personalizzato).

Consultare la documentazione per identificare i tipi di valori delle proprietà supportati e usare solo quelli.

Controllare la proprietà IsTransient . Se è true, è possibile ritentare l'operazione.

Se l'eccezione è dovuta alla limitazione, attendere alcuni secondi e ripetere l'operazione. Il comportamento dei tentativi non è definito e potrebbe non essere utile in altri scenari.
MessagingEntityAlreadyExistsException È stato eseguito un tentativo di creare un'entità con un nome già usato da un'altra entità dello stesso spazio dei nomi del servizio. Eliminare l'entità esistente o scegliere un nome diverso per l'entità da creare. I tentativi non sono utili.
QuotaExceededException L'entità di messaggistica ha raggiunto le dimensioni massime consentite 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.
RuleActionException Il bus di servizio restituisce questa eccezione se si tenta di creare un'azione di regola non valida. Il bus di servizio assegna questa eccezione a un messaggio non recapitabile se si verifica un errore durante l'elaborazione dell'azione di regola per il messaggio. Verificare la correttezza dell'azione di regola. I tentativi non sono utili.
FilterException Il bus di servizio restituisce questa eccezione se si tenta di creare un filtro non valido. Il bus di servizio assegna questa eccezione a un messaggio non recapitabile se si verifica un errore durante l'elaborazione del filtro per il messaggio. Verificare la correttezza del filtro. I tentativi non sono utili.
SessionCannotBeLockedException È stato eseguito un tentativo di accettare una sessione con un ID di sessione specifico, ma la sessione è attualmente bloccata da un altro client. Assicurarsi che la sessione venga sbloccata dagli altri client. Se nel frattempo la sessione è stata rilasciata, può essere utile ripetere l'operazione.
TransactionSizeExceededException Nella transazione sono presenti troppe operazioni. Ridurre il numero di operazioni presenti nella transazione. I tentativi non sono utili.
MessagingEntityDisabledException È stata inoltrata una richiesta per un'operazione di runtime su un'entità disattivata. Attivare l'entità. Se nel frattempo l'entità è stata attivata, può essere utile ripetere l'operazione.
NoMatchingSubscriptionException bus di servizio restituisce questa eccezione se si invia un messaggio a un argomento con prefiltrazione abilitato e nessuno dei filtri corrisponde. Assicurarsi 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 rappresenta la dimensione totale del messaggio, che può includere proprietà di sistema ed eventuali overhead .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 È stata tentata un'operazione su una transazione in dubbio oppure è stato tentato di eseguire il commit della transazione e la transazione è diventata in dubbio. L'applicazione deve gestire questa eccezione (come caso speciale), perché la transazione potrebbe essere già stata sottoposta a commit. -

QuotaExceededException

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

Nota

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

Namespaces (Spazi dei nomi)

Per gli spazi dei nomi, QuotaExceededException può indicare che un'applicazione ha superato il numero massimo di connessioni a uno spazio dei nomi. Ad 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 ha un valore predefinito di 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 usare il metodo FormatDeadLetterPath per la formattazione del 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. Per identificare questo problema, è necessario osservare la proprietà QueueDescription.MessageCountDetails , che mostra la suddivisione completa dei messaggi. Se la proprietà ActiveMessageCount è elevata o in crescita, i messaggi non vengono letti più velocemente durante la scrittura.

TimeoutException

Un'eccezione di tipo TimeoutException indica che un'operazione avviata dall'utente richiede più tempo rispetto al 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 il verificarsi di timeout durante o tra le operazioni di manutenzione, ad esempio gli aggiornamenti del servizio bus di servizio o gli aggiornamenti del sistema operativo nelle 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 è 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.

MessageLockLostException

Causa

L'eccezione MessageLockLostException viene generata quando un messaggio viene ricevuto tramite 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. Dopo il riavvio, 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.

SessionLockLostException

Causa

L'eccezione SessionLockLostException viene generata quando viene accettata una sessione 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.

SocketException

Causa

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 viene 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 precedente 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.

MessagingException

Causa

MessagingException è un'eccezione generica che potrebbe essere generata per vari motivi. Ecco alcuni dei motivi seguenti:

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

Nota

L'elenco precedente di eccezioni non è esaustivo.

Risoluzione

I passaggi di risoluzione dipendono da ciò che ha causato l'eccezione MessagingException .

  • Per i problemi temporanei (in cui isTransient è impostato su true) o per problemi di limitazione, è possibile che l'operazione venga risolta. Per questo motivo è 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 di risoluzione possono essere dedotti dallo stesso.

Archiviazione QuotaExceededException

Causa

Il Archiviazione QuotaExceededException viene generato 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 usano già unità di messaggistica massime 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.