Configuration de la licence

Où Doconut recherche votre fichier de licence sous IIS

Sans licence, Doconut rend toujours les documents — chaque page porte simplement un filigrane d'évaluation. Cette page décrit les quatre manières de fournir une licence dans Global.asax, où Doconut recherche lorsqu'aucune n'est fournie, et ce qui se passe lorsqu'une licence de plugin est manquante.

Quatre façons de fournir une licence

Il existe trois sources explicites dans DoconutOptions — un chemin de fichier, un flux ou du contenu brut — plus la découverte automatique lorsqu'aucune n'est définie. Toutes sont lues une fois, dans DoconutHost.Initialize. Lorsque plusieurs sont définies, la priorité est précise :

LicenseStream l'emporte sur LicenseContent l'emporte sur LicensePath l'emporte sur la découverte automatique.

Par chemin

Attribuez à LicensePath un chemin complet. Un chemin relatif est résolu par rapport au répertoire courant du processus, et sous IIS il s'agit du dossier du processus de travail, pas de votre site. HostingEnvironment.MapPath transforme un chemin relatif au site en chemin complet :

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});

Si le fichier n'existe pas, Doconut ne lève pas d'exception et ne revient pas à la découverte automatique : aucune licence n'est chargée, et le visualiseur ajoute un filigrane. Les fichiers de licence par plugin dans le même dossier (Doconut.Viewer.<Capability>.lic) sont lus avec celui‑ci, de sorte que LicensePath et AddPlugin<...>() fonctionnent ensemble lorsque les licences des plugins se trouvent à côté de la licence de base.

Par flux

LicenseStream est lu une fois, au démarrage — utile lorsque la licence provient d'une ressource incorporée ou d'un magasin secret plutôt que d'un fichier sur disque.

csharp
// Precedence: LicenseStream > LicenseContent > LicensePath > auto-search.
Doconut.DoconutHost.Initialize(options =>
{
    options.LicenseStream = licenseStream;
});

Par contenu

LicenseContent prend le texte de la licence lui‑même — provenant d'une variable d'environnement, d'une base de données ou d'un magasin secret — ainsi aucun fichier de licence n'a besoin d'être déployé avec le site.

csharp
// 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") ?? "";
});

Découverte automatique

Ne définissez aucune des trois, et Doconut recherche lui‑même la licence :

csharp
// 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();

Les deux dossiers, dans l'ordre, et les fichiers recherchés :

text
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.lic

Sous IIS et IIS Express, AppContext.BaseDirectory est le dossier racine du site — celui qui contient Web.config — et non son dossier bin. Ainsi la licence doit se trouver dans wwwroot à la racine du site :

text
MySite\
  Web.config
  Global.asax
  bin\
  wwwroot\
    Doconut.Viewer.lic
    Doconut.Viewer.Converter.lic

Dans le projet, conservez les fichiers wwwroot\*.lic à côté de Web.config et déployez le dossier avec le site. Aucune étape de construction n'a besoin de le copier ailleurs. Un .lic ailleurs — dans bin\, à côté de Web.config, ou dans un sous‑dossier de wwwroot — n'est jamais lu.

Conservez les fichiers .lic hors du contrôle de version. Déployez‑les à côté du site, ou fournissez la licence via LicenseContent ou LicenseStream depuis votre magasin secret.

Ce qui se passe sans licence

Une licence manquante ne génère pas d'exception. DoconutHost.Initialize réussit, le site démarre, et le visualiseur fonctionne, mais chaque page porte un filigrane d'évaluation et aucune capacité optionnelle n'est accordée.

Un fichier de licence trouvé mais rejeté est différent. Une signature invalide, une falsification ou une construction en dehors de la période de validité de la licence provoque le lancement d'une LicenseException par OpenDocumentAsync avec la raison.

Les plugins ont besoin de leur licence au démarrage

L'enregistrement d'un plugin dont la capacité n'est accordée par aucune licence arrête l'application au démarrage. DoconutHost.Initialize lève une exception dans Application_Start :

text
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.

Sous System.Web, vous ne voyez pas ce message dans le navigateur. Chaque requête au site renvoie un 500 vide — aucune page d'erreur, aucune trace de pile, rien dans le journal IIS. L'exception n'est enregistrée que dans le journal des événements Windows (journal Application, source ASP.NET). Si l'ensemble du site cesse de répondre immédiatement après avoir ajouté une ligne AddPlugin, vérifiez les fichiers de licence dans wwwroot avant le code : le Doconut.Viewer.<Capability>.lic du plugin doit se trouver à côté de Doconut.Viewer.lic, et sans la licence de base les fichiers du plugin ne sont pas lus du tout.

Vérifier la licence chargée

IDoconutLicenseService est la même source de vérité que le SDK utilise. Résolvez‑le depuis DoconutHost.Services pour exposer un point de terminaison de diagnostic authentifié ou piloter des indicateurs de fonctionnalité — ne jamais renvoyer le contenu de la licence :

csharp
// 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 licence est lue une fois, dans DoconutHost.Initialize. Après avoir remplacé un fichier de licence, recyclez le pool d'applications (ou modifiez Web.config) afin que Application_Start s'exécute à nouveau.

Dépannage

SymptômeCause probableVérification
Le visualiseur fonctionne mais chaque page est filigranéeAucune licence n'a été trouvéeLe fichier .lic se trouve-t-il dans <site root>\wwwroot ? Appelez le point de terminaison d'état ci‑dessus
Chaque requête renvoie un 500 vide juste après l'ajout d'un pluginUn plugin enregistré n'a aucune licence qui le couvreJournal des événements Windows, source ASP.NET ; le .lic du plugin à côté de Doconut.Viewer.lic
LicensePath fonctionne sur votre machine mais pas sur le serveurUn chemin relatif résolu par rapport au dossier du processus de travailConstruisez‑le avec HostingEnvironment.MapPath("~/wwwroot/...")
Un fichier .lic remplacé n'a aucun effetLa licence a été lue au démarrage de l'applicationRecyclez le pool d'applications
OpenDocumentAsync lève LicenseExceptionLa licence a été trouvée mais rejetéeLisez le message d'exception ; ne le montrez pas aux clients non fiables

Prochaines étapes

  • Gestion des licences — capacités, et comment les vérifier à l'exécution.
  • Dépannage — filigranes, échecs au démarrage, et autres symptômes.

Cette page était-elle utile ?