Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Überblick
Der PlayReady Test Server enthält spezielle Funktionen, um verschiedene Serverausnahmen programmgesteuert auszulösen. Mit dieser Funktion können Cliententwickler testen, wie ihre Geräte und Anwendungen auf verschiedene Fehlerbedingungen reagieren, die während der Lizenzübernahme in Produktionsumgebungen auftreten können.
Server-Ausnahmetests
Cliententwickler können diese Server-Ausnahmebefehle verwenden, um die Fehlerbehandlung in ihren Implementierungen zu überprüfen. Dies umfasst Testszenarien wie Gerätesperrung, interne Serverfehler, Protokollkonflikte und domänenbezogene Ausnahmen.
Transaktionsbeispiel
Hier ist ein Beispiel für die Funktionsweise von Server exceptions:
Anforderungs-URL:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c065)
Serverantwort:
HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Length: 764
Content-Type: text/xml; charset=utf-8
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>
System.Web.Services.Protocols.SoapException: Device Certificate Revoked.
at Microsoft.Media.Drm.RightsManager.ConvertRmServerException(RMServerException ex)
at Microsoft.Media.Drm.RightsManager.AcquireLicense(XmlDocument challenge)
</faultstring>
<faultactor>http://prtsprod-rightsmanager.azurewebsites.net/rightsmanager.asmx?cfg=(errorcode:0x8004c065)</faultactor>
<detail>
<Exception>
<StatusCode>0x8004c065</StatusCode>
</Exception>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
Ausnahmeparameter
Generischer Ausnahmeparameter
| Parameter | BESCHREIBUNG | Beispiel-URL |
|---|---|---|
errorcode:XXXXXXXX |
Anfordern des Servers, mit einer bestimmten Ausnahme zu antworten | http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0xXXXXXXXX) |
Geräte- und Client-Ausnahmen
Gerätezertifikat widerrufen
| Parameter | Ausnahme | BESCHREIBUNG |
|---|---|---|
errorcode:8004C065 |
DRM_E_DEVCERT_REVOKED |
Server kann keine Lizenz an ein widerrufenes Clientgerät übermitteln |
Beispiel:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c065)
Verwendung: Testen Sie, wie der Client Gerätesperrszenarien verarbeitet.
Interne Server-Ausnahmen
Interner Serverfehler
| Parameter | Ausnahme | BESCHREIBUNG |
|---|---|---|
errorcode:8004C600 |
DRM_E_SERVER_INTERNAL_ERROR |
Server löst eine interne Server-Ausnahme aus. |
Beispiel:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c600)
Verwendung: Testen der Clientresilienz gegenüber serverseitigen internen Fehlern.
Ungültige Nachricht
| Parameter | Ausnahme | BESCHREIBUNG |
|---|---|---|
errorcode:8004C601 |
DRM_E_SERVER_INVALID_MESSAGE |
Die an den Server gesendete Anforderung war ungültig. |
Beispiel:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c601)
Verwendung: Testen der Clientbehandlung von falsch formatierten Anforderungsantworten.
Protokollversionskonflikt
| Parameter | Ausnahme | BESCHREIBUNG |
|---|---|---|
errorcode:8004C60B |
DRM_E_SERVER_PROTOCOL_VERSION_MISMATCH |
Die in der Anforderung angegebene Protokollversion wurde vom Server nicht unterstützt. |
Beispiel:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c60b)
Verwendung: Testen des Clientverhaltens mit nicht unterstützten Protokollversionen.
Dienstspezifische Ausnahme
| Parameter | Ausnahme | BESCHREIBUNG |
|---|---|---|
errorcode:8004C604 |
DRM_E_SERVER_SERVICE_SPECIFIC |
Der Server löst eine dienstspezifische Ausnahme (in der Regel aus dem Lizenzhandler) aus. |
Beispiel:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c604)
Verwendung: Testen sie die Clientbehandlung dienstspezifischer Fehler.
Protokoll- und Umleitungs ausnahmen
Protokollumleitung
| Parameter | Ausnahme | BESCHREIBUNG |
|---|---|---|
errorcode:8004C60D |
DRM_E_SERVER_PROTOCOL_REDIRECT |
Das Protokoll verfügt über eine Umleitung |
Beispiel:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c60d)
Verwendung: Testen der Clientverarbeitung von Serverumleitungen.
Domain-Related Ausnahmen
Domäne erforderlich
| Parameter | Ausnahme | BESCHREIBUNG |
|---|---|---|
errorcode:8004C605 |
DRM_E_SERVER_DOMAIN_REQUIRED |
Der Server hat eine Standardlizenzanforderung vom Client erhalten und erfordert, dass der Client einer Domäne beitritt, um eine domänengebundene Lizenz zu erhalten. |
Beispiel:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c605)
Verwendung: Testen Der Domänenbeitritt von Szenarien und Clientdomänenbewusstsein.
Domäne verlängern
| Parameter | Ausnahme | BESCHREIBUNG |
|---|---|---|
errorcode:8004C606 |
DRM_E_SERVER_RENEW_DOMAIN |
Der Server hat eine Anforderung vom Client mit einem Domänenzertifikat erhalten, einschließlich einer veralteten Domänenversion. Erfordert, dass der Client sein Domänenzertifikat aktualisiert. |
Beispiel:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c606)
Verwendung: Testen von Zertifikaterneuerungsprozessen für Domänen.
Gerätelimit erreicht
| Parameter | Ausnahme | BESCHREIBUNG |
|---|---|---|
errorcode:8004C602 |
DRM_E_SERVER_DEVICE_LIMIT_REACHED |
Server war bereit, client zu einem Domänenkonto hinzuzufügen, aber das Konto hat bereits das Limit der Anzahl der Geräte erreicht. |
Beispiel:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c602)
Verwendung: Testen der Clientverarbeitung von Domänengerätebeschränkungen.
Kein Domänenmitglied
| Parameter | Ausnahme | BESCHREIBUNG |
|---|---|---|
errorcode:8004C60A |
DRM_E_SERVER_NOT_A_MEMBER |
Der Server hat eine gültige domänengebundene Lizenzanforderung vom Client erhalten, der Client wurde jedoch zuvor von der Domäne nach Dienst entfernt. |
Beispiel:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c60a)
Verwendung: Testen sie das Clientverhalten, wenn sie aus der Domäne entfernt werden.
Unbekannte Konto-ID
| Parameter | Ausnahme | BESCHREIBUNG |
|---|---|---|
errorcode:8004C60C |
DRM_E_SERVER_UNKNOWN_ACCOUNTID |
Der Server hat eine domänengebundene Lizenzanforderung vom Client für eine bestimmte Konto-ID erhalten, diese ID ist jedoch für den Dienst unbekannt. |
Beispiel:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c60c)
Verwendung: Testen sie die Clientbehandlung unbekannter Domänenkontoszenarien.
Testszenarien
Grundlegende Ausnahmetests
async function testServerExceptions() {
const exceptions = [
{ name: 'Device Revoked', code: '0x8004c065' },
{ name: 'Internal Error', code: '0x8004c600' },
{ name: 'Invalid Message', code: '0x8004c601' },
{ name: 'Protocol Mismatch', code: '0x8004c60b' }
];
const results = [];
for (const exception of exceptions) {
try {
const url = `http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:${exception.code})`;
const response = await testLicenseAcquisition(url);
results.push({
test: exception.name,
result: 'UNEXPECTED_SUCCESS',
error: 'Expected exception but got success'
});
} catch (error) {
results.push({
test: exception.name,
result: 'EXPECTED_EXCEPTION',
errorCode: error.statusCode,
message: error.message
});
}
}
return results;
}
Domänen exception testing
async function testDomainExceptions() {
const domainExceptions = [
{ name: 'Domain Required', code: '0x8004c605' },
{ name: 'Renew Domain', code: '0x8004c606' },
{ name: 'Device Limit Reached', code: '0x8004c602' },
{ name: 'Not a Member', code: '0x8004c60a' },
{ name: 'Unknown Account', code: '0x8004c60c' }
];
const results = [];
for (const exception of domainExceptions) {
try {
const url = `http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:${exception.code})`;
await testLicenseAcquisition(url);
results.push({
test: exception.name,
result: 'FAIL',
reason: 'Expected domain exception but got success'
});
} catch (error) {
results.push({
test: exception.name,
result: 'PASS',
exceptionType: exception.name,
statusCode: error.statusCode
});
}
}
return results;
}
Testen der Client-Robustität
async function testClientRobustness() {
// Test how client handles rapid exception scenarios
const rapidTests = [
'0x8004c065', // Device revoked
'0x8004c600', // Internal error
'0x8004c601', // Invalid message
'0x8004c60b' // Protocol mismatch
];
const startTime = Date.now();
const promises = rapidTests.map(code => {
const url = `http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:${code})`;
return testLicenseAcquisitionWithTimeout(url, 5000);
});
const results = await Promise.allSettled(promises);
const endTime = Date.now();
return {
totalTime: endTime - startTime,
results: results.map((result, index) => ({
errorCode: rapidTests[index],
status: result.status,
handled: result.status === 'rejected' // We expect rejections
}))
};
}
Richtlinien für die Clientimplementierung
Bewährte Methoden für die Ausnahmebehandlung
class PlayReadyExceptionHandler {
handleLicenseAcquisitionError(error) {
switch (error.statusCode) {
case 0x8004C065: // Device revoked
return this.handleDeviceRevoked();
case 0x8004C600: // Internal server error
return this.handleServerError(error);
case 0x8004C601: // Invalid message
return this.handleInvalidMessage(error);
case 0x8004C60B: // Protocol version mismatch
return this.handleProtocolMismatch(error);
case 0x8004C605: // Domain required
return this.handleDomainRequired(error);
case 0x8004C606: // Renew domain
return this.handleDomainRenewal(error);
default:
return this.handleUnknownError(error);
}
}
handleDeviceRevoked() {
// Device is revoked - cannot proceed
throw new Error('Device has been revoked and cannot play protected content');
}
handleServerError(error) {
// Retry with exponential backoff
return this.retryWithBackoff(error.originalRequest);
}
handleDomainRequired(error) {
// Initiate domain joining process
return this.joinDomain(error.domainServiceUrl);
}
handleDomainRenewal(error) {
// Renew domain certificate
return this.renewDomainCertificate(error.domainServiceUrl);
}
}
C#-Ausnahmebehandlung
public class PlayReadyExceptionHandler
{
public async Task<bool> HandleLicenseException(Exception ex)
{
if (ex is SoapException soapEx)
{
var statusCode = ExtractStatusCode(soapEx);
switch (statusCode)
{
case 0x8004C065: // Device revoked
return HandleDeviceRevoked();
case 0x8004C600: // Internal server error
return await HandleServerError(soapEx);
case 0x8004C605: // Domain required
return await HandleDomainRequired(soapEx);
case 0x8004C606: // Renew domain
return await HandleDomainRenewal(soapEx);
default:
return HandleUnknownError(soapEx);
}
}
return false;
}
private uint ExtractStatusCode(SoapException soapEx)
{
// Extract status code from SOAP fault detail
var detail = soapEx.Detail;
var statusNode = detail?.SelectSingleNode("//StatusCode");
if (statusNode != null && uint.TryParse(statusNode.InnerText.Replace("0x", ""),
NumberStyles.HexNumber, null, out uint statusCode))
{
return statusCode;
}
return 0;
}
}
Validierung und Tests
Erwartete Verhaltensweisen
Überprüfen Sie beim Testen mit Server exceptions, dass Ihr Client:
- Ordnungsgemäß analysiert Ausnahmen - Richtig extrahiert Fehlercodes und Meldungen
- Behandelt ordnungsgemäß – stürzt nicht ab oder hängt bei Ausnahmen nicht ab.
- Stellt Benutzerfeedback bereit – Zeigt den Benutzern entsprechende Fehlermeldungen an.
- Implementiert Wiederholungslogik – Wiederholte Fehler mit Backoff
- Unterstützt Domänenvorgänge – Behandelt domänenbezogene Ausnahmen ordnungsgemäß
Prüfliste zur Testüberprüfung
- [ ] Client identifiziert Ausnahmetypen ordnungsgemäß
- [ ] Entsprechende Benutzernachrichten werden angezeigt
- [ ] Client stürzt bei keinem Ausnahmetyp ab
- [ ] Wiederholungslogik funktioniert für wiederherstellbare Fehler
- [ ] Domänenbeitritts-/Verlängerungsprozesse werden ordnungsgemäß ausgelöst
- [ ] Die Gerätesperrung wird sicher behandelt.
- [ ] Die Leistung bleibt unter Fehlerbedingungen akzeptabel.
Bewährte Methoden
Cliententwicklung
- Umfassende Fehlerbehandlung – Behandeln aller dokumentierten Ausnahmetypen
- Benutzererfahrung – Bereitstellen klarer, umsetzbarer Fehlermeldungen
- Wiederholungsstrategie – Implementieren der geeigneten Wiederholungslogik für vorübergehende Fehler
- Sicherheit – Sicherstellen, dass die Gerätesperrung den Zugriff auf Inhalte verhindert
- Testen – Testen aller Ausnahmeszenarien während der Entwicklung
Fehlerwiederherstellung
- Graceful Degradation - Fortsetzen des Vorgangs nach Möglichkeit
- Klare Kommunikation – Informieren der Benutzer über Probleme und Lösungen
- Automatische Wiederherstellung – Versuchen Sie bei Bedarf die automatische Auflösung.
- Fallbackoptionen – Bereitstellen alternativer Inhalte oder Dienste
- Protokollierung – Protokollieren von Ausnahmen für Debugging und Analysen
Verwandte Dokumentation
- PlayReady Test Server Service – Hauptfunktionen des Testservers
- Abfragezeichenfolgensyntax – Parametersyntaxreferenz
- Testen von Ausgabeschutz – Ausgabeschutztests
- PlayReady-Testserver – Vollständige Serverdokumentation
Supportressourcen
Geschäftsabfragen
- E-Mail: playready@microsoft.com
Operations-Abfragen
- Website:http://wmlalicensing.com/
- E-Mail: ipla@microsoft.com
Technischer Support
- Supportportal: Technischer Support für PlayReady
Schulungsinformationen
- E-Mail: plyrdyev@microsoft.com
© Microsoft Corporation. Alle Rechte vorbehalten. Handelsmarken | Privatsphäre