Licencias de componentes y controles
.NET Framework dispone de un modelo de licencias que es idéntico para todos los componentes (incluidos los controles de formularios Windows Forms y los controles de servidor de ASP.NET) y es completamente compatible con las licencias de los controles Microsoft ActiveX®.
Las licencias permiten a los creadores de controles proteger la propiedad intelectual; para ello, se comprueba si el usuario está autorizado a utilizar el control. Esta comprobación es más importante en tiempo de diseño, cuando el control se incorpora a una aplicación, que en tiempo de ejecución. Cuando un control con licencia se utiliza de forma válida en tiempo de diseño (y no se puede utilizar de otra manera), la aplicación obtiene una licencia en tiempo de ejecución que se puede distribuir libremente.
El modelo de licencias también admite otros niveles de licencias; para ello, separa la lógica de validación del componente o control. Un proveedor de licencias realiza la concesión de licencias y la lógica de validación, que es una clase que deriva de System.ComponentModel.LicenseProvider. Los pasos que el autor de un componente debe realizar para habilitar las licencias son sencillos.
Para habilitar las licencias para su componente
- Aplique un atributo LicenseProviderAttribute a la clase.
- Llame a LicenseManager.Validate o LicenseManager.IsValid en el constructor.
- Llame al método Dispose de cualquiera de las licencias concedidas en el finalizador de la clase o antes de llamar al finalizador.
En el siguiente ejemplo se muestra un control de formularios Windows Forms que implementa un caso sencillo de licencias.
using System;
using System.ComponentModel;
using System.Windows.Forms;
public class MyControl : Control {
private License license = null;
public MyControl () {
license = LicenseManager.Validate(typeof(MyControl), this);
}
protected override void Dispose(bool disposing) {
if (disposing) {
if (license != null) {
license.Dispose();
license = null;
}
}
base.Dispose(disposing);
}
~MyControl() {
Dispose();
}
}
[Visual Basic]
Imports System
Imports System.ComponentModel
Imports System.Web.UI
<LicenseProvider(GetType(LicFileLicenseProvider))> Public Class MyControl
Inherits Control
Private license As License
Public Sub New()
license = LicenseManager.Validate(GetType(MyControl), Me)
End Sub
Public Overloads Overrides Sub Dispose()
If Not (license Is Nothing) Then
license.Dispose()
license = Nothing
End If
End Sub
End Class
En el siguiente ejemplo se muestra un control de servidor de ASP.NET que implementa un caso sencillo de licencias.
using System;
using System.ComponentModel;
using System.Web.UI;
public class MyControl : Control {
private License license = null;
public MyControl () {
license = LicenseManager.Validate(typeof(MyControl), this);
}
public override void Dispose() {
if (license != null) {
license.Dispose();
license = null;
}
base.Dispose();
}
}
[Visual Basic]
Imports System
Imports System.ComponentModel
Imports System.Web.UI
<LicenseProvider(GetType(LicFileLicenseProvider))> Public Class MyControl
Inherits Control
Private license As License
Public Sub New()
license = LicenseManager.Validate(GetType(MyControl), Me)
End Sub
Public Overrides Sub Dispose()
If Not (license Is Nothing) Then
license.Dispose()
license = Nothing
End If
End Sub
End Class
En estos ejemplos, se utiliza la clase de proveedor de licencias integrada LicFileLicenseProvider, que permite utilizar archivos de texto de licencia y simula el comportamiento de las licencias COM (ActiveX). Otros casos de licencias más complejos (como llamar a un servicio Web XML para limitar el número de instancias de un componente) requieren otros proveedores de licencias.
El tutorial de formularios Windows Forms incluye un ejemplo de licencias en Generar aplicaciones, Crear controles, Obtener licencia para controles.