Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Áttekintés
A PlayReady tesztkiszolgáló speciális funkciókat tartalmaz a különböző kiszolgálói kivételek programozott aktiválásához. Ez a képesség lehetővé teszi az ügyfélfejlesztők számára, hogy teszteljék, hogyan reagálnak eszközeik és alkalmazásaik különböző hibafeltételekre, amelyek az éles környezetekben történő licencvásárlás során fordulhatnak elő.
Kiszolgálói kivétel tesztelése
Az ügyfélfejlesztők ezen kiszolgálókivételi parancsokkal ellenőrizhetik a hibakezelést a megvalósításokban. Ez magában foglalja a tesztelési forgatókönyveket, például az eszköz visszavonását, a belső kiszolgáló hibáit, a protokolleltéréseket és a tartományhoz kapcsolódó kivételeket.
Példa tranzakcióra
Íme egy példa a kiszolgálói kivételek működésére:
Kérelem URL-címe:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c065)
Kiszolgáló válasza:
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>
Kivételparaméterek
Általános kivételparaméter
| Paraméter | Leírás | Példa URL-címe |
|---|---|---|
errorcode:XXXXXXXX |
A kiszolgáló kérése adott kivétellel való válaszadásra | http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0xXXXXXXXX) |
Eszköz- és ügyfél-kivételek
Eszköztanúsítvány visszavonva
| Paraméter | Kivétel | Leírás |
|---|---|---|
errorcode:8004C065 |
DRM_E_DEVCERT_REVOKED |
A kiszolgáló nem tud licencet kézbesíteni egy visszavont ügyféleszközre |
példa:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c065)
Használat: Annak tesztelése, hogy az ügyfél hogyan kezeli az eszköz-visszavonási forgatókönyveket.
Belső kiszolgálói kivételek
Belső kiszolgálóhiba
| Paraméter | Kivétel | Leírás |
|---|---|---|
errorcode:8004C600 |
DRM_E_SERVER_INTERNAL_ERROR |
A kiszolgáló belső kiszolgálói kivételt jelez |
példa:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c600)
Használat: Az ügyfél rugalmasságának tesztelése kiszolgálóoldali belső hibák esetén.
Érvénytelen üzenet
| Paraméter | Kivétel | Leírás |
|---|---|---|
errorcode:8004C601 |
DRM_E_SERVER_INVALID_MESSAGE |
A kiszolgálónak küldött kérés érvénytelen volt |
példa:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c601)
Használat: Hibásan formázott kérésválaszok ügyfélkezelésének tesztelése.
Protokollverzió eltérése
| Paraméter | Kivétel | Leírás |
|---|---|---|
errorcode:8004C60B |
DRM_E_SERVER_PROTOCOL_VERSION_MISMATCH |
A kérésben megadott protokollverziót a kiszolgáló nem támogatja |
példa:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c60b)
Használat: Az ügyfél viselkedésének tesztelése nem támogatott protokollverziókkal.
Szolgáltatásspecifikus kivétel
| Paraméter | Kivétel | Leírás |
|---|---|---|
errorcode:8004C604 |
DRM_E_SERVER_SERVICE_SPECIFIC |
A kiszolgáló szolgáltatásspecifikus kivételt (általában a licenckezelőtől) ad ki. |
példa:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c604)
Használat: Szolgáltatásspecifikus hibák ügyfélkezelésének tesztelése.
Protokoll- és átirányítási kivételek
Protokoll átirányítása
| Paraméter | Kivétel | Leírás |
|---|---|---|
errorcode:8004C60D |
DRM_E_SERVER_PROTOCOL_REDIRECT |
A protokoll átirányítással rendelkezik |
példa:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c60d)
Használat: Kiszolgálóátirányítások ügyfélkezelésének tesztelése.
Domain-Related kivételek
Tartomány szükséges
| Paraméter | Kivétel | Leírás |
|---|---|---|
errorcode:8004C605 |
DRM_E_SERVER_DOMAIN_REQUIRED |
A kiszolgáló szabványos licenckérelmet kapott az ügyféltől, és megköveteli, hogy az ügyfél tartományhoz csatlakozzon, hogy tartományhoz kötött licencet kapjon |
példa:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c605)
Használat: Tesztelje a tartománycsatlakozás forgatókönyveit és az ügyféltartomány-tudatosságot.
Tartomány megújítása
| Paraméter | Kivétel | Leírás |
|---|---|---|
errorcode:8004C606 |
DRM_E_SERVER_RENEW_DOMAIN |
A kiszolgáló egy tartománytanúsítvánnyal rendelkező ügyféltől kapott kérést, beleértve egy elavult tartományverziót is. Az ügyfélnek frissítenie kell a tartománytanúsítványát |
példa:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c606)
Használat: Tartománytanúsítvány-megújítási folyamatok tesztelése.
Elérte az eszközkorlátot
| Paraméter | Kivétel | Leírás |
|---|---|---|
errorcode:8004C602 |
DRM_E_SERVER_DEVICE_LIMIT_REACHED |
A kiszolgáló hajlandó volt ügyfelet hozzáadni egy tartományi fiókhoz, de a fiók már elérte az eszközök számának korlátját |
példa:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c602)
Használat: A tartományeszköz korlátainak ügyfélkezelésének tesztelése.
Nem tartományi tag
| Paraméter | Kivétel | Leírás |
|---|---|---|
errorcode:8004C60A |
DRM_E_SERVER_NOT_A_MEMBER |
A kiszolgáló érvényes tartományhoz kötött licenckérelmet kapott az ügyféltől, de az ügyfelet korábban a szolgáltatás eltávolította a tartományból |
példa:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c60a)
Használat: Az ügyfél viselkedésének tesztelése a tartományból való eltávolításkor.
Ismeretlen fiókazonosító
| Paraméter | Kivétel | Leírás |
|---|---|---|
errorcode:8004C60C |
DRM_E_SERVER_UNKNOWN_ACCOUNTID |
A kiszolgáló tartományhoz kötött licenckérelmet kapott az ügyféltől egy adott fiókazonosítóhoz, de ez az azonosító ismeretlen a szolgáltatás számára |
példa:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c60c)
Használat: Ismeretlen tartományi fiókok ügyfélkezelésének tesztelése.
Tesztelési forgatókönyvek
Alapszintű kivételtesztelés
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;
}
Tartománykivétel tesztelése
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;
}
Ügyfél robusztussági tesztelése
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
}))
};
}
Ügyfél-megvalósítási irányelvek
A kivételkezelés ajánlott eljárásai
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# kivételkezelés
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;
}
}
Ellenőrzés és tesztelés
Várt viselkedések
Kiszolgálói kivételekkel végzett teszteléskor ellenőrizze, hogy az ügyfél:
- Kivételek helyes elemzése – Hibakódok és üzenetek helyes kinyerése
- Kezeli a kecsesen – Nem összeomlik vagy nem lóg kivételekkel
- Felhasználói visszajelzést ad – Megfelelő hibaüzeneteket jelenít meg a felhasználóknak
- Újrapróbálkozási logika implementálása – A megfelelő hibák újrapróbálkozása visszalépéssel
- Támogatja a tartományműveleteket – Helyesen kezeli a tartományhoz kapcsolódó kivételeket
Ellenőrzési ellenőrzőlista tesztelése
- [ ] Az ügyfél helyesen azonosítja a kivételtípusokat
- [ ] Megfelelő felhasználói üzenetek jelennek meg
- [ ] Az ügyfél nem összeomlik kivételtípuson
- [ ] Az újrapróbálkozás logikája helyreállítható hibák esetén működik
- [ ] A tartománybekötési/megújítási folyamatok megfelelően aktiválódnak
- [ ] Az eszköz visszavonása biztonságosan történik
- [ ] A teljesítmény hibafeltételek mellett is elfogadható marad
Ajánlott eljárások
Ügyfélfejlesztés
- Átfogó hibakezelés – Az összes dokumentált kivételtípus kezelése
- Felhasználói élmény – Világos, végrehajtható hibaüzenetek megadása
- Újrapróbálkozási stratégia – Megfelelő újrapróbálkozási logika implementálása átmeneti hibákhoz
- Biztonság – Győződjön meg arról, hogy az eszköz visszavonása megakadályozza a tartalomhozzáférést
- Tesztelés – Az összes kivételforgatókönyv tesztelése a fejlesztés során
Hiba helyreállítása
- Kecses lebomlás – Ha lehetséges, folytassa a műveletet
- Kommunikáció törlése – A felhasználók tájékoztatása a problémákról és a megoldásokról
- Automatikus helyreállítás – Szükség esetén automatikus feloldás megkísérlése
- Tartalék beállítások – Alternatív tartalom vagy szolgáltatások biztosítása
- Naplózás – Naplózási kivételek hibakereséshez és elemzéshez
Kapcsolódó dokumentáció
- PlayReady Test Server Service – Fő tesztkiszolgálói funkciók
- Lekérdezési sztring szintaxisa – Paraméterszintaxis-referencia
- Kimeneti védelem tesztelése – Kimeneti védelem tesztelése
- PlayReady-tesztkiszolgálók – A kiszolgáló dokumentációja
Támogatási erőforrások
Üzleti lekérdezések
- E-mail:playready@microsoft.com
Műveleti lekérdezések
- Webhely: http://wmlalicensing.com/
- E-mail:ipla@microsoft.com
Technikai támogatás
- Támogatási portál: A PlayReady technikai támogatása
Képzési információk
- E-mail:plyrdyev@microsoft.com
© Microsoft Corporation. Minden jog fenntartva. Védjegyek | Magánélet