Udostępnij za pośrednictwem


Omówienie i rozwiązywanie problemów z błędami usługi Azure IoT Hub

W tym artykule opisano przyczyny i rozwiązania typowych kodów błędów, które mogą wystąpić podczas korzystania z usługi IoT Hub.

400027 Połączenie zostało wymuszone na nowym połączeniu.

Możesz zobaczyć błąd 400027 ConnectionForcefullyClosedOnNewConnection, jeśli urządzenie rozłącza się i zgłasza Communication_Error jako ConnectionStatusChangeReason przy użyciu .NET SDK i typu transportu MQTT. Lub operacja bliźniaka urządzenia w chmurze (na przykład odczyt lub aktualizacja zgłoszonych właściwości) lub wywołanie metody bezpośredniej kończy się niepowodzeniem z kodem błędu 400027.

Ten błąd występuje, gdy inny klient tworzy nowe połączenie z usługą IoT Hub przy użyciu tej samej tożsamości, więc usługa IoT Hub zamyka poprzednie połączenie. Usługa IoT Hub nie zezwala na nawiązywanie połączenia przy użyciu tej samej tożsamości więcej niż jednemu klientowi.

Aby rozwiązać ten błąd, upewnij się, że każdy klient łączy się z usługą IoT Hub przy użyciu własnej tożsamości.

401003 IoT Hub nieautoryzowane

W dziennikach można zauważyć wzorzec rozłączania urządzeń z komunikatem 401003 IoTHubUnauthorized, po którym następuje 404104 DeviceConnectionClosedRemotely, a następnie urządzenia ponownie nawiązują pomyślnie połączenie w krótkim czasie.

Żądania do usługi IoT Hub kończą się niepowodzeniem z jednym z następujących komunikatów o błędach:

  • Brak nagłówka autoryzacji
  • Usługa IotHub '*' nie zawiera określonego urządzenia '*'
  • Reguła autoryzacji "*" nie zezwala na dostęp dla '*'
  • Uwierzytelnianie nie powiodło się dla tego urządzenia, odnowić token lub certyfikat i ponownie nawiązać połączenie
  • Odcisk palca nie jest zgodny z konfiguracją: Odcisk palca: SHA1Hash=*, SHA2Hash=*; Konfiguracja: PrimaryThumbprint=*, SecondaryThumbprint=*
  • Podmiot user@example.com nie jest autoryzowany do wykonania operacji GET na /exampleOperation z powodu braku przypisanych uprawnień

Ten błąd występuje, ponieważ w przypadku MQTT niektóre zestawy SDK polegają na tym, że IoT Hub rozłącza się, gdy token SAS wygaśnie, aby wiedziały, kiedy go odświeżyć. Więc:

  1. Token SAS wygasa
  2. IoT Hub zauważa wygaśnięcie i rozłącza urządzenie z kodem 401003 IoTHubUnauthorized
  3. Urządzenie kończy proces rozłączania z 404104 DeviceConnectionClosedRemotely
  4. Zestaw SDK IoT generuje nowy token SAS
  5. Urządzenie zostanie pomyślnie ponownie nawiązane z usługą IoT Hub

Lub usługa IoT Hub nie może uwierzytelnić nagłówka, reguły lub klucza uwierzytelniania. Ten wynik może wynikać z któregokolwiek z powodów wymienionych w objawach.

Aby rozwiązać ten błąd, nie jest wymagana żadna akcja w przypadku używania zestawu IoT SDK do nawiązania połączenia przy użyciu parametrów połączenia urządzenia. Zestaw SDK IoT ponownie generuje nowy token, aby ponownie nawiązać połączenie po wygaśnięciu tokenu SAS.

Domyślna żywotność tokenu wynosi 60 minut w zestawach SDK; Jednak w przypadku niektórych zestawów SDK można skonfigurować cykl życia tokenu i próg odnawiania tokenu. Ponadto błędy generowane po rozłączeniu urządzenia i ponownym połączeniu z odnawianiem tokenu różnią się dla każdego zestawu SDK. Aby dowiedzieć się więcej i uzyskać informacje na temat sposobu określania zestawu SDK używanego przez urządzenie w dziennikach, zobacz sekcję Zachowanie rozłączania urządzenia MQTT z zestawami SDK usługi Azure IoTw sekcji Monitorowanie, diagnozowanie i rozwiązywanie problemów z łącznością urządzeń usługi Azure IoT Hub.

W przypadku deweloperów urządzeń, jeśli problem dotyczy liczby błędów, przejdź do zestawu SDK języka C, który odnawia token SAS przed wygaśnięciem. W przypadku protokołu AMQP token SAS może być odświeżany bez rozłączania.

