在简装版本上就是如此),请调用 IsValid 方法。
将 System.ComponentModel.LicenseProviderAttribute 元数据属性应用于您的组件,并向它传递执行组件授权的许可提供程序(从 System.ComponentModel.LicenseProvider 派生的类)的类型。本文中 ASP.NET 服务器控件授权基础结构一节显示了 LicensedLabel 控件的许可提供程序 ServerLicenseProvider 的实现。
如图 1 所示,您为支持授权而必须对控件所做的更改是最小的。真正的授权功能在许可提供程序类中,稍后再说明这部分内容。
如果您已经在 Windows 窗体控件中实现了授权,您可能很惊奇地发现,LicensedLabel 不处置其许可。这是因为,LicensedLabel 使用一个在服务器上缓存许可的许可提供程序。
许可数据
许可数据提供由授权结构进行验证并合并到许可中的信息。您可以用许多不同的方式提供许可数据(如过期日期、使用计数或唯一密钥)。许可数据的类型和位置由特定的授权方案来指定。通常在扩展名为 .lic 的文件中提供许可数据。图 1 中的 LicensedLabel 控件的许可数据位于一个名为 LicensedControls.LicensedLabel.lic 的文件中,该文件只包含文本 "LicensedControls.LicensedLabel is licensed"。
在页面上使用已授权控件
随本文的代码示例提供的 ReadMe 文档描述了如何构建这些示例。
在页面中使用 LicensedLabel 控件
1.将 LicensedControls 程序集(包含 LicensedLabel 控件)复制到应用程序的 \Bin 目录。如果您使用的是 Microsoft Visual Studio? .NET 并在您的 Web 应用程序项目中添加了对 LicensedControls 项目的引用,则不需要此步骤。
2.将 LicensedControls.LicensedLabel.lic 文件复制到应用程序的 Licenses\LicensedControls\1.0.0.0 目录。
现在,您应该能从应用程序中的任何页面使用控件。
下面的代码显示了一个使用 LicensedLabel 控件的页面。
<%@ Page language="c#" %>
<%@ Register TagPrefix="lc" Assembly="LicensedControls"
Namespace="LicensedControls" %>
<html>
<head>
<title>LicensedLabel Sample</title>
</head>
<body>
<form method="post" runat="server" ID="Form1">
<p>
<lc:LicensedLabel runat="server" id="LicensedLabel1" Text="Hello
World!" />
</p>
</form>
</body>
</html>
要查看授权是否正在生效,请删除 LicensedControls.LicensedLabel.lic 文件或将它移到另一个位置。重新生成应用程序或做出某个可导致应用程序重新启动的更改。此步骤的作用是清除由 ServerLicenseProvider(LicensedLabel 控件的元数据中指定的许可提供程序)管理的许可缓存。在浏览器中请求 LicensedLabelTest.aspx 页。该页将生成下图中显示的错误。
图 1. LicensedLabelTest.aspx 页尝试在没有有效许可的情况下使用 LicensedLabel 时生成的错误
.NET 框架授权结构
下图(图 2)说明了 .NET 框架的授权结构。从中可以看出当一个页面尝试对前面一节描述的 LicensedLabel 控件进行实例化时发生的主要步骤。虽然实际步骤发生在服务器控件的上下文中,但该图显示了构成 .NET 框架授权结构的类,以及任何运行时授权方案所共有的关键步骤。许可提供程序执行的确切步骤是特定于提供程序实现的具体授权方案的。例如,正如本文中 ASP.NET 服务器控件授权基础结构一节所描述的,图中显示的许可缓存功能就是特定于 ServerLicenseProvider 的。以粗体显示的类是 .NET 框架类,以斜体显示的类是实现的派生类。
图 2. .NET 框架的授权结