Nastavení licence

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

Bez licence Doconut stále vykresluje dokumenty — každá stránka jen nese vodotisk hodnocení. Tato stránka popisuje čtyři způsoby, jak dodat licenci, a přesné pořadí, když je nastaveno více než jedno.

Licence se načte jednou, během AddDoconut(). To je změna oproti předchozí knihovně .NET Standard, kde byla licence předána instanci Viewer nebo nastavena pomocí statických volání Viewer.DoconutLicense(...) / Viewer.SetLicensePlugin(...). Tyto metody nejsou spouštěcím mechanismem v tomto vydání — viz průvodce migrací.

Čtyři způsoby, jak dodat licenci

Existují čtyři: tři explicitní zdroje na DoconutOptions — proud, surový obsah nebo cesta k souboru — a automatické vyhledávání, když není žádný z nich nastaven. Když je nastaveno více než jedno, pořadí je přesné:

LicenseStream má přednost před LicenseContent má přednost před LicensePath má přednost před automatickým vyhledáváním.

Podle cesty

LicensePath je předáno File.Exists přesně tak, jak je. Relativní cesta se vyhodnocuje vůči aktuálnímu pracovnímu adresáři procesu — ne k vašemu projektovému adresáři a ne k adresáři, ve kterém žije Program.cs. Pokud cesta není vyřešena, Doconut nevyhodí výjimku a ne přejde na automatické vyhledávání — jednoduše nenačte žádnou licenci a prohlížeč přidá vodotisk. Automatické vyhledávání běží jen když není nastaveno žádné z LicensePath, LicenseContent nebo LicenseStream. Licenční soubory pro jednotlivé pluginy ve stejném adresáři (Doconut.Viewer.<Capability>.lic) jsou s ním načteny, takže LicensePath a AddPlugin<...>() spolupracují, když jsou pluginové licence vedle základní licence.

Upřednostněte absolutní cestu (například vytvořenou z IWebHostEnvironment.WebRootPath nebo AppContext.BaseDirectory), nebo úplně vynechte LicensePath a spolehněte se na automatické vyhledávání níže.

csharp
builder.Services.AddDoconut(options =>
{
    options.LicensePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
});

Pomocí proudu

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

csharp
// Priorita: LicenseStream > LicenseContent > LicensePath > automatické vyhledávání.
builder.Services.AddDoconut(options =>
{
    options.LicenseStream = licenseStream;
});

Pomocí obsahu

LicenseContent přijímá samotný text licence — z proměnné prostředí, databáze nebo tajného správce:

csharp
// License XML z databáze, proměnné prostředí nebo správce tajemství —
// žádný soubor na disku. Převýšen pouze LicenseStream.
builder.Services.AddDoconut(options =>
{
    options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});

Automatické vyhledávání

Nenastavte žádný ze tří explicitních zdrojů a Doconut sám vyhledá licenci:

csharp
// Není potřeba žádná konfigurace a Doconut hledá licenci sám, pouze v těchto dvou složkách:
//   1. {CurrentDirectory}/wwwroot
//   2. {AppContext.BaseDirectory}/wwwroot   (wwwroot uvnitř složky výstupu sestavení)
// Nejprve hledá Doconut.lic, poté Doconut.Viewer.lic, plus jakékoli soubory podle schopnosti
// soubory Doconut.Viewer.<Capability>.lic vedle něj.
builder.Services.AddDoconut();

Prohledávané složky v pořadí a názvy souborů, které se v nich hledají:

text
1. {CurrentDirectory}/wwwroot
2. {AppContext.BaseDirectory}/wwwroot

Filenames (checked in each folder above, in order):
  Doconut.lic                          — base viewer license (checked first)
  Doconut.Viewer.lic                   — base viewer license
  Doconut.Viewer.<Capability>.lic      — per-capability license, alongside the base license

Nic mimo složku wwwroot není čteno: .lic ve výstupní složce samotné nebo v wwwroot/lib je ignorováno.

Pokud jste dříve předali List<string> cest k licencím do konstruktoru Viewer — jeden na schopnost — ponechte tyto doprovodné soubory vedle Doconut.Viewer.lic a nechte automatické vyhledávání, aby je zachytil. Na DoconutOptions neexistuje možnost seznamu cest.

Zkopírujte licenci do výstupní složky

Když proces neběží ze složky projektu — publikovaná aplikace, IIS, kontejner, testovací běh — první pokus selže a druhý, {AppContext.BaseDirectory}/wwwroot, musí soubor najít. Testovací aplikace SDK sama kopíruje licence tam při každém sestavení pomocí tohoto MSBuild cíle:

