Configuración de Licencia
Dónde Doconut busca su archivo de licencia bajo IIS
Sin una licencia, Doconut aún renderiza documentos — cada página solo lleva una marca de agua de evaluación. Esta página cubre las cuatro formas de proporcionar una licencia en Global.asax, dónde Doconut busca cuando no se proporciona ninguna, y qué ocurre cuando falta la licencia de un complemento.
Cuatro formas de proporcionar una licencia
Hay tres fuentes explícitas en DoconutOptions — una ruta de archivo, un flujo o contenido bruto — más el descubrimiento automático cuando ninguna está configurada. Todas se leen una sola vez, en DoconutHost.Initialize. Cuando se establecen más de una, la precedencia es exacta:
LicenseStream supera a LicenseContent supera a LicensePath supera al descubrimiento automático.
Por ruta
Proporcione a LicensePath una ruta completa. Una ruta relativa se resuelve contra el directorio actual del proceso, y bajo IIS eso es la carpeta del propio proceso de trabajo, no su sitio. HostingEnvironment.MapPath convierte una ruta relativa al sitio en una ruta completa:
Doconut.DoconutHost.Initialize(options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});Si el archivo no existe, Doconut no lanza una excepción y no recurre al descubrimiento automático: no carga ninguna licencia y el visor muestra marcas de agua. Los archivos de licencia por complemento en la misma carpeta (Doconut.Viewer.<Capability>.lic) se leen con ella, por lo que LicensePath y AddPlugin<...>() funcionan juntos cuando las licencias de los complementos están junto a la licencia base.
Por flujo
LicenseStream se lee una sola vez, al iniciar — útil cuando la licencia proviene de un recurso incrustado o de un almacén secreto en lugar de un archivo en disco.
// Precedence: LicenseStream > LicenseContent > LicensePath > auto-search.
Doconut.DoconutHost.Initialize(options =>
{
options.LicenseStream = licenseStream;
});Por contenido
LicenseContent toma el texto de la licencia mismo — de una variable de entorno, una base de datos o un almacén secreto — por lo que no es necesario desplegar un archivo de licencia con el sitio.
// License XML from a database, an environment variable or a secret store -
// no file on disk. Beaten only by LicenseStream.
Doconut.DoconutHost.Initialize(options =>
{
options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});Descubrimiento automático
Si no se establece ninguno de los tres, Doconut busca la licencia por sí mismo:
// Configure nothing, and Doconut searches for the license itself, in this order:
// 1. {CurrentDirectory}\wwwroot
// 2. {AppContext.BaseDirectory}\wwwroot (under IIS: the site's root folder)
// It looks for Doconut.lic first, then Doconut.Viewer.lic, plus any per-plugin
// Doconut.Viewer.<Capability>.lic files alongside it.
Doconut.DoconutHost.Initialize();Las dos carpetas, en orden, y los archivos buscados:
1. {CurrentDirectory}\wwwroot
2. {AppContext.BaseDirectory}\wwwroot
In each folder:
Doconut.lic — if found, this is the only file read
Doconut.Viewer.lic — base viewer license
Doconut.Viewer.<Capability>.lic — per-plugin licenses, read only next to Doconut.Viewer.licBajo IIS e IIS Express, AppContext.BaseDirectory es la carpeta raíz del sitio — la que contiene Web.config — no su carpeta bin. Por lo tanto, la licencia debe estar en wwwroot bajo la raíz del sitio:
MySite\
Web.config
Global.asax
bin\
wwwroot\
Doconut.Viewer.lic
Doconut.Viewer.Converter.licEn el proyecto, mantenga wwwroot\*.lic junto a Web.config y despliegue la carpeta con el sitio. No es necesario que ningún paso de compilación lo copie a ningún lugar. Un .lic en cualquier otro sitio — en bin\, junto a Web.config, o en una subcarpeta de wwwroot — nunca se lee.
Mantenga los archivos
.licfuera del control de versiones. Desplieguelos junto al sitio, o proporcione la licencia a través deLicenseContentoLicenseStreamdesde su almacén secreto.
Qué ocurre sin una licencia
Una licencia ausente no genera una excepción. DoconutHost.Initialize tiene éxito, el sitio se inicia y el visor funciona, pero cada página lleva una marca de agua de evaluación y no se concede ninguna capacidad opcional.
Un archivo de licencia que se encuentra pero es rechazado es diferente. Una firma inválida, manipulación, o una compilación fuera del rango de versiones de la licencia hacen que OpenDocumentAsync lance LicenseException con la razón.
Los complementos necesitan su licencia al iniciar
Registrar un complemento cuya capacidad no es concedida por ninguna licencia detiene la aplicación al iniciar. DoconutHost.Initialize lanza una excepción en Application_Start:
InvalidOperationException: The Converter plugin is registered via AddPlugin but no active
license grants Converter. Remove the AddPlugin<...>() call or install a license (or
trial/demo) that includes Converter.Bajo System.Web, no ve ese mensaje en el navegador. Cada solicitud al sitio responde con un 500 vacío — sin página de error, sin traza de pila, nada en el registro de IIS. La excepción se registra solo en el registro de eventos de Windows (registro de Aplicación, origen ASP.NET). Si todo el sitio deja de responder justo después de agregar una línea AddPlugin, verifique los archivos de licencia en wwwroot antes del código: el Doconut.Viewer.<Capability>.lic del complemento debe estar junto a Doconut.Viewer.lic, y sin la licencia base los archivos del complemento no se leen en absoluto.
Verificar la licencia cargada
IDoconutLicenseService es la misma fuente de verdad que usa el SDK. Resuélvalo desde DoconutHost.Services para exponer un endpoint de diagnóstico autenticado o controlar banderas de características — nunca devuelva el contenido de la licencia:
// GET /License/Status
public ActionResult Status()
{
var license = Doconut.DoconutHost.Services.GetRequiredService<IDoconutLicenseService>();
return Json(new
{
viewer = license.IsViewerLicensed || license.IsTemporary,
temporary = license.IsTemporary,
search = license.IsCapabilityGranted(LicenseCapability.Search),
annotation = license.IsCapabilityGranted(LicenseCapability.Annotation),
converter = license.HasConverter,
dicom = license.HasDicom
}, JsonRequestBehavior.AllowGet);
}La licencia se lee una sola vez, en DoconutHost.Initialize. Después de reemplazar un archivo de licencia, recicle el grupo de aplicaciones (o modifique Web.config) para que Application_Start se ejecute nuevamente.
Solución de problemas
| Síntoma | Causa probable | Verificar |
|---|---|---|
| El visor funciona pero cada página tiene marca de agua | No se encontró ninguna licencia | ¿Está el .lic en <site root>\wwwroot? Llame al endpoint de estado anterior |
Cada solicitud responde con un 500 vacío justo después de agregar un complemento | Un complemento registrado no tiene licencia que lo conceda | Registro de eventos de Windows, origen ASP.NET; el .lic del complemento junto a Doconut.Viewer.lic |
LicensePath funciona en su máquina pero no en el servidor | Una ruta relativa se resuelve contra la carpeta del proceso de trabajo | Constrúyalo con HostingEnvironment.MapPath("~/wwwroot/...") |
Un archivo .lic reemplazado no tiene efecto | La licencia se leyó cuando la aplicación se inició | Recicle el grupo de aplicaciones |
OpenDocumentAsync lanza LicenseException | La licencia se encontró pero fue rechazada | Lea el mensaje de la excepción; no lo muestre a clientes no confiables |
Próximos pasos
- Licencias — capacidades, y cómo verificarlas en tiempo de ejecución.
- Solución de problemas — marcas de agua, fallos al iniciar, y otros síntomas.
¿Fue útil esta página?