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.
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.
// 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:
// 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:
// 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í:
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.licZkopí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:
<Target Name="CopyLicensesToOutput" AfterTargets="Build">
<ItemGroup>
<DoconutLicenseFiles Include="$(MSBuildProjectDirectory)\wwwroot\*.lic" />
</ItemGroup>
<Copy SourceFiles="@(DoconutLicenseFiles)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="true" />
</Target>Uchovávejte soubory
.licmimo správu verzí — nasazujte je vedle aplikace, nebo vložte licenci pomocíLicenseContentčiLicenseStreamz 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:
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.
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ří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ě | Získejte IDoconutLicenseService; ověřte výstupní adresář a pracovní adresář procesu |
AddDoconut() vyhazuje výjimku pro plugin | Licence neuděluje 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á licenční služba již byla vytvořena | Restartujte aplikaci |
OpenDocumentAsync vyhazuje LicenseException | Podpis, doména, časové okno, černá listina nebo runtime gate pluginu odmítly licenci | Př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á?