Azure Relay-Ausnahmen
In diesem Artikel werden einige Ausnahmen aufgelistet, die von den Azure Relay-APIs generiert werden können. Diese Referenz kann geändert werden. Prüfen Sie darum bei Bedarf, ob Aktualisierungen vorgenommen wurden.
Ausnahmekategorien
Die Relay-APIs generieren Ausnahmen, die in folgende Kategorien fallen können. Empfohlene Maßnahmen, die Sie durchführen können, um die Ausnahmen zu beheben, sind ebenfalls aufgeführt.
Codierfehler des Benutzers: System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException.
Allgemeine Maßnahme: Korrigieren Sie den Code, bevor Sie fortfahren.
Setup-/Konfigurationsfehler: System.UnauthorizedAccessException.
Allgemeine Maßnahme: Überprüfen Sie die Konfiguration. Ändern Sie die Konfiguration bei Bedarf.
Vorübergehende Ausnahmen: Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException.
Allgemeine Maßnahme: Wiederholen Sie den Vorgang, oder benachrichtigen Sie die Benutzer.
Andere Ausnahmen: System.Transactions.TransactionException, System.TimeoutException.
Allgemeine Maßnahme: Richtet sich nach dem Ausnahmetyp. Informationen hierzu finden Sie in der Tabelle im nächsten Abschnitt.
Ausnahmetypen
In der folgenden Tabelle werden die Typen von Messagingausnahmen und ihre Ursachen aufgelistet. Empfohlene Maßnahmen, die Sie durchführen können, um die Ausnahmen zu beheben, sind ebenfalls aufgeführt.
Ausnahmetyp | Beschreibung | Vorgeschlagene Maßnahme | Hinweis zur automatischen oder sofortigen Wiederholung |
---|---|---|---|
Timeout | Der Server hat nicht innerhalb der von OperationTimeout vorgegebenen Zeit auf den angeforderten Vorgang reagiert. Möglicherweise hat der Server den angeforderten Vorgang abgeschlossen. Dies kann aufgrund von Netzwerk- oder anderen Infrastrukturverzögerungen passieren. | Überprüfen Sie den Systemzustand auf Konsistenz, und wiederholen Sie den Vorgang bei Bedarf. Siehe TimeoutException. | In einigen Fällen kann eine Wiederholung helfen. Fügen Sie dem Code eine Wiederholungslogik hinzu. |
Ungültiger Vorgang | Der angeforderte Benutzervorgang ist auf dem Server oder innerhalb des Diensts unzulässig. Sehen Sie sich die Details in der Ausnahmemeldung an. | Überprüfen Sie den Code und die Dokumentation. Stellen Sie sicher, dass der angeforderte Vorgang gültig ist. | Der Wiederholungsversuch ist nicht hilfreich. |
Vorgang abgebrochen | Es wurde versucht, einen Vorgang für ein Objekt aufzurufen, das bereits geschlossen, abgebrochen oder verworfen wurde. In seltenen Fällen wurde die Ambient-Transaktion bereits verworfen. | Überprüfen Sie den Code, und stellen Sie sicher, dass keine Vorgänge für verworfene Objekte aufgerufen werden. | Der Wiederholungsversuch ist nicht hilfreich. |
Nicht autorisierter Zugriff | Das TokenProvider-Objekt konnte kein Token abrufen, das Token ist ungültig, oder das Token enthält nicht die Ansprüche, die zum Ausführen des Vorgangs erforderlich sind. | Stellen Sie sicher, dass der Tokenanbieter mit den richtigen Werten erstellt wird. Überprüfen Sie die Konfiguration für den Access Control Service. | In einigen Fällen kann eine Wiederholung helfen. Fügen Sie dem Code eine Wiederholungslogik hinzu. |
Argumentausnahme, Argument NULL, Argument außerhalb des gültigen Bereichs |
Mindestens einer der folgenden Fehler ist aufgetreten: Mindestens eines der für die Methode bereitgestellten Argumente ist ungültig. Der für NamespaceManager oder Create bereitgestellte URI enthält mindestens ein Pfadsegment. Das für NamespaceManager oder für Create bereitgestellte URI-Schema ist ungültig. Der Eigenschaftswert ist größer als 32 KB. |
Überprüfen Sie den aufrufenden Code, und stellen Sie sicher, dass die Argumente richtig sind. | Der Wiederholungsversuch ist nicht hilfreich. |
Server ausgelastet | Der Dienst kann die Anforderung derzeit nicht verarbeiten. | Der Client kann eine gewisse Zeit warten und dann den Vorgang wiederholen. | Der Client kann versuchen, den Vorgang nach einem bestimmten Zeitintervall zu wiederholen. Wenn die Wiederholung zu einer anderen Ausnahme führt, überprüfen Sie das Wiederholungsverhalten dieser Ausnahme. |
Kontingent überschritten | Die Messagingentität hat die maximal zulässige Größe erreicht. | Schaffen Sie Platz in der Entität, indem Sie Nachrichten aus der Entität oder ihren Unterwarteschlangen empfangen. Siehe QuotaExceededException. | Eine Wiederholung kann helfen, wenn in der Zwischenzeit Nachrichten entfernt wurden. |
Nachrichtengröße überschritten | Eine Nachrichtennutzlast überschreitet den Grenzwert von 256 KB. Beachten Sie, dass es sich beim Grenzwert von 256-KB um die Gesamtgröße der Nachricht handelt. Zur Gesamtgröße der Nachricht gehören auch Systemeigenschaften und Microsoft .NET-Mehraufwand. | Reduzieren Sie die Größe der Nachrichtennutzlast, und wiederholen Sie den Vorgang. | Der Wiederholungsversuch ist nicht hilfreich. |
QuotaExceededException
QuotaExceededException gibt an, dass das Kontingent für eine bestimmte Entität überschritten wurde.
Bei Relay umschließt diese Ausnahme die System.ServiceModel.QuotaExceededException, die angibt, dass die maximale Anzahl von Listenern für diesen Endpunkt überschritten wurde. Er wird im MaximumListenersPerEndpoint-Wert der Ausnahmemeldung angegeben.
TimeoutException
Eine TimeoutException zeigt an, dass ein von einem Benutzer initiierter Vorgang länger als das Timeout des Vorgangs dauert.
Überprüfen Sie den Wert der Eigenschaft ServicePointManager.DefaultConnectionLimit. Durch Erreichen dieses Grenzwerts kann auch eine TimeoutException ausgelöst werden.
Bei Relay können Timeoutausnahmen auftreten, wenn Sie erstmals eine Verbindung zwischen Relay und Sender öffnen. Für diese Ausnahme gibt es zwei häufige Ursachen:
- Der OpenTimeout-Wert ist möglicherweise zu klein (möglicherweise nur um einen Sekundenbruchteil).
- Ein lokaler Relaylistener reagiert möglicherweise nicht (oder Probleme mit Firewallregeln verhindern, dass Listener neue Clientverbindungen akzeptieren), und der OpenTimeout-Wert ist kleiner als ungefähr 20 Sekunden.
Beispiel:
'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.
Häufige Ursachen
Für diesen Fehler gibt es zwei häufige Ursachen:
Falsche Konfiguration
Das Zeitlimit für den Vorgang ist möglicherweise zu gering für die Betriebsbedingung. Der Standardwert für das Zeitlimit für den Vorgang im Client-SDK beträgt 60 Sekunden. Überprüfen Sie, ob der Wert in Ihrem Code auf einen zu geringen Wert festgelegt wurde. Beachten Sie, dass CPU-Auslastung und Netzwerkbedingungen sich auf die Zeit auswirken können, die für den Abschluss eines Vorgangs benötigt wird. Es empfiehlt sich, das Timeout für den Vorgang nicht auf einen sehr kleinen Wert festzulegen.
Vorübergehender Dienstfehler
In einigen Fällen können bei der Verarbeitung von Anforderungen durch den Relay-Dienst Verzögerungen auftreten. Es kann z. B. in Zeiten mit hohem Datenverkehr passieren. Wenn dies der Fall ist, wiederholen Sie den Vorgang nach einer Verzögerung, bis der Vorgang erfolgreich ist. Wenn der gleiche Vorgang auch nach mehreren Versuchen nicht erfolgreich ist, überprüfen Sie auf der Website mit dem Azure-Status, ob Dienstausfälle bekannt sind.
Verbinden ionLostException - NameRenewalFailed
Problembeschreibung
Ihr Client empfängt die Ausnahme: Microsoft.Azure.Relay.ConnectionLostException : InternalServerError: NameRenewalFailed
.
Ursache
Der Azure Relay-Dienst startet Listenerverbindungen alle 24 Stunden neu. Dieses Verhalten ist beabsichtigt. Der Azure Relay-Dienst trennt alle 24 Stunden eine aktive Listenerverbindung, und der Listener stellt mithilfe des Wiederholungsmechanismus erneut eine Verbindung mit dem Server her.
Lösung
Es wird keine Aktion ausgeführt, wenn der Listener automatisch eine Verbindung mit dem Server herstellt. Wenn Sie feststellen, dass Ihr Listener keine erneute Verbindung herstellt, senden Sie ein Ticket an das Supportteam.