Nastavení licence
Kde Doconut hledá váš licenční soubor
Bez licence Doconut stále vykresluje dokumenty — každá stránka nese evaluační vodoznak. 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 — plus automatické vyhledávání, když není žádný z nich nastaven. Když je nastaveno více než jedno, pořadí přednosti je přesně následující:
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 se předává File.Exists přesně tak, jak je zadáno. 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 se cesta nevyřeší, Doconut nevyhodí výjimku a nepřepne na automatické vyhledávání — jednoduše nenačte žádnou licenci a viewer zobrazí vodoznak. Automatické vyhledávání běží jen tehdy, když není nastaveno LicensePath, LicenseContent ani 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 startu — užitečné, když licence pochází z tajného úložiště místo souboru na disku.
// Precedence: LicenseStream > LicenseContent > LicensePath > auto-search.
builder.Services.AddDoconut(options =>
{
options.LicenseStream = licenseStream;
});Podle obsahu
LicenseContent přijímá samotný text licence — z proměnné prostředí, databáze nebo správce tajemství:
// License XML from a database, environment variable, or secret manager —
// no file on disk. Beaten only by 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:
// Configure nothing, and Doconut searches for the license itself:
// 1. {CurrentDirectory}/wwwroot
// 2. {CurrentDirectory}/wwwroot/lib
// 3. AppContext.BaseDirectory (the build output folder)
// It looks for Doconut.Viewer.lic plus any per-plugin
// Doconut.Viewer.<Capability>.lic files alongside it.
builder.Services.AddDoconut();Probingové adresáře v pořadí a názvy souborů, které se v nich hledají:
1. {CurrentDirectory}/wwwroot
2. {CurrentDirectory}/wwwroot/lib
3. AppContext.BaseDirectory
Filenames (checked in each directory above, in order):
Doconut.Viewer.lic — base viewer license
Doconut.Viewer.<Capability>.lic — per-plugin license, alongside Doconut.Viewer.licZkopírujte licenci do výstupního adresáře
LicensePath i probing AppContext.BaseDirectory při automatickém vyhledávání vyžadují, aby soubor .lic existoval vedle sestavené aplikace — ne jen ve vašem zdrojovém wwwroot. Testovací aplikace SDK tento soubor při každém buildu zkopíruje pomocí následujícího MSBuild targetu:
<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 injektujte licenci přesLicenseContentč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 viewer běží — ale každá stránka nese evaluační vodoznak a žádná volitelná funkce není povolena.
Licenční soubor, který je nalezen, ale odmítnut, je jiná situace. Neplatný podpis, manipulace, blacklist, nebo sestavení mimo časové okno licence způsobí, že OpenDocumentAsync vyhodí LicenseException s License.RejectionMessage. Licence, která vypršela kalendářově, ale nemá odmítací zprávu, pokračuje v režimu s vodoznakem.
Pluginy potřebují oprávnění
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 dané 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 ří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á danou funkci poskytuje. Dočasné registrace mohou přežít datum expirace, takže již nakonfigurovaná aplikace může při běhu degradovat místo toho, aby se při restartu zhroutila; po expiraci jsou jejich oprávnění stále odebrána.
Ověřte načtenou licenci
Použijte IDoconutLicenseService, stejný zdroj pravdy, který SDK používá, k vystavení autentizovaného diagnostického endpointu nebo k řízení feature flagů. 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 se načítá během registrace AddDoconut(). ResetLicense je momentálně jen kompatibilní vlastnost bez aktivní cesty pro opětovné nač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 |
|---|---|---|
| Viewer funguje, ale každá stránka je vodoznakována | Nebyla načtena žádná licence nebo je licence kalendářově prošlá | Vyřešte IDoconutLicenseService; ověřte výstupní adresář a pracovní adresář procesu |
AddDoconut() vyhazuje výjimku pro plugin | Licence nepřiděluje oprávnění tomuto 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á licenční služba již byla vytvořena | Restartujte aplikaci |
OpenDocumentAsync vyhazuje LicenseException | Podpis, doména, časové okno verze, blacklist 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í — schopnosti, úrovně licencí a ověření, co bylo načteno za běhu.
- Řešení problémů — vodoznaky, odmítnuté licence a chyby oprávnění.
Byla tato stránka užitečná?