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.

Čtyři způsoby, jak dodat licenci

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

LicenseStream převyšuje LicenseContent převyšuje LicensePath převyšuje automatické vyhledávání.

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í nalezena, 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 per-plugin ve stejném adresáři (Doconut.Viewer.<Capability>.lic) jsou s ním načteny, takže LicensePath a AddPlugin<...>() fungují společně, když licenční soubory pluginů leží 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 je načten 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řekonán pouze LicenseStream.
builder.Services.AddDoconut(options =>
{
    options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});

Automatické vyhledávání

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

csharp
// Není nic konfigurováno a Doconut sám hledá licenci, 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 a také jakékoli per-plugin
// Doconut.Viewer.<Capability>.lic soubory vedle něj.
builder.Services.AddDoconut();

Prohledávané složky v pořadí a názvy souborů, které se v každé 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-plugin license, alongside the base license

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

Zkopírujte licenci do výstupního adresáře

Když proces neběží z projektového adresáře — publikovaná aplikace, IIS, kontejner, testovací běh — první prohledávání 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 smazat, aby přejmenování nebo odstranění .lic v wwwroot také odstranilo soubor 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 nikdy není 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 vodotisk hodnocení a žádná volitelná funkce není poskytnuta.

Soubor licence, 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 vodotiskem.

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 jsou povoleny 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 v současnosti kompatibilní vlastnost bez aktivní cesty pro znovunačtení, takže výměna souboru licence vyžaduje restartování aplikace.

Maticová tabulka ř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ěVyřešte IDoconutLicenseService; ověřte výstupní adresář a pracovní adresář procesu
AddDoconut() vyhodí 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ý efektSingletonová služba licence již byla vytvořenaRestartujte aplikaci
OpenDocumentAsync vyhodí 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

Další kroky

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

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