急!高分求教。用ASP.NET和C#做过DRM的朋友请指点一下!

max007super 2008-12-09 03:03:40
小弟,下了一个DRM7.1版的SDK在VS2005下用C#建立了ASP.NET网页,想试验一下发布License所以将ASP的示例换成了ASP.NET的。
我引用了wmrmobjs.dll文件。
Default.aspx.cs页的代码如下:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
public string licresponse;
public string strLicenseRequested;
protected void Page_Load(object sender, EventArgs e)
{
Response.Buffer = true;
Response.Expires = 0;

string conpulicKey;
string seed;

conpulicKey = (String)Application["contentserverpubkey"];
seed = (String)Application["seed"];

string description;
Boolean silent;
string delivery_tag;

description = "";


silent = true;

if (Request.Form["nonsilent"] != "")
{
silent = false;
}

try
{
//创建客户端对象
WMRMOBJSLib.WMRMChallengeClass objChallenge = new WMRMOBJSLib.WMRMChallengeClass();

//获取客户端信息

strLicenseRequested = Request.Form.Get("challenge");

objChallenge.Challenge = strLicenseRequested;

string varClientInfo;
string varHeader;

//在Chanllenge对象中设置客户信息
varClientInfo = objChallenge.ClientInfo;
//设置在Chanllenge对象的头
varHeader = objChallenge.Header;

/*
*头对象
*/
WMRMOBJSLib.WMRMHeaderClass objHeader = new WMRMOBJSLib.WMRMHeaderClass();
string Kid;

//把header放入到Header对象中以获得key ID 信息
objHeader.Header = varHeader;

int blnResult;
blnResult = objHeader.Verify(conpulicKey);

//从Header对象中获取key ID
Kid = objHeader.KeyID;

string indiVersion;
indiVersion = "";
//indiVersion = objHeader.IndividualizedVersion;

/*
* Key 对象
*
*/
WMRMOBJSLib.WMRMKeysClass objKey = new WMRMOBJSLib.WMRMKeysClass();
string varKEY;

//
objKey.KeyID = Kid;
objKey.Seed = seed;

//
varKEY = objKey.GenerateKey();

/*
* 开始设置权限
*/
WMRMOBJSLib.WMRMRights objRights = new WMRMOBJSLib.WMRMRights();
string SetV2Rights;

objRights.MinimumAppSecurity = 500; //最小的安全级别 http://msdn.microsoft.com/en-us/library/ms986423.aspx
objRights.AllowPlayOnPC = 1; //表示允许在PC机上播放
objRights.AllowBackupRestore = 1; //这个表示不允许备份许可证
objRights.AllowBurnToCD = 0; //表示不允许烧录到CD上
objRights.AllowSaveStreamProtected = 0; //表示不允许把已打包的流保存到磁盘上
objRights.AllowTransferToSDMI = 1; //表示不允许把文件转移到非SDMI设备上
objRights.AllowTransferToNonSDMI = 0; //表示不允许把文件转移到非SDMI设备上
objRights.DisableOnClockRollback = 0; //当客户端机器时间更改到更早时间时,该证书失效
objRights.DeleteOnClockRollback = 0; //当客户端机器时间更改到更早时间时,该证书自动删除
objRights.Playcount = 2;
objRights.PMRights = 51;
objRights.PMAppSecurity = 150;

SetV2Rights = objRights.GetAllRights(); //获取所有权限设置



/*
* Generate a license with the License object
*/
WMRMOBJSLib.WMRMLicGenClass objLicense = new WMRMOBJSLib.WMRMLicGenClass();
string varLicense;

object varCategory = new object();
object varVersion = new object();

Response.Write("====");

objLicense.KeyID = Kid;
objLicense.SetKey("", varKEY);
objLicense.Priority = 10; //设置优先级别,默认为1

objLicense.set_Attribute("LIECENSESERVER", "<NAME>License Sever</NAME>");
objLicense.Rights = SetV2Rights; //设置证书的播放权限
objLicense.ClientInfo = varClientInfo; //设置关于客户端计算机信息
objLicense.IndividualizedVersion = indiVersion;
objLicense.GetClientVersion(ref varCategory, ref varVersion);
if (varCategory.ToString() != "0" && varCategory.ToString() != "1")//0:Default DRM component on Win32 platform,1:DRM component on Win32 platform with security upgrade
{
//return false;
}
objLicense.BindToPubKey = conpulicKey;
varLicense = objLicense.GetLicenseToDeliver();

delivery_tag = "deliver";
Response.Write("------");
/*
* Response Object
*/
WMRMOBJSLib.WMRMResponseClass responseObj = new WMRMOBJSLib.WMRMResponseClass();


responseObj.AddLicense("2.0.0.0", varLicense);

this.licresponse = responseObj.GetLicenseResponse();
Response.Write(licresponse);
}
catch (Exception ex)
{
Response.Write("\\n");
Response.Write(ex.Message);
}

}
}


