Eccezioni di messaggistica del bus di servizioService Bus messaging exceptions

Questo articolo elenca alcune delle eccezioni generate dall'API di messaggistica del bus di servizio di Microsoft Azure.This article lists some exceptions generated by the Microsoft Azure Service Bus messaging APIs. Il documento è soggetto a modifica ed è quindi opportuno controllare periodicamente la presenza di aggiornamenti.This reference is subject to change, so check back for updates.

Categorie di eccezioniException categories

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.The messaging APIs generate exceptions that can fall into the following categories, along with the associated action you can take to try to fix them. Tenere presente che il significato e le cause di un'eccezione possono variare a seconda del tipo di entità di messaggistica:Note that the meaning and causes of an exception can vary depending on the type of messaging entity:

  1. Errore nella codifica dell'utente (System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException).User coding error (System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException). Azione generale: provare a correggere il codice prima di continuare.General action: try to fix the code before proceeding.
  2. Errore di configurazione/installazione (Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, System.UnauthorizedAccessException.Setup/configuration error (Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, System.UnauthorizedAccessException. Azione generale: controllare la configurazione e modificarla, se necessario.General action: review your configuration and change if necessary.
  3. Eccezioni temporanee (Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException).Transient exceptions (Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException). Azione generale: ripetere l'operazione o inviare una notifica agli utenti.General action: retry the operation or notify users.
  4. Altre eccezioni (System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException).Other exceptions (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.General action: specific to the exception type; please refer to the table in the following section.

Tipi di eccezioniException types

La tabella seguente elenca i tipi di eccezioni di messaggistica, ne riporta le possibili cause, e indica l'azione suggerita che è possibile eseguire.The following table lists messaging exception types, and their causes, and notes suggested action you can take.

Tipo di eccezioneException Type Descrizione/Causa/EsempiDescription/Cause/Examples Azione suggeritaSuggested Action Nota sulla ripetizione automatica/immediataNote on automatic/immediate retry
TimeoutExceptionTimeoutException Il server non ha risposto all'operazione richiesta entro l'intervallo di tempo specificato, controllato dalla proprietà OperationTimeout.The server did not respond to the requested operation within the specified time which is controlled by OperationTimeout. Il server può aver completato l'operazione richiesta.The server may have completed the requested operation. L'eccezione può verificarsi a causa di ritardi a livello di rete o di infrastruttura.This can happen due to network or other infrastructure delays. Controllare lo stato del sistema per verificarne la coerenza e, se necessario, ripetere l'operazione.Check the system state for consistency and retry if necessary. Vedere Eccezioni di timeout.See Timeout exceptions. In alcuni casi può essere utile ripetere l'operazione; aggiungere al codice la logica di ripetizione dei tentativi.Retry might help in some cases; add retry logic to code.
InvalidOperationExceptionInvalidOperationException L'operazione richiesta dall'utente non è consentita nell'ambito del server o del servizio.The requested user operation is not allowed within the server or service. Per informazioni dettagliate, vedere il messaggio di eccezione.See the exception message for details. Ad esempio, Complete() genera questa eccezione se il messaggio è stato ricevuto in modalità ReceiveAndDelete .For example, Complete() generates this exception if the message was received in ReceiveAndDelete mode. Controllare il codice e la documentazione.Check the code and the documentation. Assicurarsi che l'operazione richiesta sia valida.Make sure the requested operation is valid. Ripetere l'operazione non serve.Retry will not help.
OperationCanceledExceptionOperationCanceledException È stato eseguito un tentativo di richiamare un'operazione su un oggetto già chiuso, interrotto o eliminato.An attempt is made to invoke an operation on an object that has already been closed, aborted or disposed. In alcuni casi rari, la transazione di ambiente è già stata eliminata.In rare cases, the ambient transaction is already disposed. Controllare il codice e assicurarsi che non richiami operazioni su un oggetto eliminato.Check the code and make sure it does not invoke operations on a disposed object. Ripetere l'operazione non serve.Retry will not help.
UnauthorizedAccessExceptionUnauthorizedAccessException L'oggetto TokenProvider non è riuscito ad acquisire un token oppure il token non è valido o non contiene le attestazioni necessarie per eseguire l'operazione.The TokenProvider object could not acquire a token, the token is invalid, or the token does not contain the claims required to perform the operation. Assicurarsi che il provider di token sia stato creato con i valori corretti.Make sure the token provider is created with the correct values. Controllare la configurazione del servizio di controllo di accesso.Check the configuration of the Access Control service. In alcuni casi può essere utile ripetere l'operazione; aggiungere al codice la logica di ripetizione dei tentativi.Retry might help in some cases; add retry logic to code.
ArgumentExceptionArgumentException
ArgumentNullExceptionArgumentNullException
ArgumentOutOfRangeExceptionArgumentOutOfRangeException
Uno o più argomenti forniti al metodo non sono validi.One or more arguments supplied to the method are invalid.
L'URI fornito a NamespaceManager o Create contiene segmenti di percorso.The URI supplied to NamespaceManager or Create contains path segment(s).
Lo schema URI fornito a NamespaceManager o Create non è valido.The URI scheme supplied to NamespaceManager or Create is invalid.
Il valore della proprietà è maggiore di 32 KB.The property value is larger than 32KB.
Controllare il codice chiamante e assicurarsi che gli argomenti siano corretti.Check the calling code and make sure the arguments are correct. Ripetere l'operazione non serve.Retry will not help.
MessagingEntityNotFoundExceptionMessagingEntityNotFoundException L'entità associata all'operazione non esiste o è stata eliminata.Entity associated with the operation does not exist or it has been deleted. Assicurarsi che l'entità esista.Make sure the entity exists. Ripetere l'operazione non serve.Retry will not help.
MessageNotFoundExceptionMessageNotFoundException Tentativo di ricevere un messaggio con un particolare numero di sequenza.Attempt to receive a message with a particular sequence number. Non è stato trovato questo messaggio.This message is not found. Assicurarsi che il messaggio non sia già stato ricevuto.Make sure the message has not been received already. Controllare la coda dei messaggi non recapitabili per verificare che il messaggio non si trovi al suo interno.Check the deadletter queue to see if the message has been deadlettered. Ripetere l'operazione non serve.Retry will not help.
MessagingCommunicationExceptionMessagingCommunicationException Il client non è in grado di stabilire una connessione con il bus di servizio.Client is not able to establish a connection to Service Bus. Assicurarsi che il nome host fornito sia corretto e l'host sia raggiungibile.Make sure the supplied host name is correct and the host is reachable. Se sono presenti problemi di connettività intermittente, può essere utile ripetere l'operazione.Retry might help if there are intermittent connectivity issues.
ServerBusyExceptionServerBusyException In questo momento il servizio non è in grado di elaborare la richiesta.Service is not able to process the request at this time. Il client può attendere per un certo periodo di tempo ed è quindi opportuno ripetere l'operazione.Client can wait for a period of time, then retry the operation. Il client può riprovare dopo un determinato intervallo.Client may retry after certain interval. Se viene generata un'eccezione diversa, controllare il comportamento di ripetizione del tentativo della nuova eccezione.If a retry results in a different exception, check retry behavior of that exception.
MessageLockLostExceptionMessageLockLostException Il token di blocco associato al messaggio è scaduto o non è disponibile.Lock token associated with the message has expired, or the lock token is not found. Eliminare il messaggio.Dispose the message. Ripetere l'operazione non serve.Retry will not help.
SessionLockLostExceptionSessionLockLostException È stato perso il blocco associato a questa sessione.Lock associated with this session is lost. Interrompere l'oggetto MessageSession .Abort the MessageSession object. Ripetere l'operazione non serve.Retry will not help.
MessagingExceptionMessagingException Eccezione di messaggistica generica che può essere generata nei casi seguenti:Generic messaging exception that may be thrown in the following cases:
È 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.An attempt is made to create a QueueClient using a name or path that belongs to a different entity type (for example, a topic).
È stato eseguito un tentativo di inviare un messaggio di dimensioni superiori a 256 KB.An attempt is made to send a message larger than 256KB. Si è verificato un errore nel server o nel servizio durante l'elaborazione della richiesta.The server or service encountered an error during processing of the request. Per informazioni dettagliate, vedere il messaggio di eccezione.Please see the exception message for details. Si tratta in genere di un'eccezione temporanea.This is usually a transient exception.
Controllare il codice e verificare che per il corpo del messaggio siano stati usati solo oggetti serializzabili (oppure usare un serializzatore personalizzato).Check the code and ensure that only serializable objects are used for the message body (or use a custom serializer). Consultare la documentazione per identificare i tipi di valori delle proprietà supportati e usare solo quelli.Check the documentation for the supported value types of the properties and only use supported types. Controllare la proprietà IsTransient .Check the IsTransient property. Se è true, è possibile ripetere l'operazione.If it is true, you can retry the operation. Il comportamento di ripetizione dei tentativi non è definito e ripetere l'operazione può non essere utile.Retry behavior is undefined and might not help.
MessagingEntityAlreadyExistsExceptionMessagingEntityAlreadyExistsException È stato eseguito un tentativo di creare un'entità con un nome già usato da un'altra entità dello stesso spazio dei nomi del servizio.Attempt to create an entity with a name that is already used by another entity in that service namespace. Eliminare l'entità esistente o scegliere un nome diverso per l'entità da creare.Delete the existing entity or choose a different name for the entity to be created. Ripetere l'operazione non serve.Retry will not help.
QuotaExceededExceptionQuotaExceededException L'entità di messaggistica ha raggiunto le dimensioni massime consentite oppure è stato superato il numero massimo di connessioni a uno spazio dei nomi.The messaging entity has reached its maximum allowable size, or the maximum number of connections to a namespace has been exceeded. Creare spazio nell'entità mediante la ricezione di messaggi dall'entità o dalle relative code secondarie.Create space in the entity by receiving messages from the entity or its sub-queues. Vedere QuotaExceededException.See QuotaExceededException. Se nel frattempo sono stati rimossi i messaggi, può essere utile ripetere l'operazione.Retry might help if messages have been removed in the meantime.
RuleActionExceptionRuleActionException Il bus di servizio restituisce questa eccezione se si tenta di creare un'azione di regola non valida.Service Bus returns this exception if you attempt to create an invalid rule action. 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.Service Bus attaches this exception to a deadlettered message if an error occurs while processing the rule action for that message. Verificare la correttezza dell'azione di regola.Check the rule action for correctness. Ripetere l'operazione non serve.Retry will not help.
FilterExceptionFilterException Il bus di servizio restituisce questa eccezione se si tenta di creare un filtro non valido.Service Bus returns this exception if you attempt to create an invalid filter. 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.Service Bus attaches this exception to a deadlettered message if an error occurred while processing the filter for that message. Verificare la correttezza del filtro.Check the filter for correctness. Ripetere l'operazione non serve.Retry will not help.
SessionCannotBeLockedExceptionSessionCannotBeLockedException È stato eseguito un tentativo di accettare una sessione con un ID di sessione specifico, ma la sessione è attualmente bloccata da un altro client.Attempt to accept a session with a specific session ID, but the session is currently locked by another client. Assicurarsi che la sessione venga sbloccata dagli altri client.Make sure the session is unlocked by other clients. Se nel frattempo la sessione è stata rilasciata, può essere utile ripetere l'operazione.Retry might help if the session has been released in the interim.
TransactionSizeExceededExceptionTransactionSizeExceededException Nella transazione sono presenti troppe operazioni.Too many operations are part of the transaction. Ridurre il numero di operazioni presenti nella transazione.Reduce the number of operations that are part of this transaction. Ripetere l'operazione non serve.Retry will not help.
MessagingEntityDisabledExceptionMessagingEntityDisabledException È stata inoltrata una richiesta per un'operazione di runtime su un'entità disattivata.Request for a runtime operation on a disabled entity. Attivare l'entità.Activate the entity. Se nel frattempo l'entità è stata attivata, può essere utile ripetere l'operazione.Retry might help if the entity has been activated in the interim.
NoMatchingSubscriptionExceptionNoMatchingSubscriptionException Il bus di servizio restituisce questa eccezione se si invia un messaggio a un argomento in cui è abilitato il filtro preliminare e nessuno dei filtri corrisponde.Service Bus returns this exception if you send a message to a topic that has pre-filtering enabled and none of the filters match. Assicurarsi che almeno un filtro corrisponda.Make sure at least one filter matches. Ripetere l'operazione non serve.Retry will not help.
MessageSizeExceededExceptionMessageSizeExceededException Un payload del messaggio supera il limite di 256 KB.A message payload exceeds the 256 KB limit. Il limite di 256 KB rappresenta le dimensioni totali del messaggio, che possono includere proprietà di sistema ed eventuali overhead .NET.Note that the 256 KB limit is the total message size, which can include system properties and any .NET overhead. Ridurre le dimensioni del payload del messaggio e quindi ripetere l'operazione.Reduce the size of the message payload, then retry the operation. Ripetere l'operazione non serve.Retry will not help.
TransactionExceptionTransactionException La transazione di ambiente (Transaction.Current) non è valida.The ambient transaction (Transaction.Current) is invalid. È possibile che nel frattempo sia stata interrotta o completata.It may have been completed or aborted. L'eccezione interna può fornire informazioni aggiuntive.Inner exception may provide additional information. Ripetere l'operazione non serve.Retry will not help.
TransactionInDoubtExceptionTransactionInDoubtException È stata tentata un'operazione su una transazione in dubbio oppure è stato tentato di eseguire il commit della transazione e la transazione è diventata in dubbio.An operation is attempted on a transaction that is in doubt, or an attempt is made to commit the transaction and the transaction becomes in doubt. L'applicazione deve gestire questa eccezione (come caso speciale), poiché è possibile che sia già stato eseguito il commit della transazione.Your application must handle this exception (as a special case), as the transaction may have already been committed. -

QuotaExceededExceptionQuotaExceededException

QuotaExceededException indica che è stata superata la quota di un'entità specifica.QuotaExceededException indicates that a quota for a specific entity has been exceeded.

Code e argomentiQueues and topics

Per le code e gli argomenti, tale quota è spesso rappresentata dalle dimensioni della coda.For queues and topics, this is often the size of the queue. La proprietà del messaggio di errore contiene altri dettagli, come nell'esempio seguente:The error message property contains further details, as in the following example:

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).The message states that the topic exceeded its size limit, in this case 1 GB (the default size limit).

Spazi dei nomiNamespaces

Per gli spazi dei nomi, QuotaExceededException può indicare che un'applicazione ha superato il numero massimo di connessioni a uno spazio dei nomi.For namespaces, QuotaExceededException can indicate that an application has exceeded the maximum number of connections to a namespace. Ad esempio: For example:

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

Cause comuniCommon causes

Per questo errore, esistono due cause comuni: la coda dei messaggi non recapitabili e l'interruzione da parte dei destinatari dei messaggi.There are two common causes for this error: the dead-letter queue, and non-functioning message receivers.

  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.Dead-letter queue A reader is failing to complete messages and the messages are returned to the queue/topic when the lock expires. Questa situazione può verificarsi se il lettore rileva un'eccezione che impedisce la chiamata a BrokeredMessage.Complete.This can happen if the reader encounters an exception that prevents it from calling BrokeredMessage.Complete. Dopo che un messaggio è stato letto 10 volte, si sposta alla coda dei messaggi non recapitabili per impostazione predefinita.After a message has been read 10 times, it moves to the dead-letter queue by default. Questo comportamento è controllato dalla proprietà QueueDescription.MaxDeliveryCount e ha un valore predefinito di 10.This behavior is controlled by the QueueDescription.MaxDeliveryCount property and has a default value of 10. Man mano che i messaggi si accumulano nella coda dei messaggi non recapitabili, occupano spazio.As messages pile up in the dead letter queue, they take up space.

    Per risolvere il problema, leggere e completare i messaggi nella coda dei messaggi non recapitabili, come si farebbe per qualsiasi altra coda.To resolve the issue, read and complete the messages from the dead-letter queue, as you would from any other queue. È possibile usare il metodo FormatDeadLetterPath per la formattazione del percorso della coda dei messaggi non recapitabili.You can use the FormatDeadLetterPath method to help format the dead-letter queue path.

  2. Interruzione da parte del destinatario : un destinatario ha interrotto la ricezione di messaggi da una coda o da una sottoscrizione.Receiver stopped A receiver has stopped receiving messages from a queue or subscription. Per identificare questo problema, è necessario osservare la proprietà QueueDescription.MessageCountDetails , che mostra la suddivisione completa dei messaggi.The way to identify this is to look at the QueueDescription.MessageCountDetails property, which shows the full breakdown of the messages. Se il valore della proprietà ActiveMessageCount è elevato o in crescita, i messaggi non vengono più letti alla stessa velocità con cui vengono scritti.If the ActiveMessageCount property is high or growing, then the messages are not being read as fast as they are being written.

TimeoutExceptionTimeoutException

Un'eccezione di tipo TimeoutException indica che un'operazione avviata dall'utente richiede più tempo rispetto al timeout dell'operazione.A TimeoutException indicates that a user-initiated operation is taking longer than the operation timeout.

Controllare il valore della proprietà ServicePointManager.DefaultConnectionLimit, in quanto il raggiungimento di questo limite può anche causare un evento di TimeoutException.You should check the value of the ServicePointManager.DefaultConnectionLimit property, as hitting this limit can also cause a TimeoutException.

Code e argomentiQueues and topics

Per le code e gli argomenti, il timeout è specificato nella proprietà MessagingFactorySettings.OperationTimeout, come parte della stringa di connessione, o tramite ServiceBusConnectionStringBuilder.For queues and topics, the timeout is specified either in the MessagingFactorySettings.OperationTimeout property, as part of the connection string, or through ServiceBusConnectionStringBuilder. Il messaggio di errore stesso può variare, ma contiene sempre il valore di timeout specificato per l'operazione corrente.The error message itself might vary, but it always contains the timeout value specified for the current operation.

Passaggi successiviNext steps

Per informazioni complete sull'API .NET del bus di servizio, vedere Azure .NET API reference (Informazioni di riferimento sulle API di Azure per .NET).For the complete Service Bus .NET API reference, see the Azure .NET API reference.

Per altre informazioni sul bus di servizio, vedere gli articoli seguenti:To learn more about Service Bus, see the following articles: