Behandeln von PlayFab-Fehlern
Es gibt mehrere verschiedene Punkte, an denen ein asynchroner API-Aufruf im PlayFab Services SDK-Aufruf fehlschlagen kann. Die Behandlung dieser Fehler hängt davon ab, wie und wann der Vorgang fehlschlägt.
Wie die meisten asynchronen Aufrufe im GDK folgen PlayFab-APIs demselben allgemeinen Aufrufmuster:
- PF*Async(...) -Aufruf, der einen asynchronen Vorgang startet.
- (Optional) XAsyncGetStatus(...) rufen Sie auf, um die status des asynchronen Vorgangs nachzuverfolgen. Kann verwendet werden, um auf den Abschluss des asynchronen Vorgangs zu warten.
- PF*GetResultSize(...) , um die Größe der Ergebnisnutzlast in Bytes abzurufen.
- PF*GetResult(...) , um das Ergebnis des asynchronen Vorgangs abzurufen.
Jeder dieser Aufrufe kann aus unterschiedlichen Gründen fehlschlagen. In den folgenden Abschnitten werden die am häufigsten auftretenden Fehlertypen beschrieben.
Ein synchroner Fehler tritt auf, wenn der anfängliche PF*Async-Aufruf einen Fehler zurückgibt. Diese Art von Fehler ist in der Regel ein Hinweis auf einen Programmierfehler – ungültiges Aufrufmuster, ungültige Argumente usw. Diese Fehlertypen sollten während der Entwicklung behoben werden. Die meisten anderen synchronen Fehler sind schwerwiegend und können nicht einfach behandelt werden (z. B. E_OUTOFMEMORY).
Ein asynchroner Fehler tritt auf, wenn XAsyncGetStatus, PF*GetResultSize oder PF*GetResult fehlschlägt. Der Bereich der asynchronen Fehler ist größer. Neben Fehlern aufgrund ungültiger Argumente fallen asynchrone Fehler in mehrere Kategorien, die in den folgenden Abschnitten ausführlicher beschrieben werden.
Vor dem Initiieren eines PlayFab-Dienstaufrufs führt das SDK eine clientseitige Überprüfung durch, um sicherzustellen, dass das erforderliche Authentifizierungstoken verfügbar und noch gültig ist. Wenn bei dieser Überprüfung ein Fehler auftritt, wird einer der folgenden Fehler zurückgegeben:
E_PF_NOENTITYTOKEN (0x89235411)
: Gibt an, dass das EntityToken, das dem bereitgestellten PFEntityHandle zugeordnet ist, abgelaufen ist. Weitere Informationen zum Umgang mit dieser Situation finden Sie unter Behandeln des Tokenablaufs .E_PF_NOSECRETKEY (0x89235412)
Gibt an, dass der bereitgestellten PFEntityHandle kein SecretKey zugeordnet ist. Das Fehlen eines SecretKey bedeutet in der Regel, dass Sie versucht haben, eine Anforderung mit einem ungültigen Entitätstyp zu stellen. APIs, die einen SecretKey erfordern, können nur von Titelentitäten aufgerufen werden. Beachten Sie, dass SecretKey-APIs auf Server- oder Administratorszenarien ausgerichtet sind und im GDK nicht verfügbar sind.
Wenn das SDK die PlayFab-Dienstanforderung erfolgreich vornimmt, gibt der Dienst möglicherweise trotzdem einen Fehler zurück. Es gibt zwei allgemeine Arten von PlayFab-Dienstfehlern: global, die von jeder PlayFab-API zurückgegeben werden können, und spezifisch, die API-spezifisch sind. Im Folgenden ist die vollständige Liste der globalen Fehler aufgeführt:
E_PF_API_CLIENT_REQUEST_RATE_LIMIT_EXCEEDED (0x892354dd)
E_PF_API_CONCURRENT_REQUEST_LIMIT_EXCEEDED (0x8923556b)
E_PF_CONCURRENT_EDIT_ERROR (0x8923549b)
E_PF_DATA_UPDATE_RATE_EXCEEDED (0x89235534)
E_PF_DOWNSTREAM_SERVICE_UNAVAILABLE (0x89235495)
E_PF_INVALID_API_ENDPOINT (0x89235499)
E_PF_OVER_LIMIT (0x892354ec)
E_PF_SERVICE_UNAVAILABLE (0x89235491)
E_PF_ACCOUNT_BANNED (0x89235423)
E_PF_ACCOUNT_DELETED (0x89235557)
E_PF_ACCOUNT_NOT_FOUND (0x89235422)
E_PF_API_REQUESTS_DISABLED_FOR_TITLE (0x8923553c)
E_PF_INVALID_CONTENT_TYPE (0x892354a6)
-
E_PF_INVALID_ENTITY_TYPE (0x8923558a)
: E_PF_INVALID_PARAMS (0x89235421)
E_PF_INVALID_REQUEST (0x89235468)
E_PF_INVALID_TITLE_ID (0x89235425)
E_PF_NOT_AUTHENTICATED (0x8923546b)
E_PF_NOT_AUTHORIZED (0x89235478)
E_PF_NOT_AUTHORIZED_BY_TITLE (0x892354d5)
E_PF_PROFILE_DOES_NOT_EXIST (0x8923553f)
E_PF_TITLE_DELETED (0x89235570)
E_PF_UNKNOWN_ERROR (0x89235448)
Weitere Informationen zur Anleitung zur Wiederholung von Dienstfehlern finden Sie unter Fehlercodes der globalen PlayFab-Dienst-API.
Eine Kategorie von Dienstfehlern sind Drosselungsfehler, die durch einen HTTP 429-status-Code angegeben werden. Wenn der PlayFab-Dienst einen Drosselungsfehler zurückgibt, bedeutet dies, dass der Client einen Endpunkt über einen bestimmten Zeitraum zu oft aufruft. Wenn das SDK einen Drosselungsfehler erhält, wird die Anforderung nach einem kleinen Backoff automatisch wiederholt. Wenn die Anforderung innerhalb des konfigurierten Wiederholungsfensters immer noch nicht erfolgreich ist, wird der Fehler an den Titel übergeben. Die SDK-Wiederholungseinstellungen können durch Aufrufen von PFSetHttpRetrySettings konfiguriert werden.
Wenn der zugrunde liegende Netzwerkstapel einen Fehler zurückgibt, wird dieser Fehler an den Client übergeben. Je nach Netzwerkausfall kann eine Vielzahl von Fehlern auftreten. Die meisten Netzwerkfehler führen zu E_HC_NO_NETWORK (0x89235006)
.
Zusätzlich zum HRESULT gibt der PlayFab-Dienst manchmal eine errorDetails-Zeichenfolge zurück. Diese Zeichenfolge wird nicht für Endclients verfügbar gemacht, kann aber während der Entwicklung und beim Debuggen nützlich sein. Informationen zum Aktivieren der ausführlichen Ablaufverfolgung, um die zurückgegebene errorDetails-Zeichenfolge anzuzeigen, finden Sie im Leitfaden zur Ablaufverfolgung.".
[Fehlerbehandlung im Microsoft Game Development Kit] [/gaming/gdk/_content/gc/system/overviews/error-handling]