Połączenie kończy się 410/3112
Powodem, dla którego wywołanie kończy się błędem 410/3112, jest to, że klient nie może nawiązać połączenia z innym punktem końcowym i nie zebrano żadnych kandydatów do przekazywania. Ten kod błędu 410/3112 może wystąpić, gdy nie można ustanowić ścieżki nośnika z powodu problemów z siecią, ograniczeń zapory lub nieprawidłowych ustawień konfiguracji. W związku z tym elementy równorzędne nie mogły nawiązać połączenia bezpośredniego lub przekaźnika.
Kandydaci do przekazywania nie są niezbędne, jeśli klient może nawiązać bezpośrednie połączenie z innym elementem równorzędnym. Jednak gdy usługa WebRTC nie może zebrać kandydatów do przekazywania, często wskazuje problem z konfiguracją serwera TURN (przechodzenie za pomocą przekaźników wokół translatora adresów sieciowych) lub ograniczeniami sieci. Kandydaci do przekazywania mają kluczowe znaczenie dla nawiązywania połączeń w restrykcyjnych środowiskach sieciowych.
Jak wykrywać przy użyciu zestawu SDK
Przyczyną zakończenia wywołania jest następujący fragment kodu.
call.on('stateChanged', () => {
if (call.state === 'Disconnected') {
if (call.callEndReason.code === 410 && call.callEndReason.subCode === 3112) {
// show error message
}
}
});
Aby zrozumieć kody i podkody, zobacz Opis kodów wywołujących i błędów podkodowania.
Gdy nie można ustanowić ścieżki nośnika, wywołanie kończy się kodem 410 i podkodem 3112.
Zestaw SDK wyzwala również zdarzenie networkRelaysNotReachable UFD .
Oto fragment kodu pokazujący sposób przechwytywania networkRelaysNotReachable UFD
zdarzenia.
call.feature(Features.UserFacingDiagnostics).network.on('diagnosticChanged', (diagnosticInfo) => {
if (diagnosticInfo.diagnostic === 'networkRelaysNotReachable') {
if (diagnosticInfo.value === true) {
// show a warning message on UI
} else {
// The networkRelaysNotReachable UFD recovered, notify the user
}
}
});
Jak analizować problem z usługą Log Analytics lub narzędziem do diagnostyki wywołań
Gdy użytkownik zgłasza, że nie może wykonać wywołania, możesz użyć narzędzia diagnostyki wywołań, aby przeanalizować przyczynę błędu. Aby debugować wywołania użytkownika, potrzebny jest identyfikator wywołania. Jeśli wywołanie użytkownika nie powiodło się, ponieważ zapora zablokowała połączenie przekaźnika, kod końcowy i kod podrzędny można znaleźć jako 410 i 3112 na stronie przeglądu wywołania.
Ponadto na stronie problemów z wywołaniem można również znaleźć zdarzenie networkRelaysNotReachable UFD .
Aby zrozumieć czas akcji lub zdarzeń użytkownika, możesz sprawdzić szczegóły na stronie osi czasu.
W tym przykładzie użytkownik dostał networkRelaysNotReachable UFD
zdarzenie o godzinie 16:41:47 i wywołaj zdarzenie zmiany stanu o godzinie 16:41:49.
Narzędzie diagnostyki wywołań zawiera omówienie i niezbędne informacje dotyczące debugowania pojedynczego wywołania. Jeśli chcesz zrozumieć, ilu użytkowników napotyka ten problem lub jak często użytkownicy napotykają problem, możesz użyć narzędzia Log Analytics , aby uzyskać szczegółowe informacje na temat tego problemu.
Jeśli na przykład chcesz uzyskać identyfikator wywołania, który został odłączony od podkodu 3112 w ciągu ostatnich siedmiu dni, możesz wykonać to zapytanie:
ACSCallSummary
| where ParticipantEndSubCode == 3112
| project TimeGenerated, CorrelationId, ParticipantId, Identifier, CallType
Możesz również renderować schemat czasu, aby zrozumieć dzienną liczbę wywołań kończących się podkodem 3112
ACSCallSummary
| where ParticipantEndSubCode == 3112
| summarize count() by bin(TimeGenerated, 1d)
| render timechart
Wykres czasu zawiera tylko omówienie użytkowników w ramach tego samego identyfikatora zasobu USŁUGI ACS. Uruchamiając bardziej szczegółowe zapytania, można zidentyfikować wzorce lub anomalie, które nie są od razu widoczne na wykresie czasowym, pomagając w określeniu głównej przyczyny wszelkich problemów dokładniej.
Jeśli na przykład zobaczysz wzrost liczby wywołań kończących się podkodem 3112, może to być spowodowane dużą liczbą wywołań, podczas gdy współczynnik wystąpienia problemu pozostał taki sam. Alternatywnie skok może być przypisywany konkretnemu użytkownikowi, który ponowił wiele prób, a wszystkie próby zakończyły się niepowodzeniem z podkodowaniem 3112.
W tym zapytaniu analizujemy dane na podstawie identyfikatorów użytkowników, zakładając, że aplikacja zachowuje ten sam identyfikator użytkownika dla każdej osoby.
ACSCallSummary
| summarize Total = count(), SuccessCount = countif(ParticipantEndSubCode == 0), SubCode3112Count = countif(ParticipantEndSubCode == 3112) by Identifier
| where SubCode3112Count > 0
| order by SubCode3112Count desc
W tym przykładzie jeden użytkownik miał łącznie 180 wywołań, z których 160 wywołań zakończyło się pomyślnie, a tylko dwa wywołania zakończyły się niepowodzeniem z podkodem 3112. Ten wzorzec sugeruje przejściowy problem z siecią, który może zostać rozwiązany przez ponowienie próby. Z drugiej strony inny użytkownik miał łącznie sześć wywołań, z których wszystkie zakończyły się niepowodzeniem z podkodem 3112. Ta spójność w wartości podkodowania wskazuje prawdopodobny problem z konfiguracją sieci dla tego użytkownika, gdzie ponawianie próby jest mało prawdopodobne, aby pomóc.
Jak rozwiązać problem lub rozwiązać problem
Jeśli okaże się, że użytkownik stale doświadcza błędu 410/3112, zaleca się sprawdzenie ustawień zapory. Użytkownicy powinni postępować zgodnie ze wskazówkami dotyczącymi konfiguracji zapory wymienionymi w dokumencie Zalecenia dotyczące sieci. Upewnij się, że użytkownik lub administrator sprawdza ustawienia translatora adresów sieciowych (NAT) i sprawdza, czy zasady zapory blokują pakiety protokołu UDP (User Datagram Protocol). Ustawienia zapory nie są ograniczone do komputera użytkownika; Jeśli użytkownik znajduje się w środowisku firmowym, może być również konieczne skonfigurowanie zapory firmy.
Ponadto jeśli aplikacja używa niestandardowych serwerów TURN, upewnij się, że określony adres IP, port i protokół nie są blokowane przez żadną zaporę.
W przypadku aplikacji ważne jest, aby obsługiwać zdarzenia z funkcji diagnostyki użytkownika i odpowiednio powiadamiać użytkowników. Dzięki temu użytkownik jest świadomy problemu i może rozwiązać problemy ze swoim środowiskiem sieciowym.
W rzadkich przypadkach ten kod błędu jest wyświetlany losowo, nawet jeśli ustawienia zapory użytkownika są poprawne. Jeśli ten sam użytkownik był wcześniej w stanie nawiązać połączenie i pomyślnie nawiązać połączenie, ten problem może być spowodowany zmianami w warunkach sieciowych. Może to być tymczasowy problem. Spróbuj ponownie uruchomić lub dołączyć do połączenia.