Ogólnie rzecz biorąc, przedstawiony komunikat o błędzie powinien wyjaśnić, jak naprawić błąd. Jeśli z jakiegoś powodu nie masz dostępu do szczegółów komunikatu o błędzie, upewnij się, że:

  • Sygnatura dostępu współdzielonego lub inny używany token zabezpieczający nie wygasł.
  • W przypadku uwierzytelniania certyfikatu X.509 certyfikat urządzenia lub certyfikat urzędu certyfikacji skojarzony z urządzeniem nie wygasł. Aby dowiedzieć się, jak zarejestrować certyfikaty CA X.509 w IoT Hub, zobacz Samouczek: tworzenie i przekazywanie certyfikatów na potrzeby testowania.
  • W przypadku uwierzytelniania odcisku palca certyfikatu X.509 odcisk palca certyfikatu urządzenia jest zarejestrowany w usłudze IoT Hub.
  • Poświadczenia autoryzacji są poprawnie sformułowane dla używanego protokołu. Aby dowiedzieć się więcej, zobacz Kontrola dostępu do usługi IoT Hub przy użyciu identyfikatora Entra firmy Microsoft.
  • Użyta reguła autoryzacji ma uprawnienie do żądanej operacji.
  • W przypadku ostatnich komunikatów o błędach rozpoczynających się od "principal...", ten błąd można rozwiązać, przypisując użytkownikowi prawidłowy poziom uprawnień RBAC platformy Azure. Na przykład właściciel usługi IoT Hub może przypisać rolę "Właściciel danych usługi IoT Hub", która daje wszystkie uprawnienia. Spróbuj wykonać tę rolę, aby rozwiązać problem z brakiem uprawnień.

Uwaga

Niektóre urządzenia mogą napotkać problem z dryfem czasu, gdy czas urządzenia różni się od czasu serwera, który jest dłuższy niż pięć minut. Ten błąd może wystąpić, gdy urządzenie bez problemów łączy się z centrum IoT przez kilka tygodni, a nawet miesięcy, ale następnie jego połączenie zaczyna być stale odrzucane. Błąd może być również specyficzny dla podzestawu urządzeń połączonych z centrum IoT, ponieważ dryf czasu może wystąpić z różnymi szybkościami w zależności od tego, kiedy urządzenie jest najpierw połączone lub włączone.

Często wykonanie synchronizacji czasu przy użyciu ntP lub ponowne uruchomienie urządzenia (co może automatycznie wykonać synchronizację czasu podczas sekwencji rozruchu) rozwiązuje problem i umożliwia urządzeniu ponowne nawiązanie połączenia. Aby uniknąć tego błędu, skonfiguruj urządzenie do przeprowadzania okresowej synchronizacji czasu przy użyciu protokołu NTP. Synchronizację można zaplanować codziennie, co tydzień lub co miesiąc w zależności od ilości dryfu urządzenia. Jeśli nie możesz skonfigurować okresowej synchronizacji NTP na urządzeniu, zaplanuj okresowy ponowny rozruch.

403002 przekroczono limit przydziału usługi IoT Hub

Żądania do usługi IoT Hub mogą zakończyć się niepowodzeniem z powodu błędu 403002 IoTHubQuotaExceeded. W witrynie Azure Portal lista urządzeń centrum IoT Hub nie jest ładowana.

Ten błąd zwykle występuje, gdy przekroczono dzienny limit przydziału komunikatów dla centrum IoT. Aby rozwiązać ten błąd:

Zadanie importu zbiorczego może również zwrócić ten błąd, gdy liczba urządzeń zarejestrowanych w centrum IoT zbliża się lub przekracza limit przydzielenia zasobów dla centrum IoT. Aby dowiedzieć się więcej, zobacz sekcję Rozwiązywanie problemów z zadaniami importowania w artykule Zbiorczy import i eksport tożsamości urządzeń usługi IoT Hub.

403004 Przekroczono maksymalną głębokość kolejki urządzenia

Podczas próby wysłania komunikatu z chmury do urządzenia może zostać wyświetlony komunikat informujący, że żądanie kończy się niepowodzeniem z powodu błędu 403004 lub DeviceMaximumQueueDepthExceeded.

Podstawową przyczyną tego błędu jest to, że liczba komunikatów w kolejce dla urządzenia przekracza limit kolejki.

Najbardziej prawdopodobną przyczyną wystąpienia tego limitu jest to, że używasz protokołu HTTPS do odbierania komunikatu, co prowadzi do ciągłego sondowania przy użyciu metody ReceiveAsync, co powoduje ograniczenie żądania przez usługę IoT Hub.