xml
<Target Name="CopyLicensesToOutput" AfterTargets="Build">
  <ItemGroup>
    <DoconutLicenseFiles Include="$(MSBuildProjectDirectory)\wwwroot\*.lic" />
    <StaleOutputLicenses Include="$(OutDir)wwwroot\*.lic" />
  </ItemGroup>
  <!-- Nejprve odstraňte, aby přejmenování nebo odstranění souboru .lic ve wwwroot také odstranilo jej z výstupu. -->
  <Delete Files="@(StaleOutputLicenses)" />
  <Copy SourceFiles="@(DoconutLicenseFiles)" DestinationFolder="$(OutDir)wwwroot" />
</Target>

Cílové umístění musí být $(OutDir)wwwroot: .lic zkopírovaný do kořene výstupu není nikdy nalezen automatickým vyhledáváním. Příklady LicensePath na této stránce ukazují na stejné místo.

Uchovávejte soubory .lic mimo správu verzí — nasazujte je vedle aplikace nebo vložte licenci pomocí LicenseContent nebo LicenseStream z vašeho tajného úložiště.

Co se stane bez licence

Chybějící licence nevyvolá výjimku. AddDoconut() uspěje, aplikace se spustí a prohlížeč běží — ale každá stránka nese vodoznak hodnocení a žádná volitelná funkce není povolena.

Licenční soubor, který je nalezen, ale odmítnut, je jiný. Neplatný podpis, manipulace, zařazení na černou listinu nebo sestavení mimo časové okno licence způsobí, že OpenDocumentAsync vyhodí LicenseException s License.RejectionMessage. Licence, jejíž kalendářová platnost vypršela a nemá zprávu o odmítnutí, pokračuje v režimu s vodoznakem.

Pluginy potřebují oprávnění

Registrace pluginu bez odpovídajícího oprávnění je jiná: při chybějící licenci, starém souboru TRIAL nebo placené licenci bez této funkce AddDoconut() vyhodí InvalidOperationException, takže se aplikace nespustí. Například registrace pluginu Converter bez licence, která poskytuje Converter:

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.

Zpráva vám přímo říká, jak opravit problém: buď odeberete volání options.AddPlugin<...>() pro tento plugin, nebo nainstalujete placenou licenci či aktivní dočasnou/Demo (NFR) licenci, která poskytuje tuto funkci. Dočasné registrace mohou přežít datum vypršení, takže již nakonfigurovaná aplikace může během běhu degradovat místo toho, aby se při restartu zhroutila; po vypršení jsou jejich funkce stále odvolány.

Ověřte načtenou licenci

Použijte IDoconutLicenseService, stejný zdroj pravdy používaný SDK, k vystavení autentizovaného diagnostického koncového bodu nebo k řízení příznaků funkcí. Neukazujte obsah licence ani klíče.

csharp
app.MapGet("/api/doconut/license", (IDoconutLicenseService license) => Results.Ok(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
}));

Licence je načtena během registrace AddDoconut(). ResetLicense je momentálně kompatibilní vlastnost bez aktivní cesty pro opětovné načtení, takže výměna licenčního souboru vyžaduje restart aplikace.

Mřížka řešení problémů

PříznakPravděpodobná příčinaKontrola
Prohlížeč funguje, ale každá stránka má vodoznakNebyla načtena žádná licence nebo licence vypršela kalendářověVyřešte IDoconutLicenseService; ověřte výstupní adresář a pracovní adresář procesu
AddDoconut() vyhazuje výjimku pro pluginLicence neposkytuje tuto funkci pluginuZkontrolujte IsCapabilityGranted(...) a odstraňte registrace, které jste nezakoupili
Nakonfigurovaná relativní cesta funguje lokálně, ale ne v IIS/kontejneruPracovní adresář procesu se změnilPoužijte AppContext.BaseDirectory nebo absolutní cestu
Vyměněný soubor .lic nemá žádný efektJediná služba licence již byla vytvořenaRestartujte aplikaci
OpenDocumentAsync vyhazuje LicenseExceptionPodpis, doména, časové okno verze, černá listina nebo runtime gate pluginu odmítly licenciPřečtěte zprávu o výjimce/odmítnutí, aniž byste ji vystavili nedůvěryhodným klientům
Licence na úrovni funkce fungovala dříve, ale nyní neStarý kód předával explicitní cesty k licenci konstruktoru ViewerPřesuňte doprovodné soubory .lic vedle Doconut.Viewer.lic a nechte je automaticky objevit

Další kroky

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