Nastavení licence

Kde Doconut hledá váš licenční soubor pod IIS

Bez licence Doconut stále vykresluje dokumenty — každá stránka nese zkušební vodoznak. Tato stránka popisuje čtyři způsoby, jak dodat licenci v Global.asax, kde Doconut hledá, když žádnou neposkytnete, a co se stane, když chybí licence pluginu.

Čtyři způsoby, jak dodat licenci

Na DoconutOptions jsou tři explicitní zdroje — cesta k souboru, stream nebo surový obsah — plus automatické vyhledávání, když není žádný nastaven. Všechny jsou načteny jednou v DoconutHost.Initialize. Když je nastaveno více než jedno, platí přesná priorita:

LicenseStream beats LicenseContent beats LicensePath beats automatic discovery.

Podle cesty

Zadejte LicensePath úplnou cestu. Relativní cesta je rozlišena vůči aktuálnímu adresáři procesu a pod IIS je to složka pracovního procesu, nikoli vaše webová stránka. HostingEnvironment.MapPath převádí cestu relativní k webu na úplnou cestu:

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

Pokud soubor neexistuje, Doconut nevyhodí výjimku a nepřepne na automatické vyhledávání: nenačte žádnou licenci a viewer přidá vodoznak. Licenční soubory pro jednotlivé pluginy ve stejné složce (Doconut.Viewer.<Capability>.lic) jsou načteny spolu s ním, takže LicensePath a AddPlugin<...>() fungují společně, když licence pluginů leží vedle základní licence.

Pomocí streamu

LicenseStream je načten jednou při spuštění — užitečné, když licence pochází z vloženého zdroje nebo tajného úložiště místo souboru na disku.

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

Pomocí obsahu

LicenseContent obsahuje samotný text licence — z proměnné prostředí, databáze nebo tajného úložiště — takže není nutné nasazovat licenční soubor s webem.

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

Automatické vyhledávání

Nenastavíte žádný z těchto tří, a Doconut sám hledá licenci:

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

Tyto dva adresáře v pořadí a soubory, které jsou hledány:

V každé složce:

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

Pod IIS a IIS Express je AppContext.BaseDirectory kořenová složka webu — ta, která obsahuje Web.config — nikoli její složka bin. Proto licence patří do wwwroot pod kořenovou složkou webu:

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

V projektu udržujte wwwroot\*.lic vedle Web.config a nasazujte složku s webem. Není potřeba žádný krok sestavení, který by ji kopíroval. .lic kdekoliv jinde — v bin\, vedle Web.config nebo v podsložce wwwroot — se nikdy nečte.

Uchovávejte soubory .lic mimo správu verzí. Nasazujte je spolu s webem, nebo poskytněte licenci přes LicenseContent či LicenseStream z vašeho tajného úložiště.

Co se stane bez licence

Chybějící licence nevyvolá výjimku. DoconutHost.Initialize úspěšně proběhne, web se spustí a viewer běží, ale každá stránka nese zkušební vodoznak a žádná volitelná funkce není povolena.

Licenční soubor, který je nalezen, ale odmítnut, je jiný případ. Neplatný podpis, manipulace nebo sestavení mimo časové okno licence způsobí, že OpenDocumentAsync vyhodí LicenseException s důvodem.

Pluginy potřebují licenci při spuštění

Registrace pluginu, jehož funkci žádná licence nepovoluje, zastaví aplikaci při spuštění. DoconutHost.Initialize vyhodí výjimku v 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.

Pod System.Web nevidíte tuto zprávu v prohlížeči. Každý požadavek na web vrací prázdný 500 — žádná chybová stránka, žádný stack trace, nic v logu IIS. Výjimka je zaznamenána pouze v protokolu událostí Windows (Application log, zdroj ASP.NET). Pokud celý web přestane reagovat hned po přidání řádku AddPlugin, zkontrolujte licenční soubory v wwwroot před kódem: .lic pluginu Doconut.Viewer.<Capability>.lic musí ležet vedle Doconut.Viewer.lic, a bez základní licence se soubory pluginu vůbec nečtou.

Ověřte načtenou licenci

IDoconutLicenseService je stejný zdroj pravdy, který SDK používá. Získejte jej z DoconutHost.Services, abyste mohli vystavit autentizovaný diagnostický endpoint nebo řídit feature flagy — nikdy nevracejte obsah 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);
}

Licence je načtena jednou v DoconutHost.Initialize. Po výměně licenčního souboru zrecyklujte aplikační pool (nebo dotkněte se Web.config), aby se znovu spustil Application_Start.

Řešení problémů

PříznakPravděpodobná příčinaKontrola
Viewer funguje, ale každá stránka je vodoznakovánaNebyla nalezena žádná licenceJe soubor .lic v <site root>\wwwroot? Zavolejte výše uvedený stavový endpoint
Každý požadavek vrací prázdný 500 hned po přidání pluginuRegistrovaný plugin nemá licenci, která by mu umožnilaProtokol událostí Windows, zdroj ASP.NET; .lic pluginu vedle Doconut.Viewer.lic
LicensePath funguje na vašem počítači, ale ne na serveruRelativní cesta je rozlišena vůči složce pracovního procesuVytvořte ji pomocí HostingEnvironment.MapPath("~/wwwroot/...")
Vyměněný soubor .lic nemá žádný efektLicence byla načtena při spuštění aplikaceZrecyklujte aplikační pool
OpenDocumentAsync vyhazuje LicenseExceptionLicence byla nalezena, ale odmítnutaPřečtěte zprávu výjimky; neukazujte ji nedůvěryhodným klientům

Další kroky

Byla tato stránka užitečná?