Nastavení licence

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

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

Čtyři způsoby, jak dodat licenci

Existují čtyři: tři explicitní zdroje v 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í přednosti je přesně:

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

Podle cesty

LicensePath je předán funkci File.Exists přesně tak, jak je zadán. Relativní cesta se vyhodnocuje vůči aktuálnímu pracovnímu adresáři procesu — ne vůči složce projektu a ne vůči složce, ve které se nachází Program.cs. Pokud cesta není nalezena, Doconut nevyhodí výjimku a ne přepne na automatické vyhledávání — jednoduše nenačte žádnou licenci a prohlížeč zobrazí vodotisk. Automatické vyhledávání běží pouze, když není nastaveno žádné z LicensePath, LicenseContent nebo LicenseStream.

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, "Doconut.Viewer.lic");
});

Podle 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
// Pořadí přednosti: LicenseStream > LicenseContent > LicensePath > automatické vyhledávání.
builder.Services.AddDoconut(options =>
{
    options.LicenseStream = licenseStream;
});

Podle obsahu

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

csharp
// Licence ve formátu XML z databáze, proměnné prostředí nebo tajného správce —
// žádný soubor na disku. Přednost má 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
// Nenastavte nic a Doconut bude sám hledat licenci:
//   1. {CurrentDirectory}/wwwroot
//   2. {CurrentDirectory}/wwwroot/lib
//   3. AppContext.BaseDirectory  (adresář výstupní sestavení)
// Hledá soubory Doconut.Viewer.lic a případné soubory Doconut.Viewer.<Capability>.lic
// vedle něj.
builder.Services.AddDoconut();

Adresáře pro prohledávání, v pořadí, a názvy souborů, které se v nich hledají:

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

Názvy souborů (kontrolované v každém výše uvedeném adresáři, v tomto pořadí):
  Doconut.Viewer.lic                   — základní licence prohlížeče
  Doconut.Viewer.<Capability>.lic      — licence pro konkrétní plugin, vedle Doconut.Viewer.lic

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

LicensePath a také prohledávání automaticky pomocí AppContext.BaseDirectory vyžadují, aby soubor .lic existoval vedle sestavené aplikace — ne jen ve vašem zdrojovém wwwroot. Testovací aplikace SDK jej kopíruje při každém sestavení pomocí tohoto MSBuild cíle:

xml
<Target Name="CopyLicensesToOutput" AfterTargets="Build">
  <ItemGroup>
    <DoconutLicenseFiles Include="$(MSBuildProjectDirectory)\wwwroot\*.lic" />
  </ItemGroup>
  <Copy SourceFiles="@(DoconutLicenseFiles)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="true" />
</Target>

Uchovávejte soubory .lic mimo správu verzí — nasazujte je vedle aplikace, nebo vložte licenci pomocí LicenseContent či 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 vodotisk pro hodnocení a žádná volitelná funkce není povolena.

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

Pluginy potřebují funkce

Registrace pluginu bez odpovídajícího oprávnění je odlišná: 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á uděluje 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 situaci: buď odeberete volání options.AddPlugin<...>() pro daný plugin, nebo nainstalujete placenou licenci či aktivní dočasnou/Demo (NFR) licenci, která uděluje tuto funkci. Dočasné registrace mohou přežít datum vypršení, takže již nakonfigurovaná aplikace může při běhu degradovat místo toho, aby se při restartu zhroutila; po vypršení jsou jejich funkce stále odebrá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í feature flagů. Nevracejte 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 se načte během registrace AddDoconut(). ResetLicense je v současnosti kompatibilní vlastnost bez aktivní cesty pro znovunačtení, takže výměna licenčního souboru vyžaduje restart aplikace.

Matrice řešení problémů

PříznakPravděpodobná příčinaKontrola
Prohlížeč funguje, ale každá stránka má vodotiskNebyla načtena žádná licence, nebo licence vypršela kalendářověZískejte IDoconutLicenseService; ověřte výstupní adresář a pracovní adresář procesu
AddDoconut() vyhazuje výjimku pro pluginLicence neuděluje tuto funkci pluginuZkontrolujte IsCapabilityGranted(...) a odstraňte registrace, které jste nezakoupili
Nastavená 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ý efektSingletonová licenční služba již byla vytvořenaRestartujte aplikaci
OpenDocumentAsync vyhazuje LicenseExceptionPodpis, doména, časové okno, černá listina nebo runtime gate pluginu odmítly licenciPřečtěte zprávu výjimky/odmítnutí, aniž byste ji vystavili nedůvěryhodným klientům

Další kroky

  • Licencování — funkce, úrovně licencí a ověření toho, co bylo načteno během běhu.
  • Řešení problémů — vodotisky, odmítnuté licence a chyby funkcí.

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