Obsługiwanym wzorcem dla komunikatów z chmury do urządzenia z protokołem HTTPS są urządzenia sporadycznie połączone, które rzadko sprawdzają komunikaty (rzadziej niż co 25 minut). Aby zmniejszyć prawdopodobieństwo wystąpienia limitu kolejki, przełącz się na protokół AMQP lub MQTT dla komunikatów z chmury do urządzenia.

Alternatywnie, ulepsz logikę po stronie urządzenia, aby szybko ukończyć, odrzucić lub porzucić komunikaty znajdujące się w kolejce, skrócić czas życia albo rozważyć wysłanie mniejszej liczby komunikatów. Aby uzyskać więcej informacji, zobacz sekcję Wygaśnięcie komunikatów (czas wygaśnięcia) w temacie Understand cloud-to-device messaging from an IoT Hub (Omówienie komunikatów z chmury do urządzenia z centrum IoT).

Na koniec rozważ użycie API Purge Queue dla okresowego czyszczenia oczekujących komunikatów przed osiągnięciem limitu.

403006 Przekroczono limit maksymalnego aktywnego przekazywania plików urządzenia

Może się okazać, że żądanie przekazania pliku kończy się niepowodzeniem z kodem błędu 403006 DeviceMaximumActiveFileUploadLimitExceeded i komunikat "Liczba aktywnych żądań przekazywania plików nie może przekroczyć 10".

Ten błąd występuje, ponieważ każdy klient urządzenia jest ograniczony do współbieżnych przesyłania plików. Możesz łatwo przekroczyć limit, jeśli urządzenie nie powiadamia usługi IoT Hub o zakończeniu przekazywania plików. Zawodna sieć po stronie urządzenia często powoduje ten problem.

Aby rozwiązać ten błąd, upewnij się, że urządzenie może natychmiast powiadomić o zakończeniu przekazywania plików usługi IoT Hub. Następnie spróbuj zmniejszyć czas wygaśnięcia tokenu sygnatury dostępu współdzielonego dla konfiguracji przekazywania plików.

nie znaleziono urządzenia 404001

Podczas komunikacji typu chmura-urządzenie (C2D), na przykład komunikat C2D, aktualizacja bliźniaka lub metoda bezpośrednia, może zdarzyć się, że operacja kończy się niepowodzeniem z powodu błędu 404001 DeviceNotFound.

Operacja nie powiodła się, ponieważ usługa IoT Hub nie może odnaleźć urządzenia. Urządzenie nie jest zarejestrowane lub jest wyłączone.

Aby rozwiązać ten błąd, zarejestruj użyty identyfikator urządzenia, a następnie spróbuj ponownie.

404103 Urządzenie nie jest w trybie online

Może się okazać, że bezpośrednia metoda na urządzenie kończy się niepowodzeniem z powodu błędu 404103 DeviceNotOnline, nawet jeśli urządzenie jest online.

Jeśli wiesz, że urządzenie jest w trybie online i nadal występuje błąd, to prawdopodobnie jest on spowodowany brakiem rejestracji wywołania zwrotnego metody bezpośredniej na urządzeniu.

Aby uzyskać więcej informacji na temat prawidłowego konfigurowania urządzenia dla wywołań zwrotnych metod bezpośrednich, zobacz sekcję Obsługa metody bezpośredniej na urządzeniu w sekcji Obsługa metody bezpośredniej na urządzeniu.

404104 Zdalne zamykanie połączenia urządzenia

Może się zdarzyć, że urządzenia są rozłączane w regularnych odstępach czasu (na przykład co 65 minut), oraz w dziennikach zasobów usługi IoT Hub widnieje 404104 DeviceConnectionClosedRemotely. Czasami zobaczysz również 401003 IoTHubUnauthorized i pomyślne zdarzenie połączenia urządzenia mniej niż minutę później.

Lub urządzenia rozłączają się losowo, a w dziennikach zasobów usługi IoT Hub zobaczysz 404104 DeviceConnectionClosedRemotely.

Lub wiele urządzeń rozłącza się jednocześnie, zobaczysz spadek w metryce Połączone urządzenia (connectedDeviceCount) i istnieje więcej 404104 DeviceConnectionClosedRemotely i 500xxx Wewnętrzne błędy w dziennikach usługi Azure Monitor niż zwykle.

Ten błąd może wystąpić, ponieważ token SAS używany do nawiązywania połączenia z usługą IoT Hub wygasł, co powoduje rozłączenie urządzenia z usługą IoT Hub. Połączenie zostanie nawiązane ponownie, gdy urządzenie odświeży token. Na przykład token SAS wygasa co godzinę domyślnie dla zestawu SDK języka C, co może prowadzić do regularnych rozłączeń. Aby dowiedzieć się więcej, sprawdź „401003 IoTHubUnauthorized”.

