Esporta (0) Stampa
Espandi tutto

Appendice: eccezioni di messaggistica

Aggiornamento: aprile 2014

In questa sezione vengono elencate le diverse eccezioni generate dall'API del sistema di messaggistica di Service Bus di Microsoft Azure. Questo documento di riferimento è soggetto a modifica. Si consiglia pertanto di controllare la disponibilità di eventuali aggiornamenti.

Le API del sistema di messaggistica generano eccezioni che possono essere suddivise nelle seguenti categorie, con l'azione associata che è possibile intraprendere per tentare di risolvere il problema:

  1. Errore nel codice utente (ArgumentException, InvalidOperationException, OperationCanceledException, SerializationException). Azione generale: provare a correggere il codice prima di continuare.

  2. Errore di installazione/configurazione (MessagingEntityNotFoundException, UnauthorizedAccessException). Azione generale: controllare la configurazione e modificarla, se necessario.

  3. Eccezioni temporanee (MessagingException, ServerBusyException, MessagingCommunicationException). Azione generale: ripetere l'operazione o inviare una notifica agli utenti.

  4. Altre eccezioni (TransactionException, TimeoutException, MessageLockLostException/SessionLockLostException). Azione generale: queste eccezioni non vengono gestite in genere per eseguire operazioni di pulizia o per interrompere azioni. Possono essere utilizzate per eseguire operazioni di traccia.

Nella tabella riportata di seguito vengono elencati i tipi di eccezioni di messaggistica con le relative cause e l'azione suggerita che è possibile intraprendere.

 

Tipo di eccezione Descrizione/causa/esempi Azione suggerita Nota sulla ripetizione automatica/immediata

TimeoutException

Il server non ha risposto all'operazione richiesta nel tempo specificato definito da OperationTimeout. È possibile che il server abbia completato l'operazione richiesta. Questo problema può verificarsi a causa di ritardi della rete o dell'infrastruttura.

Effettuare verifiche di coerenza del sistema e ripetere l'operazione, se necessario.

In alcuni casi, può essere utile ripetere l'operazione. Aggiungere al codice la logica di ripetizione.

InvalidOperationException

L'operazione utente richiesta non è consentita nel server o nel servizio. Per ulteriori dettagli, vedere il messaggio di eccezione. Ad esempio, Complete genererà questa eccezione se il messaggio è stato ricevuto in modalità ReceiveAndDelete.

Controllare il codice e la documentazione. Verificare che l'operazione richiesta sia valida.

Non sarà utile ripetere l'operazione.

OperationCanceledException

Viene effettuato un tentativo di richiamare un'operazione su un oggetto che è stato già chiuso, interrotto o eliminato. In rari casi la transazione di ambiente è già stata eliminata.

Controllare il codice e verificare che non richiami operazioni su un oggetto eliminato.

Non sarà utile ripetere l'operazione.

UnauthorizedAccessException

L'oggetto TokenProvider non ha potuto acquisire un token, il token non è valido oppure non include le attestazioni richieste per eseguire l'operazione.

Verificare che il provider di token sia stato creato con i valori corretti. Controllare la configurazione del servizio di Access Control.

In alcuni casi, può essere utile ripetere l'operazione. Aggiungere al codice la logica di ripetizione.

ArgumentException

ArgumentNullException

ArgumentOutOfRangeException

  • Uno o più argomenti forniti dal metodo non sono validi.

  • L'URI fornito a NamespaceManager oppure a Create include segmenti di percorso.

  • Lo schema URI fornito a NamespaceManager oppure a Create non è valido.

  • Il valore della proprietà è maggiore di 32 KB.

Controllare il codice di chiamata e verificare che gli argomenti siano corretti.

Non sarà utile ripetere l'operazione.

MessagingEntityNotFoundException

L'entità associata all'operazione non esiste o è stata eliminata.

Verificare l'esistenza dell'entità.

Non sarà utile ripetere l'operazione.

MessageNotFoundException

Tentativo di ricevere un messaggio con un particolare numero di sequenza. Il messaggio non è stato trovato.

Verificare se il messaggio è già stato ricevuto. Controllare che il messaggio non sia stato trasferito alla coda dei messaggi non recapitabili.

Non sarà utile ripetere l'operazione.

MessagingCommunicationException

Il client non è in grado di stabilire una connessione a Service Bus.

Verificare che il nome host fornito sia corretto e che l'host sia raggiungibile.

Può essere utile ripetere l'operazione in caso di problemi di connettività intermittente.

ServerBusyException

Il servizio non è in grado di elaborare la richiesta al momento.

