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.
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.
// 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ř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í 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í:
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 licenseNic 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:
<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
.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 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:
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.
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říznak | Pravděpodobná příčina | Kontrola |
|---|---|---|
| Prohlížeč funguje, ale každá stránka má vodoznak | 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() vyhazuje 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 | Jediná služba licence již byla vytvořena | Restartujte aplikaci |
OpenDocumentAsync vyhazuje 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 |
| Licence na úrovni funkce fungovala dříve, ale nyní ne | Starý kód předával explicitní cesty k licenci konstruktoru Viewer | Přesuňte doprovodné soubory .lic vedle Doconut.Viewer.lic a nechte je automaticky objevit |
Další kroky
- Licencování — funkce, úrovně licencí a ověřování, co bylo načteno za běhu.
- Řešení problémů — vodoznaky, odmítnuté licence a chyby funkcí.
Byla tato stránka užitečná?