Oto kilka innych możliwości:

  • Urządzenie utraciło podstawową łączność sieciową dłużej niż czas bezczynności MQTT, co spowodowało przekroczenie limitu czasu bezczynności zdalnej. Ustawienie utrzymywania aktywności MQTT może być inne dla każdego urządzenia.
  • Urządzenie wysłało reset na poziomie TCP/IP, ale nie wysłało resetu na poziomie aplikacji MQTT DISCONNECT. Zasadniczo urządzenie nagle zamknęło połączenie gniazda bazowego. Czasami ten problem jest spowodowany usterkami w starszych wersjach zestawu Azure IoT SDK.
  • Aplikacja po stronie urządzenia uległa awarii.

Lub usługa IoT Hub może mieć przejściowy problem. Aby uzyskać więcej informacji, zobacz błędy wewnętrzne 500xxx.

Aby rozwiązać ten błąd:

Zalecamy użycie zestawów SDK urządzeń Azure IoT w celu niezawodnego zarządzania połączeniami. Aby dowiedzieć się więcej, zobacz Zarządzanie ponownymi połączeniami urządzeń w celu tworzenia odpornych aplikacji

409001 Urządzenie już istnieje

Podczas próby zarejestrowania urządzenia w usłudze IoT Hub może się okazać, że żądanie kończy się niepowodzeniem z powodu błędu 409001 DeviceAlreadyExists.

Ten błąd występuje, ponieważ urządzenie ma już ten sam identyfikator urządzenia w centrum IoT.

Aby rozwiązać ten błąd, użyj innego identyfikatora urządzenia i spróbuj ponownie.

Możesz zobaczyć błąd 409002 LinkCreationConflict w dziennikach wraz z rozłączeniem urządzenia lub niepowodzeniem wiadomości z chmury do urządzenia.

Zazwyczaj ten błąd występuje, gdy usługa IoT Hub wykryje, że klient ma więcej niż jedno połączenie. W rzeczywistości po nadejściu nowego żądania połączenia dla urządzenia z istniejącym połączeniem usługa IoT Hub zamyka istniejące połączenie z tym błędem.

W najczęstszym przypadku osobny problem (taki jak 404104 DeviceConnectionClosedRemotely) powoduje rozłączenie urządzenia. Urządzenie próbuje natychmiast ponownie nawiązać połączenie, ale IoT Hub nadal uważa, że urządzenie jest połączone. Usługa IoT Hub zamyka poprzednie połączenie i rejestruje ten błąd.

Ewentualnie wadliwa logika po stronie urządzenia powoduje nawiązanie połączenia, gdy jest już otwarte.

Aby rozwiązać ten błąd, poszukaj innych błędów w dziennikach, które można rozwiązać, ponieważ ten błąd zwykle występuje jako efekt uboczny innego, przejściowego problemu. W przeciwnym razie pamiętaj, aby wydać nowe żądanie połączenia tylko wtedy, gdy połączenie spadnie.

412002 utracono blokadę komunikatu urządzenia

Podczas próby wysłania komunikatu z chmury do urządzenia może zostać wyświetlony komunikat informujący, że żądanie kończy się niepowodzeniem z powodu błędu 412002 DeviceMessageLockLost.

Ten błąd występuje, ponieważ gdy urządzenie odbiera komunikat z chmury do urządzenia z kolejki (na przykład przy użyciu ReceiveAsync()), IoT Hub blokuje komunikat na czas jednej minuty. Jeśli urządzenie spróbuje ukończyć komunikat po wygaśnięciu limitu czasu blokady, usługa IoT Hub zgłasza ten wyjątek.

Jeśli usługa IoT Hub nie otrzyma powiadomienia w ciągu jednej minuty czasu blokady, przywraca komunikat do stanu w kolejce. Urządzenie może ponownie podjąć próbę odebrania komunikatu. Aby zapobiec wystąpieniu błędu w przyszłości, zaimplementuj logikę po stronie urządzenia, aby ukończyć komunikat w ciągu jednej minuty od odebrania komunikatu. Nie można zmienić limitu czasu jednej minuty.

Wyjątek przeciążenia 429001

Może się okazać, że żądania do usługi IoT Hub kończą się niepowodzeniem z powodu błędu 429001 ThrottlingException.

Ten błąd występuje, gdy limity ograniczania przepustowości usługi IoT Hub są przekraczane dla żądanej operacji.

