Практическое руководство. Лицензирование компонентов и элементов управления
Обновлен: Ноябрь 2007
Платформа .NET Framework предлагает модель лицензирования, одинаковую для всех компонентов и элементов управления (включая элементы управления Windows Forms и серверные элементы управления ASP.NET) и полностью совместимую с моделью лицензирования элементов управления Microsoft ActiveX®.
С помощью лицензирования авторы компонентов или элементов управления могут защитить свою интеллектуальную собственность путем проверки, имеет ли разработчик право использовать данный компонент или элемент управления. Эту проверку важнее выполнять во время разработки, когда разработчик встраивает компонент или элемент управления в приложение, чем во время выполнения. Если разработчик законно использует лицензированный компонент или элемент управления во время разработки, приложение разработчика получает лицензию на выполнение, которая может свободно распространяться.
В данной модели лицензирования предусмотрено много других уровней поддержки лицензирования. В этой модели логика проверки отделена от компонента или элемента управления. Поставщик лицензии предоставляет лицензии и реализует логику проверки. Поставщик представляет собой класс, который является производным от класса System.ComponentModel.LicenseProvider. Для включения лицензирования необходимо выполнить несколько простых шагов.
Если используется реализация класса LicenseProvider по умолчанию, предоставленная поставщиком LicFileLicenseProvider, файл лицензии форматируется следующим образом:
Имя файла должно быть полным именем класса, включающим пространство имен. Расширение этого файла должно быть LIC. Пример:
Namespace1.Class1.LIC
В файле лицензии должна содержаться следующая текстовая строка:
"myClassName является лицензированным компонентом".
myClassName — это полное имя класса. Пример:
"Namespace1.Class1 является лицензированным компонентом".
В следующем примере кода показана реализация простого случая лицензирования для элемента управления Windows Forms и серверного элемента управления ASP.NET.
Чтобы включить лицензирование для компонента или элемента управления, выполните следующие действия.
Примените атрибут LicenseProviderAttribute к классу.
Вызовите метод Dispose для каждой выданной лицензии в методе завершения класса или до вызова метода завершения.
В следующих примерах кода используется встроенный класс поставщика лицензий LicFileLicenseProvider, позволяющий использовать текстовые файлы лицензий подобно механизму лицензирования COM (ActiveX). В более сложных сценариях лицензирования (например, при вызове веб-службы XML для ограничения числа экземпляров компонента) требуются другие типы поставщиков лицензий.
Пример
Imports System
Imports System.ComponentModel
Imports System.Windows.Forms
' Adds the LicenseProviderAttribute to the control.
<LicenseProvider(GetType(LicFileLicenseProvider))> _
Public Class MyControl
Inherits Control
' Creates a new, null license.
Private license As License = Nothing
Public Sub New()
' Adds Validate to the control's constructor.
license = LicenseManager.Validate(GetType(MyControl), Me)
' Insert code to perform other instance creation tasks here.
End Sub
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If (license IsNot Nothing) Then
license.Dispose()
license = Nothing
End If
End If
End Sub
End Class
using System;
using System.ComponentModel;
using System.Windows.Forms;
// Adds the LicenseProviderAttribute to the control.
[LicenseProvider(typeof(LicFileLicenseProvider))]
public class MyControl : Control
{
// Creates a new, null license.
private License license = null;
public MyControl ()
{
// Adds Validate to the control's constructor.
license = LicenseManager.Validate(typeof(MyControl), this);
// Insert code to perform other instance creation tasks here.
}
protected override void Dispose(bool disposing)
{
if(disposing)
{
if (license != null)
{
license.Dispose();
license = null;
}
}
}
}
// Adds the LicenseProviderAttribute to the control.
[LicenseProvider(LicFileLicenseProvider::typeid)]
public ref class MyControl: public Control
{
// Creates a new, null license.
private:
License^ license;
public:
MyControl()
{
// Adds Validate to the control's constructor.
license = LicenseManager::Validate( MyControl::typeid, this );
// Insert code to perform other instance creation tasks here.
}
public:
~MyControl()
{
if ( license != nullptr )
{
delete license;
license = nullptr;
}
}
};
import System.*;
import System.ComponentModel.*;
import System.Windows.Forms.*;
// Adds the LicenseProviderAttribute to the control.
/** @attribute LicenseProvider(LicFileLicenseProvider.class)
*/
public class MyControl extends Control
{
// Creates a new, null license.
private License license = null;
public MyControl()
{
// Adds Validate to the control's constructor.
license = LicenseManager.Validate(MyControl.class.ToType(), this);
// Insert code to perform other instance creation tasks here.
}
protected void Dispose(boolean disposing)
{
if (disposing) {
if (license != null) {
license.Dispose();
license = null;
}
}
}
}
Imports System
Imports System.ComponentModel
Imports System.Web.UI
' Adds the LicenseProviderAttribute to the control.
<LicenseProvider(GetType(LicFileLicenseProvider))> Public Class MyControl
Inherits Control
' Creates a new, null license.
Private license As License
Public Sub New()
' Adds Validate to the control's constructor.
license = LicenseManager.Validate(GetType(MyControl), Me)
' Insert code to perform other instance creation tasks here.
End Sub
Public Overrides Sub Dispose()
If (license IsNot Nothing) Then
license.Dispose()
license = Nothing
End If
MyBase.Dispose()
End Sub
End Class
using System;
using System.ComponentModel;
using System.Web.UI;
// Adds the LicenseProviderAttribute to the control.
public class MyServerControl : Control
{
// Creates a new, null license.
private License license = null;
public MyServerControl()
{
// Adds Validate to the control's constructor.
license = LicenseManager.Validate(typeof(MyServerControl), this);
// Insert code to perform other instance creation tasks here.
}
public override void Dispose()
{
if (license != null)
{
license.Dispose();
license = null;
}
base.Dispose();
}
}
import System.*;
import System.ComponentModel.*;
import System.Web.UI.*;
// Adds the LicenseProviderAttribute to the control.
/** @attribute LicenseProvider(LicFileLicenseProvider.class)
*/
public class MyControl extends Control
{
// Creates a new, null license.
private License license = null;
public MyControl()
{
// Adds Validate to the control's constructor.
license = LicenseManager.Validate(MyControl.class.ToType(), this);
// Insert code to perform other instance creation tasks here.
}
protected void Dispose(boolean disposing)
{
if (license != null)
{
license.Dispose();
license = null;
}
super.Dispose();
}
}