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 :
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.
// 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.
// 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 :
// 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 :
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.licSous 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 :
MySite\
Web.config
Global.asax
bin\
wwwroot\
Doconut.Viewer.lic
Doconut.Viewer.Converter.licDans 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
.lichors du contrôle de version. Déployez‑les à côté du site, ou fournissez la licence viaLicenseContentouLicenseStreamdepuis 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 :
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 :
// 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ôme | Cause probable | Vérification |
|---|---|---|
| Le visualiseur fonctionne mais chaque page est filigranée | Aucune licence n'a été trouvée | Le 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 plugin | Un plugin enregistré n'a aucune licence qui le couvre | Journal 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 serveur | Un chemin relatif résolu par rapport au dossier du processus de travail | Construisez‑le avec HostingEnvironment.MapPath("~/wwwroot/...") |
Un fichier .lic remplacé n'a aucun effet | La licence a été lue au démarrage de l'application | Recyclez le pool d'applications |
OpenDocumentAsync lève LicenseException | La licence a été trouvée mais rejetée | Lisez 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 ?