Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive le cause e le soluzioni per i codici di errore comuni che possono verificarsi durante l'uso dell'hub IoT.
400027 Connessione chiusa forzatamente durante una nuova connessione
È possibile che venga visualizzato l'errore ConnectionForcefullyClosedOnNewConnection 400027 se il dispositivo si disconnette e segnala Communication_Error come ConnectionStatusChangeReason usando .NET SDK e il tipo di trasporto MQTT. In alternativa, l'operazione da dispositivo a cloud gemello (ad esempio le proprietà segnalate da lettura o patch) o la chiamata al metodo diretto non riesce con il codice di errore 400027.
Questo errore si verifica quando un altro client crea una nuova connessione all'hub IoT usando la stessa identità, quindi l'hub IoT chiude la connessione precedente. L'hub IoT non consente a più client di connettersi utilizzando la stessa identità.
Per risolvere questo errore, assicurarsi che ogni client si connetta all'hub IoT usando la propria identità.
401003 IoT Hub non autorizzato
Nei log è possibile che venga visualizzato uno schema di dispositivi che si disconnettono con 401003 IoTHubUnauthorized, seguito da 404104 DeviceConnectionClosedRemotely e quindi si connettono correttamente poco dopo.
In alternativa, le richieste all'hub IoT hanno esito negativo con uno dei messaggi di errore seguenti:
- Intestazione dell'autorizzazione mancante
- IotHub '*' non contiene il dispositivo specificato '*'
- La regola di autorizzazione '*' non consente l'accesso per '*'
- Autenticazione non riuscita per questo dispositivo, rinnovare il token o il certificato e riconnettersi
- L'identificazione personale non corrisponde alla configurazione: Identificazione personale: SHA1Hash=*, SHA2Hash=*; Configurazione: PrimaryThumbprint=*, SecondaryThumbprint=*
- Il principal user@example.com non è autorizzato per GET su /exampleOperation a causa di permessi non assegnati.
Questo errore si verifica perché, per MQTT, alcuni SDK si basano su IoT Hub per gestire la disconnessione alla scadenza del token SAS per determinare quando aggiornarlo. Così:
- Il token SAS (firma di accesso condiviso) scade
- L'hub IoT rileva la scadenza e disconnette il dispositivo con 401003 IoTHubUnauthorized
- Il dispositivo termina la disconnessione con 404104 DeviceConnectionClosedRemotely
- IoT SDK genera un nuovo token SAS
- Il dispositivo si riconnette correttamente con l'hub IoT
In alternativa, l'hub IoT non è riuscito a autenticare l'intestazione, la regola o la chiave di autenticazione. Questo risultato potrebbe essere dovuto a uno dei motivi citati nei sintomi.
Per risolvere questo errore, non è necessaria alcuna azione se si usa IoT SDK per la connessione usando la stringa di connessione del dispositivo. IoT SDK rigenera il nuovo token per riconnettersi alla scadenza del token SAS.
La durata predefinita del token è di 60 minuti tra gli SDK; Tuttavia, per alcuni SDK la durata del token e la soglia di rinnovo del token è configurabile. Inoltre, gli errori generati quando un dispositivo si disconnette e si riconnette al rinnovo del token differisce per ogni SDK. Per altre informazioni e per informazioni su come determinare l'SDK usato nei log, vedere la sezione Comportamento di disconnessione del dispositivo MQTT con Azure IoT SDK di Monitoraggio, diagnosi e risoluzione dei problemi di connettività dei dispositivi dell'hub IoT di Azure.
Per gli sviluppatori di dispositivi, se il volume di errori è un problema, passare all'SDK C, che rinnova il token SAS prima della scadenza. Per AMQP, il token SAS può essere aggiornato senza necessità di disconnessione.
In generale, il messaggio di errore presentato dovrebbe spiegare come correggere l'errore. Se per qualche motivo non si ha accesso ai dettagli del messaggio di errore, assicurarsi di:
- La firma di accesso condiviso o qualsiasi altro token di sicurezza utilizzato non è scaduto.
- Per l'autenticazione del certificato X.509, il certificato del dispositivo o il certificato della CA associato al dispositivo non è scaduto. Per informazioni su come registrare i certificati della CA X.509 con l'hub IoT, vedere Esercitazione: Creare e caricare certificati per i test.
- Per l'autenticazione tramite impronta digitale del certificato X.509, l'impronta digitale del certificato del dispositivo viene registrata con IoT Hub.
- Le credenziali di autorizzazione sono ben formate per il protocollo usato. Per altre informazioni, vedere Controllare l'accesso all'hub IoT usando Microsoft Entra ID.
- La regola di autorizzazione usata concede il permesso per l'operazione richiesta.
- Per gli ultimi messaggi di errore che iniziano con "principal...", questo errore può essere risolto assegnando all'utente il livello corretto di autorizzazioni per il controllo degli accessi in base al ruolo di Azure. Ad esempio, un proprietario nell'hub IoT può assegnare il ruolo "Proprietario dati dell'hub IoT", che concede tutte le autorizzazioni. Provare questo ruolo per risolvere il problema di mancanza di autorizzazione.
Annotazioni
Alcuni dispositivi potrebbero riscontrare un problema di deviazione del tempo quando l'ora del dispositivo ha una differenza rispetto all'ora del server superiore a cinque minuti. Questo errore può verificarsi quando un dispositivo si connette a un hub IoT senza problemi per settimane o anche mesi, ma inizia a rifiutare continuamente la connessione. L'errore può anche essere specifico di un sottoinsieme di dispositivi connessi all'hub IoT, poiché la deviazione del tempo può verificarsi a velocità diverse a seconda del momento in cui un dispositivo è connesso o attivato per la prima volta.
Spesso, l'esecuzione di una sincronizzazione dell'ora usando NTP o il riavvio del dispositivo (che può eseguire automaticamente una sincronizzazione dell'ora durante la sequenza di avvio) risolve il problema e consente al dispositivo di connettersi di nuovo. Per evitare questo errore, configurare il dispositivo per eseguire una sincronizzazione temporale periodica tramite NTP. È possibile pianificare la sincronizzazione su base giornaliera, settimanale o mensile a seconda della deriva del dispositivo. Se non è possibile configurare una sincronizzazione NTP periodica nel dispositivo, pianificare un riavvio periodico.
403002 Quota dell’hub IoT superata
È possibile che le richieste all'hub IoT non riescano con l'errore 403002 IoTHubQuotaExceeded. E nel portale di Azure l'elenco dei dispositivi dell'hub IoT non viene caricato.
Questo errore si verifica in genere quando viene superata la quota giornaliera dei messaggi per l'hub IoT. Per risolvere questo errore:
- Aggiornare o aumentare il numero di unità nell'hub IoT o attendere il giorno UTC successivo per l'aggiornamento della quota giornaliera.
- Per comprendere il modo in cui le operazioni vengono conteggiate in base alla quota, ad esempio query gemelle e metodi diretti, vedere la sezione Tariffe per operazione nelle Informazioni di fatturazione di Hub IoT di Azure.
- Per configurare il monitoraggio per l'utilizzo giornaliero della quota, configurare un avviso con la metrica Numero totale di messaggi usati. Per istruzioni dettagliate, vedere la sezione Configurare le metriche in Esercitazione: Configurare e usare metriche e log con un hub IoT.
Un processo di importazione in blocco potrebbe restituire questo errore anche quando il numero di dispositivi registrati nell'hub IoT si avvicina o supera il limite di quota per un hub IoT. Per altre informazioni, vedere la sezione Risolvere i problemi relativi ai processi di importazione di Importare ed esportare le identità dei dispositivi dell'hub IoT in blocco.
403004 Profondità massima della coda del dispositivo superata
Quando si tenta di inviare un messaggio da cloud a dispositivo, è possibile che la richiesta non riesca con l'errore 403004 o DeviceMaximumQueueDepthExceeded.
La causa sottostante di questo errore è che il numero di messaggi accodati per il dispositivo supera il limite di coda.
Il motivo più probabile per cui si è incorsi in questo limite è che si sta usando HTTPS per ricevere il messaggio, che causa un polling continuo usando ReceiveAsync, causando la limitazione della richiesta dell'IoT Hub.
Il modello supportato per i messaggi da cloud a dispositivo con HTTPS è dispositivi connessi intermittentmente che controllano raramente i messaggi (meno di ogni 25 minuti). Per ridurre la probabilità di raggiungere il limite di coda, passare a AMQP o MQTT per i messaggi da cloud a dispositivo.
In alternativa, migliorare la logica lato dispositivo per completare, rifiutare o abbandonare rapidamente i messaggi in coda, ridurre il tempo di vita o prendere in considerazione l'invio di un minor numero di messaggi. Per altre informazioni, vedere la sezione Scadenza dei messaggi (durata) di Informazioni sulla messaggistica da cloud a dispositivo da un hub IoT.
Infine, prendere in considerazione l'uso dell'API Elimina coda per pulire periodicamente i messaggi in sospeso prima che venga raggiunto il limite.
403006 Limite massimo di caricamento file attivo del dispositivo superato
È possibile che la richiesta di caricamento del file non riesca con il codice di errore 403006 DeviceMaximumActiveFileUploadLimitExceeded e un messaggio "Numero di richieste di caricamento di file attive non può superare 10".
Questo errore si verifica perché ogni client del dispositivo è limitato per i caricamenti simultanei di file. È possibile superare facilmente il limite se il dispositivo non invia una notifica all'hub IoT al termine del caricamento dei file. Una rete lato dispositivo non affidabile causa in genere questo problema.
Per risolvere questo errore, assicurarsi che il dispositivo possa notificare tempestivamente il completamento del caricamento del file dell'hub IoT. Quindi, provare a ridurre il TTL del token SAS per la configurazione del caricamento file.
404001 dispositivo non trovato
Durante una comunicazione da cloud a dispositivo (C2D), ad esempio un messaggio C2D, un aggiornamento gemello o un metodo diretto, è possibile che l'operazione non riesca con errore 404001 DeviceNotFound.
L'operazione non è riuscita perché l'hub IoT non riesce a trovare il dispositivo. Il dispositivo non è registrato o è disabilitato.
Per risolvere questo errore, registrare l'ID dispositivo usato, quindi riprovare.
404103 dispositivo non online
È possibile che un metodo diretto a un dispositivo non riesca con l'errore 404103 DeviceNotOnline anche se il dispositivo è online.
Se si sa che il dispositivo è online e viene comunque visualizzato l'errore, l'errore probabilmente si è verificato perché il callback del metodo diretto non è registrato nel dispositivo.
Per altre informazioni sulla configurazione corretta del dispositivo per i callback dei metodi diretti, vedere la sezione Gestire un metodo diretto in un dispositivo di Gestire un metodo diretto in un dispositivo.
404104 Connessione del dispositivo chiusa da remoto
Si noterà che i dispositivi si disconnettono a intervalli regolari (ad esempio ogni 65 minuti) e vengono visualizzati 404104 DeviceConnectionClosedRemotely nei log delle risorse dell'hub IoT. A volte, vengono visualizzati anche 401003 IoTHubUnauthorized e un evento di connessione del dispositivo riuscito meno di un minuto dopo.
In alternativa, i dispositivi si disconnettono in modo casuale e vengono visualizzati 404104 DeviceConnectionClosedRemotely nei log delle risorse dell'hub IoT.
In alternativa, molti dispositivi si disconnettono contemporaneamente, si nota un calo nella metrica Dispositivi connessi (connectedDeviceCount) e ci sono più 404104 DeviceConnectionClosedRemotely e 500xxx Errori interni nei log di Azure Monitor del solito.
Questo errore può verificarsi perché il token di firma di accesso condiviso usato per connettersi all'hub IoT è scaduto , causando la disconnessione del dispositivo da parte dell'hub IoT. La connessione viene ristabilita quando il dispositivo aggiorna il token. Ad esempio, il token di firma di accesso condiviso scade ogni ora per impostazione predefinita per C SDK, il che può causare interruzioni regolari. Per altre informazioni, vedere 401003 IoTHubUnauthorized.
Alcune altre possibilità includono:
- Il dispositivo ha perso la connettività di rete sottostante più a lungo del keep-alive MQTT, causando un timeout di inattività remoto. L'impostazione keep-alive di MQTT può essere diversa per dispositivo.
- Il dispositivo ha inviato una reimpostazione a livello TCP/IP ma non ha inviato nulla a livello di applicazione
MQTT DISCONNECT. Fondamentalmente, il dispositivo ha chiuso bruscamente la connessione socket sottostante. In alcuni casi, i bug nelle versioni precedenti di Azure IoT SDK potrebbero causare questo problema. - L'applicazione sul lato dispositivo si è arrestata in modo anomalo.
In alternativa, l'hub IoT potrebbe riscontrare un problema temporaneo. Per altre informazioni, vedere Errori interni 500xxx.
Per risolvere questo errore:
- Vedere le indicazioni per l'errore 401003 IoTHubUnauthorized.
- Assicurarsi che il dispositivo disponga di una buona connettività all'hub IoT testando la connessione. Se la rete è inaffidabile o intermittente, non consigliamo di aumentare il valore di keep-alive, poiché questo potrebbe comportare tempi più lunghi per il rilevamento, ad esempio tramite avvisi di Azure Monitor.
- Usare le versioni più recenti degli SDK dell'hub IoT di Azure.
- Vedere le indicazioni per gli errori interni 500xxx.
Annotazioni
È consigliabile utilizzare gli SDK per dispositivi IoT di Azure per gestire in modo affidabile le connessioni. Per altre informazioni, vedere Gestire le riconnessioni dei dispositivi per creare applicazioni resilienti
409001 Dispositivo già esistente
Quando si tenta di registrare un dispositivo nell'hub IoT, è possibile che la richiesta abbia esito negativo con l'errore 409001 DeviceAlreadyExists.
Questo errore si verifica perché è già presente un dispositivo con lo stesso ID dispositivo nell'hub IoT.
Per risolvere questo errore, usare un ID dispositivo diverso e riprovare.
409002 Conflitto di creazione del collegamento
È possibile che venga visualizzato l'errore 409002 LinkCreationConflict nei log insieme alla disconnessione del dispositivo o all'errore del messaggio da cloud a dispositivo.
In genere, questo errore si verifica quando l'hub IoT rileva che un client ha più di una connessione. Infatti, quando arriva una nuova richiesta di connessione per un dispositivo con una connessione esistente, l'hub IoT chiude la connessione esistente con questo errore.
Nel caso più comune, un problema separato (ad esempio 404104 DeviceConnectionClosedRemotely) causa la disconnessione del dispositivo. Il dispositivo tenta di ristabilire immediatamente la connessione, ma l'hub IoT considera ancora il dispositivo connesso. L'hub IoT chiude la connessione precedente e registra questo errore.
In alternativa, la logica sul lato dispositivo difettosa fa sì che il dispositivo stabilisca la connessione quando ne è già aperta una.
Per risolvere questo errore, cercare altri errori nei log che è possibile risolvere perché questo errore viene in genere visualizzato come effetto collaterale di un problema temporaneo diverso. In caso contrario, assicurarsi di emettere una nuova richiesta di connessione solo se la connessione viene eliminata.
Perdita del blocco del messaggio del dispositivo
Quando si tenta di inviare un messaggio da cloud a dispositivo, è possibile che la richiesta non riesca con l'errore 412002 DeviceMessageLockLost.
Questo errore si verifica perché quando un dispositivo riceve un messaggio da cloud a dispositivo dalla coda (ad esempio utilizzandoReceiveAsync()), l'hub IoT blocca il messaggio per una durata del timeout di blocco di un minuto. Se il dispositivo tenta di completare il messaggio dopo la scadenza del timeout del blocco, l'hub IoT genera questa eccezione.
Se l'hub IoT non riceve la notifica entro la durata del timeout di blocco di un minuto, imposta nuovamente il messaggio nello stato Accodato. Il dispositivo può tentare di ricevere di nuovo il messaggio. Per evitare che l'errore si verifichi in futuro, implementare la logica lato dispositivo per completare il messaggio entro un minuto dalla ricezione del messaggio. Questo timeout di un minuto non può essere modificato.
Eccezione di limitazione 429xxx
Si noterà che le richieste all'hub IoT hanno esito negativo con un errore che inizia con 429 , ad esempio:
- 429000 - GenericTooManyRequests
- 429001 - EccezioneDiLimitazione: Limiti di limitazione sono stati superati per l'operazione richiesta.
- 429002 - ThrottleBacklogLimitExceeded: il numero di richieste presenti nel backlog a causa della limitazione ha superato il limite di backlog.
- 429003 - ThrottlingBacklogTimeout: le richieste che si sono accumulate di nuovo a causa della limitazione sono andate in timeout durante l'attesa nella coda del backlog.
- 429004 - Numero massimo di attività attive superato (ThrottlingMaxActiveJobCountExceeded)
- 429005 - DeviceThrottlingLimitExceeded
È possibile monitorare 429001 solo tramite Azure Monitor nella metrica Numero di errori di throttling. Attualmente, gli altri errori di limitazione non hanno una metrica associata, ma vengono acquisiti nei log.
Per risolvere questi errori, controllare se si raggiunge il limite di limitazione confrontando la metrica dei tentativi di invio dei messaggi di telemetria rispetto ai limiti specificati in precedenza. È anche possibile controllare la metrica Numero di errori di limitazione. Per informazioni su queste metriche, vedere Metriche di telemetria dei dispositivi. Per informazioni sull'uso delle metriche per monitorare l'hub IoT, vedere Monitorare l'hub IoT di Azure.
L'hub IoT restituisce 429001: throttlingException solo dopo la violazione del limite per un periodo troppo lungo. Questo ritardo è attuato così che i tuoi messaggi non vengano eliminati se l'hub IoT riceve traffico a raffica. Nel frattempo, l'hub IoT elabora i messaggi alla velocità di limitazione dell'operazione, che potrebbe essere lenta se è presente una quantità eccessiva di traffico nel backlog. Per altre informazioni, vedere la sezione Modellazione del traffico in Quote e limitazione dell'hub IoT.
Se si stanno per raggiungere i limiti di quota o di larghezza di banda, provare ad aumentare le prestazioni dell'hub IoT.
500xxx Errori interni
Si potrebbe notare che la richiesta all'hub IoT ha esito negativo con un errore che inizia con 500 e/o un tipo di "errore del server". Alcune possibilità sono:
500001 ServerError: si è verificato un problema lato server con l'IoT Hub.
500008 GenericTimeout: l'hub IoT non è riuscito a completare la richiesta di connessione prima del timeout.
ServiceUnavailable (nessun codice di errore): l'hub IoT ha rilevato un errore interno.
InternalServerError (nessun codice di errore): l'hub IoT ha rilevato un errore interno.
Esistono molte cause per una risposta di errore 500xxx. In tutti i casi, il problema è molto probabilmente temporaneo. Anche se il team dell'hub IoT lavora duramente per gestire il contratto di servizio, piccoli subset di nodi dell'hub IoT possono occasionalmente riscontrare errori temporanei. Quando il dispositivo tenta di connettersi a un nodo che presenta problemi, viene visualizzato questo errore.
Per attenuare gli errori di 500xxx, eseguire un nuovo tentativo dal dispositivo. Per gestire automaticamente i ritentativi, assicurati di utilizzare la versione più recente degli SDK dell'hub IoT di Azure. Vedere Gestione degli errori temporanei per ulteriori informazioni sulle procedure consigliate per la gestione degli errori temporanei e sui tentativi di ripetizione.
Se il problema persiste, controllare Integrità risorse e Stato di Azure per verificare se l'hub IoT presenta un problema noto. È anche possibile usare la funzionalità di failover manuale.
Se non sono presenti problemi noti e il problema persiste, contattare il supporto tecnico per ulteriori indagini.
503003 Partizione non trovata
È possibile che le richieste all'hub IoT non riescano con l'errore 503003 PartitionNotFound.
Questo errore è interno all'hub IoT ed è probabilmente temporaneo. Per altre informazioni, vedere Errori interni 500xxx.
Per risolvere questo errore, vedere Errori interni 500xxx.
504101 Timeout del gateway
Quando si tenta di richiamare un metodo diretto dall'hub IoT a un dispositivo, è possibile che la richiesta non riesca con l'errore 504101 GatewayTimeout.
Questo errore si verifica perché l'hub IoT ha rilevato un errore e non è riuscito a confermare se il metodo diretto è stato completato prima del timeout. In alternativa, quando si usa una versione precedente di Azure IoT C# SDK (<1.19.0), il collegamento AMQP tra il dispositivo e l'hub IoT può essere eliminato automaticamente a causa di un bug.
Per risolvere questo errore, eseguire un nuovo tentativo o eseguire l'aggiornamento alla versione più recente di Azure IOT C# SDK.