Eccezioni del servizio di inoltro di Azure
Questo articolo elenca alcune eccezioni generate dalle API di inoltro di Azure. Il documento è soggetto a modifica ed è quindi opportuno controllare periodicamente la presenza di aggiornamenti.
Categorie di eccezioni
Le eccezioni generate dalle API di inoltro rientrano nelle categorie seguenti. Vengono consigliate anche le azioni per la risoluzione delle eccezioni.
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.
Errore di installazione/configurazione: System.UnauthorizedAccessException.
Azione generale: controllare la configurazione. Se necessario, modificare la configurazione.
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.
Altre eccezioni: System.Transactions.TransactionException, System.TimeoutException.
Azione generale: specifica del tipo di eccezione. Vedere la tabella nella sezione seguente.
Tipi di eccezioni
La tabella seguente elenca i tipi di eccezioni di messaggistica, ne riporta le possibili cause e consiglia l'azione da eseguire.
Tipo di eccezione | Descrizione | Azione suggerita | Nota sulla ripetizione automatica o immediata |
---|---|---|---|
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ò verificarsi a causa di ritardi di rete o di altro tipo dell'infrastruttura. | Controllare lo stato del sistema per verificarne la coerenza e, se necessario, ripetere l'operazione. Vedere TimeoutException. | In alcuni casi può essere utile ripetere l'operazione; aggiungere al codice la logica di ripetizione dei tentativi. |
Operazione non valida | L'operazione utente richiesta non è consentita all'interno del server o del servizio. Per informazioni dettagliate, vedere il messaggio di eccezione. | Controllare il codice e la documentazione. Assicurarsi che l'operazione richiesta sia valida. | I tentativi non sono utili. |
Operazione annullata | È 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. |
Accesso non autorizzato | 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 di controllo di accesso. | In alcuni casi può essere utile ripetere l'operazione; aggiungere al codice la logica di ripetizione dei tentativi. |
Eccezione di argomento Argomento Null Argomento non compreso nell'intervallo |
Si è verificato uno o più dei problemi seguenti: Uno o più argomenti forniti al metodo non sono validi. L'URI fornito a NamespaceManager o a Create contiene uno o più 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. |
Server occupato | Il servizio non è in grado di elaborare la richiesta in questo momento. | Il client può attendere per un certo periodo di tempo, quindi è opportuno ripetere l'operazione. | Il client può eseguire nuovi tentativi dopo un intervallo specifico. Se viene generata un'eccezione diversa, controllare il comportamento di ripetizione del tentativo della nuova eccezione. |
Quota superata | 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. Vedere QuotaExceededException. | Se nel frattempo sono stati rimossi i messaggi, può essere utile ripetere l'operazione. |
Dimensione del messaggio superata | Un payload del messaggio supera il limite di 256 KB. Il limite di 256 KB è la dimensione totale del messaggio. La dimensione totale dei messaggi 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. |
QuotaExceededException
QuotaExceededException indica che è stata superata la quota di un'entità specifica.
Per l'inoltro, questa eccezione esegue il wrapping di System.ServiceModel.QuotaExceededException, il quale indica che è stato superato il numero massimo di listener per questo endpoint. È indicato nel valore MaximumListenersPerEndpoint del messaggio di eccezione.
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. Il raggiungimento di questo limite può causare anche un TimeoutException.
Per l'inoltro è possibile ricevere eccezioni di timeout alla prima apertura di una connessione di inoltro del mittente. Questa eccezione può essere dovuta a due cause comuni:
- Il valore OpenTimeout è troppo piccolo (anche di una frazione di secondo).
- Uno o più listener di inoltro locali non sono reattivi o si verificano problemi di regole firewall che non consentono ai listener di accettare nuove connessioni client e il valore OpenTimeout è minore di circa 20 secondi.
Esempio:
'System.TimeoutException’: The operation did not complete within the allotted timeout of 00:00:10.
The time allotted to this operation may have been a portion of a longer timeout.
Cause comuni
Questo errore può essere dovuto a due cause comuni:
Configurazione non corretta
Il valore di timeout dell'operazione potrebbe essere troppo ridotto per la condizione operativa. Il valore predefinito per il timeout dell'operazione dell'SDK client è 60 secondi. Verificare se il valore nel codice è impostato su un valore troppo piccolo. L'utilizzo della CPU e la condizione della rete possono influire sul tempo necessario per il completamento di un'operazione. È consigliabile non impostare il timeout dell'operazione su un valore molto basso.
Errore temporaneo del servizio
In alcuni casi per il servizio di inoltro potrebbero verificarsi ritardi nell'elaborazione delle richieste. Può verificarsi, ad esempio, durante periodi di traffico elevato. In caso affermativo, ripetere l'operazione dopo un ritardo fino a quando l'operazione non riesce. Se la stessa operazione ha ancora esito negativo dopo diversi tentativi, visitare il sito sullo stato dei servizi Azure per verificare se esistono casi noti di interruzioni del servizio.
ConnectionLostException - NameRenewalFailed
Sintomi
Il client riceve l'eccezione : Microsoft.Azure.Relay.ConnectionLostException : InternalServerError: NameRenewalFailed
.
Causa
Il servizio inoltro di Azure riavvia le connessioni del listener ogni 24 ore. Questo comportamento è impostato a livello di progettazione. Il servizio inoltro di Azure disconnette una connessione attiva del listener ogni 24 ore e il listener si riconnetterà al server usando il meccanismo di ripetizione dei tentativi.
Risoluzione
Nessuna azione da parte del listener si riconnette automaticamente al server. Se si nota che il listener non si connette nuovamente, inviare un ticket al team di supporto.