Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Genel Bakış
PlayReady Test Sunucusu, çeşitli sunucu özel durumlarını program aracılığıyla tetikleyen özel işlevler içerir. Bu özellik, istemci geliştiricilerin cihazlarının ve uygulamalarının üretim ortamlarında lisans alma sırasında oluşabilecek farklı hata koşullarına nasıl yanıt verdiğini test etmesine olanak tanır.
Sunucu Özel Durum Testi
İstemci geliştiriciler, uygulamalarında hata işlemeyi doğrulamak için bu sunucu özel durum komutlarını kullanabilir. Buna cihaz iptali, iç sunucu hataları, protokol uyuşmazlıkları ve etki alanıyla ilgili özel durumlar gibi test senaryoları dahildir.
İşlem Örneği
Sunucu özel durumlarının nasıl çalıştığını gösteren bir örnek aşağıda verilmiştir:
İstek URL'si:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c065)
Sunucu Yanıtı:
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>
Özel Durum Parametreleri
Genel Özel Durum Parametresi
| Parametre | Açıklama | Örnek URL |
|---|---|---|
errorcode:XXXXXXXX |
Sunucudan belirli bir özel durumla yanıt vermesini isteme | http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0xXXXXXXXX) |
Cihaz ve İstemci Özel Durumları
Cihaz Sertifikası İptal Edilmiş
| Parametre | İstisna | Açıklama |
|---|---|---|
errorcode:8004C065 |
DRM_E_DEVCERT_REVOKED |
Sunucu, iptal edilmiş bir istemci cihazına lisans teslim edemiyor |
Örnek:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c065)
Kullanım: İstemcinin cihaz iptal senaryolarını nasıl işlediğini test edin.
Sunucu İç Özel Durumları
İç Sunucu Hatası
| Parametre | İstisna | Açıklama |
|---|---|---|
errorcode:8004C600 |
DRM_E_SERVER_INTERNAL_ERROR |
Sunucu bir iç sunucu özel durumu oluşturur |
Örnek:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c600)
Kullanım: İstemci dayanıklılığını sunucu tarafı iç hatalarına karşı test edin.
Geçersiz İleti
| Parametre | İstisna | Açıklama |
|---|---|---|
errorcode:8004C601 |
DRM_E_SERVER_INVALID_MESSAGE |
Sunucuya gönderilen istek geçersiz |
Örnek:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c601)
Kullanım: Hatalı biçimlendirilmiş istek yanıtlarının istemci işlemesini test edin.
Protokol Sürümü Uyuşmazlığı
| Parametre | İstisna | Açıklama |
|---|---|---|
errorcode:8004C60B |
DRM_E_SERVER_PROTOCOL_VERSION_MISMATCH |
İstekte belirtilen protokol sürümü sunucu tarafından desteklenmiyor |
Örnek:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c60b)
Kullanım: Desteklenmeyen protokol sürümleriyle istemci davranışını test edin.
Hizmete Özgü Özel Durum
| Parametre | İstisna | Açıklama |
|---|---|---|
errorcode:8004C604 |
DRM_E_SERVER_SERVICE_SPECIFIC |
Sunucu hizmete özgü bir özel durum oluşturur (genellikle lisans işleyicisinden) |
Örnek:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c604)
Kullanım: Hizmete özgü hataların istemci işlemesini test edin.
Protokol ve Yeniden Yönlendirme Özel Durumları
Protokol Yeniden Yönlendirme
| Parametre | İstisna | Açıklama |
|---|---|---|
errorcode:8004C60D |
DRM_E_SERVER_PROTOCOL_REDIRECT |
Protokolün yeniden yönlendirmesi var |
Örnek:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c60d)
Kullanım: Sunucu yeniden yönlendirmelerinin istemci işlemesini test edin.
Domain-Related Özel Durumları
Etki Alanı Gerekli
| Parametre | İstisna | Açıklama |
|---|---|---|
errorcode:8004C605 |
DRM_E_SERVER_DOMAIN_REQUIRED |
Sunucu istemciden standart bir lisans isteği aldı ve etki alanına bağlı bir lisans almak için istemcinin etki alanına katılmasını gerektiriyor |
Örnek:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c605)
Kullanım: Etki alanına katılma senaryolarını ve istemci etki alanı tanımayı test edin.
Etki Alanını Yenile
| Parametre | İstisna | Açıklama |
|---|---|---|
errorcode:8004C606 |
DRM_E_SERVER_RENEW_DOMAIN |
Sunucu, eski bir etki alanı sürümü de dahil olmak üzere bir etki alanı sertifikasına sahip istemciden bir istek aldı. İstemcinin etki alanı sertifikasını güncelleştirmesini gerektirir |
Örnek:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c606)
Kullanım: Etki alanı sertifikası yenileme işlemlerini test edin.
Cihaz Sınırına Ulaşıldı
| Parametre | İstisna | Açıklama |
|---|---|---|
errorcode:8004C602 |
DRM_E_SERVER_DEVICE_LIMIT_REACHED |
Sunucu bir etki alanı hesabına istemci eklemeye istekliydi, ancak hesap zaten cihaz sayısı sınırına ulaştı |
Örnek:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c602)
Kullanım: Etki alanı cihaz sınırlarının istemci işlemesini test edin.
Etki Alanı Üyesi Değil
| Parametre | İstisna | Açıklama |
|---|---|---|
errorcode:8004C60A |
DRM_E_SERVER_NOT_A_MEMBER |
Sunucu istemciden geçerli bir etki alanına bağlı lisans isteği aldı, ancak istemci daha önce hizmet tarafından etki alanından kaldırılmıştı |
Örnek:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c60a)
Kullanım: Etki alanından kaldırıldığında istemci davranışını test edin.
Bilinmeyen Hesap Kimliği
| Parametre | İstisna | Açıklama |
|---|---|---|
errorcode:8004C60C |
DRM_E_SERVER_UNKNOWN_ACCOUNTID |
Sunucu belirli bir hesap kimliği için istemciden etki alanına bağlı lisans isteği aldı, ancak bu kimlik hizmet tarafından bilinmiyor |
Örnek:
http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(errorcode:0x8004c60c)
Kullanım: Bilinmeyen etki alanı hesabı senaryolarının istemci işlemesini test edin.
Test Senaryoları
Temel Özel Durum Testi
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;
}
Etki Alanı Özel Durum Testi
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;
}
İstemci Sağlamlığı Testi
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
}))
};
}
İstemci Uygulama Yönergeleri
Özel Durum İşleme en iyi yöntemleri
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# Özel Durum İşleme
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;
}
}
Doğrulama ve Test Etme
Beklenen Davranışlar
Sunucu özel durumlarıyla test ederken, istemcinizin şunları doğrulayın:
- Özel Durumları Düzgün Ayrıştırıyor - Hata kodlarını ve iletileri doğru ayıklar
- Düzgün bir şekilde işler - Kilitlenmez veya özel durumlarda yanıt vermez
- Kullanıcı Geri Bildirimi sağlar - Kullanıcılara uygun hata iletilerini gösterir
- Yeniden Deneme Mantığını Uygular - Geri alma ile uygun hataları yeniden dener
- Etki Alanı İşlemlerini Destekler - Etki alanıyla ilgili özel durumları doğru işler
Test Doğrulama Denetim Listesi
- [ ] İstemci özel durum türlerini doğru şekilde tanımlar
- [ ] Uygun kullanıcı iletileri görüntüleniyor
- [ ] İstemci hiçbir özel durum türünde kilitlenmez
- [ ] Yeniden deneme mantığı kurtarılabilir hatalar için çalışır
- [ ] Etki alanına katılma/yenileme işlemleri doğru tetikleniyor
- [ ] Cihaz iptali güvenli bir şekilde işlenir
- [ ] Performans, hata koşulları altında kabul edilebilir olmaya devam eder
En İyi Yöntemler
Müşteri Geliştirme
- Kapsamlı Hata İşleme - Belgelenen tüm özel durum türlerini işleme
- Kullanıcı Deneyimi - Net, eyleme dönüştürülebilir hata iletileri sağlayın
- Yeniden Deneme Stratejisi - Geçici hatalar için uygun yeniden deneme mantığını uygulama
- Güvenlik - Cihazın iptal edilmesinin içerik erişimini engellediğinden emin olun
- Test - Geliştirme sırasında tüm özel durum senaryolarını test etme
Hata Kurtarma
- Düzgün Performans Düşüşü - Mümkün olduğunda işleme devam et
- İletişimi Temizle - Sorunları ve çözümleri kullanıcılara bildirme
- Otomatik Kurtarma - Uygun yerlerde otomatik çözümlemeyi deneme
- Geri Dönüş Seçenekleri - Alternatif içerik veya hizmetler sağlama
- Günlüğe kaydetme - Hata ayıklama ve analiz için günlük özel durumları
İlgili Belgeler
- PlayReady Test Sunucusu Hizmeti - Ana test sunucusu işlevselliği
- Sorgu Dizesi Sözdizimi - Parametre söz dizimi başvurusu
- Çıkış Korumalarını Test Etme - Çıkış koruma testi
- PlayReady Test Sunucuları - Eksiksiz sunucu belgeleri
Destek Kaynakları
İş Sorguları
- E-posta: playready@microsoft.com
İşlem Sorguları
- Web sitesi: http://wmlalicensing.com/
- E-posta: ipla@microsoft.com
Teknik Destek
- Destek Portalı: PlayReady Teknik Desteği
Eğitim Bilgileri
- E-posta: plyrdyev@microsoft.com
© Microsoft Corporation. Tüm hakları saklıdır. Ticari markalarıdır | Gizlilik