Se il client è rimasto in attesa per un certo periodo di tempo, riprovare a eseguire l'operazione.

Il client può ripetere l'operazione dopo un intervallo di tempo. Se viene generata un'eccezione diversa, controllare il comportamento relativo a tale eccezione.

MessageLockLostException

Il token di blocco associato al messaggio è scaduto oppure non è stato trovato.

Eliminare il messaggio.

Non sarà utile ripetere l'operazione.

SessionLockLostException

Il blocco associato alla sessione è andato perduto.

Interrompere l'oggetto MessageSession.

Non sarà utile ripetere l'operazione.

MessagingException

Eccezione di messaggistica generica che può essere generata nei seguenti casi:

  • Viene effettuato un tentativo di creare una classe QueueClient utilizzando un nome o un percorso appartenente a un tipo di entità diverso, ad esempio un argomento.

  • Viene effettuato un tentativo di inviare un messaggio di dimensioni maggiori di 256 KB.

  • Si è verificato un errore del server o del servizio durante l'elaborazione della richiesta. Per ulteriori dettagli, vedere il messaggio di eccezione. Si tratta in genere di un'eccezione temporanea.

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

  • Cercare nella documentazione i tipi di valori supportati per le proprietà e utilizzare solo i tipi supportati.

  • Controllare la proprietà IsTransient. Se è true, è possibile riprovare a eseguire l'operazione.

Il comportamento della ripetizione dell'operazione non è documentato e potrebbe non essere utile.

MessagingEntityAlreadyExistsException

Tentativo di creare un'entità con un nome già utilizzato per un'altra entità dello spazio dei nomi servizio.

Eliminare l'entità esistente o scegliere un nome diverso per la nuova entità.

Non sarà utile ripetere l'operazione.

QuotaExceededException

L'entità di messaggistica ha raggiunto le dimensioni massime consentite.

Creare spazio nell'entità mediante la ricezione di messaggi dall'entità o dalle relative code secondarie.

Può essere utile ripetere l'operazione se nel frattempo sono stati rimossi dei messaggi.

RuleActionException

Service Bus restituisce questa eccezione se si tenta di creare un'azione di regola non valida. Service Bus associa questa eccezione a un messaggio non recapitabile se viene generato un errore durante l'esecuzione dell'azione di regola per tale messaggio.

Verificare la correttezza dell'azione di regola.

Non sarà utile ripetere l'operazione.

FilterException

Service Bus restituisce questa eccezione se si tenta di creare un filtro non valido. Service Bus associa questa eccezione a un messaggio non recapitabile se viene generato un errore durante l'elaborazione del filtro per tale messaggio.

Verificare la correttezza del filtro.

Non sarà utile ripetere l'operazione.

SessionCannotBeLockedException

Tentativo di accettare una sessione con uno specifico ID. La sessione è attualmente bloccata da un altro client.

Verificare che la sessione venga sbloccata da altri client.

Può essere utile ripetere l'operazione se nel frattempo la sessione è stata rilasciata.

TransactionSizeExceededException

Numero eccessivo di operazioni nella transazione.

Ridurre il numero delle operazioni nella transazione.

Non sarà utile ripetere l'operazione.

MessagingEntityDisabledException

Richiesta di un'operazione di runtime su un'entità disabilitata.

Abilitare l'entità.

Può essere utile ripetere l'operazione se nel frattempo l'entità è stata abilitata.

NoMatchingSubscriptionException

Service Bus restituisce questa eccezione se si invia un messaggio a un argomento con un filtro preliminare abilitato e non viene rilevato alcun filtro corrispondente.

Verificare la corrispondenza di almeno un filtro.

Non sarà utile ripetere l'operazione.

MessageSizeExceededException

Un payload di messaggio supera il limite di 256 KB. Il limite di 256 KB è la dimensione complessiva del messaggio e può comprendere le proprietà di sistema ed eventuali overhead .NET.

Ridurre le dimensioni del payload di messaggio, quindi ripetere l'operazione.

Non sarà utile ripetere l'operazione.

TransactionException

La transazione di ambiente (Current) non è valida. Potrebbe essere stata completata o interrotta. Un'eccezione interna potrebbe fornire ulteriori informazioni.

Non sarà utile ripetere l'operazione.

TransactionInDoubtException

È stata tentata un'operazione su una transazione con stato dubbio oppure è stato tentato il commit della transazione e il relativo stato diventa dubbio.

L'applicazione deve gestire questa eccezione (come caso speciale), poiché è possibile che sia stato già eseguito il commit della transazione.

Mostra:
© 2015 Microsoft