Nastavení licence
Kde Doconut hledá váš licenční soubor
Bez licence Doconut stále vykresluje dokumenty — každá stránka nese pouze vodotisk hodnocení. Tato stránka popisuje čtyři způsoby, jak dodat licenci, a přesné pořadí přiřazení, 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ý nastaven. Když je nastaveno více než jedno, pořadí je přesné:
LicenseStream beats LicenseContent beats LicensePath beats 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í 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 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.
builder.Services.AddDoconut(options =>
{
options.LicensePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", "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.
// Priorita: LicenseStream > LicenseContent > LicensePath > auto-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:
// XML licence 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:
// 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
// soubory Doconut.Viewer.<Capability>.lic vedle něj.
builder.Services.AddDoconut();Složky pro prohledávání, v pořadí, a názvy souborů, které se v každé hledají:
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 licenseNic mimo složku wwwroot není čteno: .lic ve výstupní složce samotné, nebo v wwwroot/lib, je ignorováno.
Zkopírujte licenci do výstupní složky
Když proces neběží z projektové složky — 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:
<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 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
.licmimo správu verzí — nasazujte je vedle aplikace, nebo injektujte licenci pomocíLicenseContentneboLicenseStreamz 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í funkce
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:
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 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í příznaků funkcí. Neukazujte obsah licence ani klíče.
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 opětovné načtení, takže výměna souboru licence vyžaduje restart aplikace.
Mřížka řešení problémů
| Příznak | Pravděpodobná příčina | Kontrola |
|---|---|---|
| Prohlížeč funguje, ale každá stránka má vodotisk | Nebyla 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í pro plugin | Licence neposkytuje tuto funkci pluginu | Zkontrolujte IsCapabilityGranted(...) a odstraňte registrace, které jste nezakoupili |
| Nastavená relativní cesta funguje lokálně, ale ne v IIS/kontejneru | Pracovní adresář procesu se změnil | Použijte AppContext.BaseDirectory nebo absolutní cestu |
Vyměněný soubor .lic nemá žádný efekt | Singletonová služba licence již byla vytvořena | Restartujte aplikaci |
OpenDocumentAsync vyhodí LicenseException | Podpis, doména, časové okno verze, černá listina nebo runtime gate pluginu odmítly licenci | Př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í, co bylo načteno za běhu.
- Řešení problémů — vodotisky, odmítnuté licence a chyby funkcí.
Byla tato stránka užitečná?