Udostępnij za pośrednictwem


Wyjątki usługi Azure Relay

W tym artykule wymieniono niektóre wyjątki, które mogą być generowane przez interfejsy API usługi Azure Relay. Ta dokumentacja może ulec zmianie, dlatego sprawdź ponownie, czy nie ma aktualizacji.

Kategorie wyjątków

Interfejsy API usługi Relay generują wyjątki, które mogą należeć do następujących kategorii. Wyświetlane są również sugerowane akcje, które można wykonać, aby pomóc w rozwiązaniu wyjątków.

Typy wyjątków

W poniższej tabeli wymieniono typy wyjątków obsługi komunikatów i ich przyczyny. Zawiera również uwagi dotyczące sugerowanych akcji, które można wykonać, aby pomóc w rozwiązaniu wyjątków.

Typ wyjątku Opis Sugerowana akcja Uwaga dotycząca automatycznych lub natychmiastowych ponownych prób
Przekroczenie limitu czasu Serwer nie odpowiedział na żądaną operację w określonym czasie, która jest kontrolowana przez operację OperationTimeout. Serwer mógł ukończyć żądaną operację. Może się to zdarzyć z powodu opóźnień sieci lub innych infrastruktur. Sprawdź stan systemu pod kątem spójności, a następnie spróbuj ponownie, jeśli to konieczne. Zobacz TimeoutException. Ponów próbę może pomóc w niektórych przypadkach; dodaj logikę ponawiania prób do kodu.
Nieprawidłowa operacja Żądana operacja użytkownika nie jest dozwolona na serwerze ani w usłudze. Aby uzyskać szczegółowe informacje, zobacz komunikat o wyjątku. Sprawdź kod i dokumentację. Upewnij się, że żądana operacja jest prawidłowa. Ponawianie próby nie pomaga.
Operacja anulowana Podjęto próbę wywołania operacji na obiekcie, który został już zamknięty, przerwany lub usunięty. W rzadkich przypadkach transakcja otoczenia jest już usuwana. Sprawdź kod i upewnij się, że nie wywołuje operacji na usuniętym obiekcie. Ponawianie próby nie pomaga.
Nieautoryzowany dostęp Obiekt TokenProvider nie może uzyskać tokenu, token jest nieprawidłowy lub token nie zawiera oświadczeń wymaganych do wykonania operacji. Upewnij się, że dostawca tokenu został utworzony przy użyciu poprawnych wartości. Sprawdź konfigurację usługi Kontrola dostępu. Ponów próbę może pomóc w niektórych przypadkach; dodaj logikę ponawiania prób do kodu.
Wyjątek argumentu,
Argument o wartości null,
Argument poza zakresem
Wystąpił co najmniej jeden z następujących problemów:
Co najmniej jeden argument dostarczony do metody jest nieprawidłowy.
Identyfikator URI dostarczony do elementu NamespaceManager lub Create zawiera co najmniej jeden segment ścieżki.
Schemat identyfikatora URI dostarczony do elementu NamespaceManager lub Create jest nieprawidłowy.
Wartość właściwości jest większa niż 32 KB.
Sprawdź kod wywołujący i upewnij się, że argumenty są poprawne. Ponawianie próby nie pomaga.
Serwer zajęty Usługa nie może obecnie przetworzyć żądania. Klient może poczekać przez pewien czas, a następnie ponowić próbę wykonania operacji. Klient może ponowić próbę po upływie określonego interwału. Jeśli ponowienie próby spowoduje wystąpienie innego wyjątku, sprawdź zachowanie ponawiania próby tego wyjątku.
Przekroczono limit przydziału Jednostka obsługi komunikatów osiągnęła maksymalny dozwolony rozmiar. Utwórz miejsce w jednostce, odbierając komunikaty z jednostki lub jej podzapytania. Zobacz QuotaExceededException. Ponów próbę może pomóc, jeśli komunikaty zostały usunięte w międzyczasie.
Przekroczono rozmiar komunikatu Ładunek komunikatu przekracza limit 256 KB. Limit 256 KB to całkowity rozmiar komunikatu. Łączny rozmiar komunikatu może obejmować właściwości systemowe i wszelkie obciążenia związane z platformą Microsoft .NET. Zmniejsz rozmiar ładunku komunikatu, a następnie spróbuj ponownie wykonać operację. Ponawianie próby nie pomaga.

QuotaExceededException

Wyjątek QuotaExceededException wskazuje, że przekroczono limit przydziału dla określonej jednostki.

W przypadku przekaźnika ten wyjątek opakowuje wyjątek System.ServiceModel.QuotaExceededException, co wskazuje, że maksymalna liczba odbiorników została przekroczona dla tego punktu końcowego. Jest on wskazywany w wartości MaximumListenersPerEndpoint komunikatu wyjątku.

TimeoutException

Wyjątek TimeoutException zazwyczaj wskazuje na to, że operacja zainicjowana przez użytkownika zajmuje więcej czasu niż wynosi limit czasu dla operacji.

Sprawdź wartość właściwości ServicePointManager.DefaultConnectionLimit . Osiągnięcie tego limitu może również spowodować przekroczenie limitu czasu.

W przypadku usługi Relay mogą wystąpić wyjątki przekroczenia limitu czasu podczas pierwszego otwierania połączenia nadawcy przekaźnika. Istnieją dwie typowe przyczyny tego wyjątku:

  • Wartość OpenTimeout może być zbyt mała (nawet przez ułamek sekundy).
  • Lokalny odbiornik przekaźnika może nie odpowiadać (lub może napotkać problemy z regułami zapory, które uniemożliwiają odbiornikom akceptowanie nowych połączeń klienckich), a wartość OpenTimeout jest mniejsza niż około 20 sekund.

Przykład:

'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.

Typowe przyczyny

Istnieją dwie typowe przyczyny tego błędu:

  • Nieprawidłowa konfiguracja

    Limit czasu operacji może być zbyt mały dla warunku operacyjnego. Wartość domyślna limitu czasu operacji w zestawie SDK klienta wynosi 60 sekund. Sprawdź, czy wartość w kodzie jest ustawiona na wartość zbyt małą. Użycie procesora CPU i stan sieci mogą mieć wpływ na czas potrzebny na ukończenie operacji. Dobrym pomysłem jest ustawienie limitu czasu operacji na bardzo małą wartość.

  • Błąd usługi przejściowej

    Czasami usługa Relay może napotkać opóźnienia w przetwarzaniu żądań. Może się to zdarzyć na przykład w okresach dużego ruchu. Jeśli tak się dzieje, spróbuj ponownie wykonać operację po opóźnieniu, aż operacja zakończy się pomyślnie. Jeśli ta sama operacja nadal kończy się niepowodzeniem po wielu próbach, sprawdź witrynę stanu usługi platformy Azure, aby sprawdzić, czy występują znane awarie usługi.

ConnectionLostException — NameRenewalFailed

Objawy

Klient otrzymuje wyjątek: Microsoft.Azure.Relay.ConnectionLostException : InternalServerError: NameRenewalFailed.

Przyczyna

Usługa Azure Relay uruchamia ponownie połączenia odbiornika co 24 godziny. Wynika to z ustawienia fabrycznego. Usługa Azure Relay rozłącza aktywne połączenie odbiornika co 24 godziny, a odbiornik ponownie nawiąż połączenie z serwerem przy użyciu mechanizmu ponawiania prób.

Rozwiązanie

Brak akcji w ramach odbiornika automatycznie ponownie łączy się z serwerem. Jeśli zauważysz, że odbiornik nie łączy się ponownie, prześlij bilet do zespołu pomocy technicznej.

Następne kroki