我在一台电脑上运行该段代码,提示objChallenge.Challenge = strLicenseRequested;有错误。提示显示的是:“System.ArgumentException: 参数不正确。”,我实在迷惑了Challenge属性是string,而我给值也是string,怎么就参数不正确了呢。
我又将该段代码拷到另外一台电脑上去试了一下,这次又是WMRMOBJSLib.WMRMChallengeClass objChallenge = new WMRMOBJSLib.WMRMChallengeClass();这句错误。提示显示的是:“ System.Runtime.InteropServices.COMException: 检索 COM 类工厂中 CLSID 为 {76FB40C2-7B90-402A-867D-73747BF85F48} 的组件时失败,原因是出现以下错误: 80040154。”似乎问题又出在.net平台下C#调用wmrmobjs.dll有问题。

小弟实在不解,请各位哥哥们指点啊!
...全文
169 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiami_009 2011-01-03
  • 打赏
  • 举报
回复
DRM9的系统不能再使用了

最近,多个朋友告诉我,他们原来的DRM 9的SDK做的系统,在到期后,申请了新的证书后,却不能发放证书了。看来微软调整了策略,9的SDK似乎是不能正常使用了。DRM 9似乎不能发放许可了!

本人亲自验证了一下:在9的证书过期后,再去http://licenseserver.windowsmedia.com 上获取一下证书后,就发现不能发放许可了。在simple.asp中,提示异常:DRM CreateObject Error (C00000FD)。在这一句中:Server.CreateObject("Wmrmobjs.WMRMLicGen")

这些朋友,在更换安装了10的SDK后,好像就好了。

从这里我找到了答案:(原文见下面,大致翻译一下):

有人联系了微软,说原因是许可过期了。这个是SDK 9的一个bug,但是微软不打算去修正了。只有一个办法,更新到10的SDK。呵呵,所以,遇到这个问题的朋友,可以联系我们获取10的SDK。联系我们或者自己申请SDK,可以参考:http://hi.baidu.com/dlbtsoft/blog/item/980e532db9f1b5ea8b139977.html

http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.windowsmedia.drm&tid=a7b8448b-bf84-4075-b9a5-8cd9a04d46ca&cat=en_US_ac3ead62-a93e-4e9f-9d47-a46b7a36dba3&lang=en&cr=US&sloc=&p=1

I corresponded with a MSFT employee who said that the license is expired. We
are aware of this, as we have to renew the license each year!

The real kicker is that there is a bug in SDK 9. It is not going to be
fixed. This means if you are using v9 SDK, once your license expires, you are
required to move to v10, which requires an application/approval process
taking (at minimum) several days. There is no escalation path for this bug,
and no way to do anything but upgrade to v10.

In short, "Yes, our update broke your license server. No, we don't have any
plans to resolve it, and if you want to get it working again, well, your ONLY
option is to upgrade." And that will take (according to MSFT) several days to
several weeks.

I hope that this helps anyone else experiencing the same issue! Enjoy being
SOL until such time as your application is approved.
木木仄仄 2009-04-21
  • 打赏
  • 举报
回复
我在执行以下两句的时候抛异常,请问楼主这是什么原因啊?
objLicense.SetKey("", varKEY);
objLicense.set_Attribute("LIECENSESERVER", "<NAME>License Sever</NAME>");

这两句是什么意义啊?那个LIECENSESERVER是怎么指定的?

谢谢!
max007super 2008-12-10
  • 打赏
  • 举报
回复
已经解决!
max007super 2008-12-09
  • 打赏
  • 举报
回复
怎么没人回答呢?自己顶一下。
wanghao3616 2008-12-09
  • 打赏
  • 举报
回复
学习
hawaiiboys 2008-12-09
  • 打赏
  • 举报
回复
帮顶下
chagel 2008-12-09
  • 打赏
  • 举报
回复
up

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