Aby rozwiązać ten błąd, sprawdź, czy osiągasz limit przepustowości, porównując metrykę prób wysyłania komunikatów telemetrycznych z wcześniej określonymi limitami. Możesz również sprawdzić metrykę Liczba błędów ograniczania przepustowości . Aby uzyskać informacje o tych metrykach, zobacz Metryki telemetrii urządzenia. Aby uzyskać informacje o sposobie używania metryk do monitorowania centrum IoT Hub, zobacz Monitorowanie usługi Azure IoT Hub.

Usługa IoT Hub zwraca wyjątek 429 ThrottlingException dopiero gdy limit zostanie przekroczony przez zbyt długi czas. To opóźnienie jest stosowane, aby komunikaty nie zostały zgubione, jeśli centrum IoT zostanie przeciążone nagłym wzrostem ruchu. W międzyczasie IoT Hub przetwarza komunikaty przy zredukowanej prędkości operacyjnej, co może być powolne, jeśli w zaległościach znajduje się zbyt dużo ruchu. Aby uzyskać więcej informacji, zobacz sekcję Kształtowanie ruchu w temacie Limity przydziału i ograniczanie przepustowości usługi IoT Hub.

Rozważ zwiększenie skali usługi IoT Hub, jeśli przekraczasz limity przydziału lub ograniczania przepustowości.

Błędy wewnętrzne 500xxx

Może się okazać, że żądanie do usługi IoT Hub kończy się niepowodzeniem z powodu błędu rozpoczynającego się od 500 i/lub pewnego rodzaju "błędu serwera". Oto kilka możliwości:

  • 500001 ServerError: usługa IoT Hub napotkała problem po stronie serwera.

  • 500008 GenericTimeout: usługa IoT Hub nie mogła ukończyć żądania połączenia przed przekroczeniem limitu czasu.

  • ServiceUnavailable (brak kodu błędu): usługa IoT Hub napotkała błąd wewnętrzny.

  • InternalServerError (brak kodu błędu): usługa IoT Hub napotkała błąd wewnętrzny.

Może istnieć wiele przyczyn odpowiedzi błędu 500xxx. We wszystkich przypadkach problem jest najprawdopodobniej przejściowy. Chociaż zespół usługi IoT Hub ciężko pracuje nad utrzymaniem umowy SLA, małe podzestawy węzłów usługi IoT Hub mogą czasami doświadczać błędów przejściowych. Gdy urządzenie próbuje nawiązać połączenie z węzłem, w którym występują problemy, zostanie wyświetlony ten błąd.

Aby wyeliminować błędy 500xxx, wykonaj ponowną próbę z urządzenia. Aby automatycznie zarządzać ponowną próbą, upewnij się, że używasz najnowszej wersji zestawów SDK usługi Azure IoT Hub. Aby uzyskać więcej informacji na temat najlepszych rozwiązań dotyczących obsługi błędów przejściowych i ponawiania prób, zobacz Obsługa błędów przejściowych.

Jeśli problem będzie się powtarzać, sprawdź kondycję zasobów i stan platformy Azure , aby sprawdzić, czy usługa IoT Hub ma znany problem. Możesz również użyć funkcji ręcznego przełączenia awaryjnego.

Jeśli nie ma znanych problemów i problem będzie nadal występować, skontaktuj się z pomocą techniczną w celu przeprowadzenia dalszych badań.

Nie można odnaleźć partycji 503003

Może się okazać, że żądania do usługi IoT Hub kończą się niepowodzeniem z powodu błędu 503003 PartitionNotFound.

Ten błąd jest wewnętrzny w usłudze IoT Hub i prawdopodobnie jest przejściowy. Aby uzyskać więcej informacji, zobacz błędy wewnętrzne 500xxx.

Aby rozwiązać ten błąd, zobacz błędy wewnętrzne 500xxx.

Brama czasowo niedostępna 504101

Podczas próby wywołania metody bezpośredniej z usługi IoT Hub na urządzenie może być widoczne, że żądanie kończy się niepowodzeniem z powodu błędu 504101 GatewayTimeout.

Ten błąd występuje, ponieważ usługa IoT Hub napotkała błąd i nie mogła potwierdzić, czy metoda bezpośrednia została ukończona przed przekroczeniem limitu czasu. Lub w przypadku korzystania ze starszej wersji zestawu AZURE IoT C# SDK (<1.19.0) połączenie AMQP między urządzeniem a usługą IoT Hub można usunąć w trybie dyskretnym z powodu usterki.

Aby rozwiązać ten błąd, spróbuj ponownie lub uaktualnij go do najnowszej wersji zestawu AZURE IOT C# SDK.