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.
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.
// 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:
// 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:
// 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í:
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 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:
<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
.licmimo správu verzí — nasazujte je vedle aplikace nebo vložte 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í 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:
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.
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ří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í výjimku pro plugin | Licence neposkytuje tuto funkci pluginu | Zkontrolujte IsCapabilityGranted(...) a odstraňte registrace, které jste nezakoupili |
| Nakonfigurovaná 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í 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á?