询问者
使用DRM做发布License的网页时,为什么会授权两次数量???

常规讨论
-
我用DRM10.1.1版的SDK在VS2005下用C#建立了ASP.NET网页,想试验一下发布License所以将ASP的示例换成了ASP.NET的。 我引用了wmrmobjs.dll文件, 但是授权的时候,授权数量却下发了两次,这是什么原因?如果把播放器的自动获取受保护内容的许可证勾掉,就会授权一次,至今没搞明白怎么回事?但是DRM自带的ASP例子没有这个问题,肯定是我程序的BUG,请大家指点一下,谢谢.
打开播放器(Windows Media Player)-->工具-->选项-->隐私-->自动获取受保护内容的许可证,如果选择,会授权两次数量。
using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using DRMREHEADERLib;
using ENROLLOBJLib;
using LICENSESERVERLib;
using WMRMOBJSLib;
using SENTINELKEYSCOMLib;
public partial class _Default : System.Web.UI.Page
{
//定义全局的客户端许可证证书
public string sLicResponse;
protected void Page_Load(object sender, EventArgs e)
{
Boolean silent;
silent = true;if (Request.Form["nonsilent"] != "")
{
silent = false;
}
try
{
Response.BufferOutput = true;
Response.Expires = 0;//声明变量和对象
String contentowner_publickey = (String)Application["contentserverpubkey"]; //公钥
String key;//MovieInfo info = null;
//创建对象
WMRMChallenge challenge = new WMRMChallengeClass(); //请求处理许可对象(WMRMChallenge)
WMRMHeader header = new WMRMHeaderClass(); //管理加密文件头的对象(WMRMHeader)
WMRMKeys keysObj = new WMRMKeysClass(); //管理密钥和种子的一个对象(WMRMKeys)
WMRMRights rightsObj = new WMRMRightsClass(); //指定加密视频内容的使用权限(WMRMRights)
WMRMLicGen licGen = new WMRMLicGenClass(); //创建并签名一个许可(WMRMLicGen)
WMRMResponse responseObj = new WMRMResponseClass(); //将许可递交给客户端(WMRMResponseClass)// We load the encrypted challenge information
//获取客户端的证书请求信息,将证书请求信息存入 WMRMChallenge 对象
challenge.Challenge = Request.Form.Get("challenge");//从challenge中获取文件头信息,将 header 信息存入 WMRMHeader 对象
header.Header = challenge.Header;
keysObj.KeyID = header.KeyID;
keysObj.Seed = (String)Application["seed"];
key = keysObj.GenerateKey();//设置所颁发证书中包含的权限
/*-----------------------------------------开始设置权限------------------------------------------*/
rightsObj.MinimumSecurityLevel = 1000; //最小的安全级别
rightsObj.AllowPlay = true;//允许播放视频
//rightsObj.ExpirationOnStore = 1; //指定用户的许可证保存时间
//rightsObj.Playcount = 1; //每播放一次弹出许可证对话框
rightsObj.BeginDate = mBeginDate;//许可证起始时间
rightsObj.ExpirationDate = mExpirationDate;//许可证失效时间
rightsObj.AllowCopy = false;//表示不允许复制文件
rightsObj.AllowCollaborativePlay = false;
rightsObj.AllowBackupRestore = 1;//这个不允许备份许可证
rightsObj.AllowPlayOnPC = 1;//表示允许在PC机上播放
rightsObj.AllowBurnToCD = 0;//表示不允许烧录到CD上
rightsObj.AllowTransferToNonSDMI = 0;//表示不允许把文件转移到非SDMI设备上
rightsObj.AllowTransferToSDMI = 0;//表示不允许把文件转移到SDMI设备上
rightsObj.DisableOnClockRollback = 0;//当客户端机器时间更改到更早时间时,该证书失效;
rightsObj.DeleteOnClockRollback = 0;//当客户端机器时间更改到更早时间时,该证书自动删除;
rightsObj.PMRights = 51;
rightsObj.PMAppSecurity = 150;//获取头对象中的 key ID ,并存入证书中。
licGen.KeyID = keysObj.KeyID;
licGen.SetKey("", key);
licGen.Priority = 10;//获取定义权限的字符串,并且设置证书中的权限
licGen.Rights = rightsObj.GetAllRights();//在证书中设置证书服务器的名字
licGen.set_Attribute("Copyright", "(c) 2009 China");
licGen.set_Attribute("ContentType", "Video");
licGen.set_Attribute("Author", "LiuWei");
licGen.set_Attribute("ArtistURL", "http://localhost/");
licGen.set_Attribute("Title", "Test");//从 challenge 中获取客户端信息
licGen.ClientInfo = challenge.ClientInfo;//调用BindToPubKey属性为客户端发送用于验证证书的公钥
//当证书中包含一个公钥时,客户端计算机上的 Windows Media Rights Manager
//将用之验证证书有效性。公钥包含在 Windows Media License Service 颁发给证书颁发服务器的证书中
licGen.BindToPubKey = contentowner_publickey;//创建证书
String license = licGen.GetLicenseToDeliver();responseObj.AddLicense("2.0.0.0", license);
responseObj.ReplaceQuotesWith = "\"";
//获取响应中存储的证书字符串
sLicResponse = responseObj.GetLicenseResponse();
}
catch (Exception ex)
{
Response.Write("\\n"); Response.Write(ex.Message);
}
}
}- 已更改类型 孟宪会Moderator 2011年8月29日 9:03