Lizenzierung
Funktionen, Lizenzstufen und der Lizenzservice
Diese Seite ist die Laufzeitreferenz dafür, wie eine Lizenz das Verhalten von Doconut beeinflusst: was jeder Lizenzstatus erlaubt, wie Fähigkeiten gewährt werden und wie man alles aus dem Code heraus inspiziert. (Zum Laden einer Lizenz siehe Getting Started → License Setup.)
Lizenzzustände und ihre Funktionen
| Zustand | Öffnet Dokumente? | Wasserzeichen | Fähigkeiten |
|---|---|---|---|
| Vollständige (bezahlte) Lizenz (innerhalb ihres Abonnement-/Update-Fensters) | Ja | Kein | Die gekauften (Has*-Flags) |
| Temporäre Lizenz (Entwickler/NFR — die Evaluierungslizenz, vor ihrem Ablaufdatum) | Ja | Kein | Alle — Pauschalgewährung (der Evaluierungs‑Trichter) |
| Abgelaufen (eine temporäre Lizenz nach ihrem Ablaufdatum oder ein bezahltes Abonnement nach seinem Verlängerungsdatum) | Ja | Evaluierungs‑Wasserzeichen | Keine gewährt |
| Keine Lizenzdatei vorhanden | Ja | Evaluierungs‑Wasserzeichen | Keine gewährt |
| Gefunden, aber abgelehnt (ungültige Signatur, manipuliert, auf einer schwarzen Liste, oder ein Build neuer als das Versionsfenster der Lizenz) | Nein — LicenseException bei jedem Öffnen | — | — |
Zwei Konsequenzen, die es zu verinnerlichen gilt:
- Eine fehlende Lizenz ist keine temporäre Lizenz. Ohne Lizenzdatei werden Seiten mit Wasserzeichen dargestellt und keine Fähigkeit (Suche, Annotation, Plugins) ist aktiv. Das voll funktionsfähige, unmarkierte Erlebnis erfordert eine tatsächliche Temporäre Lizenz (eine erhalten).
- Nur eine abgelehnte Lizenz blockiert das Öffnen. Das Ablaufdatum von Kalender/Abonnement führt zu einer Darstellung mit Wasserzeichen; aber das Bereitstellen eines Builds neuer als das Versionsfenster der Lizenz wird abgelehnt und schlägt sofort fehl mit einer
LicenseException, sodass Sie es beim Deployment abfangen — nicht durch stilles Ausliefern von Wasserzeichen‑Ausgabe. Diese Ausnahme (vonOpenDocumentAsync) enthält den Grund ausLicense.RejectionMessage.
Fähigkeiten
Doconut steuert optionale Funktionalität über Fähigkeit. Heute sind das die optionalen Converter‑ und DICOM‑Plugins sowie die integrierten Search‑ und Annotation‑Funktionen, die jeweils durch Ihre Lizenz gewährt werden. Der Basis‑Viewer ist keine Fähigkeit — er ist die Voraussetzung, sichtbar als IsViewerLicensed:
bool viewerLicensed = lic.IsViewerLicensed; // non-TRIAL license present AND covering this build's versionDas einzige Gate, das die gesamte Pipeline verwendet, ist IsCapabilityGranted:
bool searchGranted = lic.IsCapabilityGranted(LicenseCapability.Search);Seine Logik, wortwörtlich aus der Implementierung: Eine aktive (nicht abgelaufene) Temporäre Lizenz gewährt jede Fähigkeit — einschließlich Fähigkeiten, für die noch kein dediziertes Kauf‑Flag existiert; eine echte gekaufte Lizenz gewährt exakt ihre Has*‑Flags und ist standardmäßig verweigert für alles, das nicht zugeordnet ist. (Eine alte TRIAL‑Datei ist keine Berechtigung — sie wird als unlizenzierte Datei behandelt: Wasserzeichen, nichts gewährt.)
Temporäre Lizenzen
Normale Suche und Annotation nutzen ihre bestehenden Fähigkeiten direkt.
Temporäre (Entwickler/NFR) Lizenzen werden durch ein ExpiryNote‑Tag gekennzeichnet und besitzen ein festes Ablaufdatum:
| Mitglied | Bedeutung |
|---|---|
IsTemporary | Ein ExpiryNote‑Tag ist vorhanden (Erkennung erfolgt über das Vorhandensein des Tags — der Text des Hinweises wird nie verglichen, er ist dynamisch) |
ExpiryNote | Informationaler Text, der in der Lizenz eingebettet ist |
LicenseExpiry | Das feste Ablaufdatum (DateTime?) |
Die Ablaufsemantik unterscheidet sich je nach Stufe: Eine temporäre Lizenz läuft nur an ihrem LicenseExpiry‑Datum ab (ihr Abonnement‑Fenster wird ignoriert; eine temporäre Lizenz ohne Datum wird als abgelaufen behandelt, ausfallsicher). Jede andere Lizenz läuft an ihrem Abonnement/Update‑Fenster‑Datum ab.
IDoconutLicenseService‑Referenz
Injizieren Sie IDoconutLicenseService (Namespace Doconut.Core.Interfaces; als Singleton registriert — die Lizenz wird einmal beim Start geparst):
| Mitglied | Bedeutung |
|---|---|
License | Vollständiger DoconutLicenseInfo‑Snapshot (unten) |
IsTrial | Eine alte TRIAL‑Datei (als unlizenzierte Datei behandelt — keine Berechtigung) |
IsTemporary / ExpiryNote / LicenseExpiry | Temporäre‑Lizenz‑Markierungen |
IsExpired | Abgelaufen gemäß den oben genannten Stufenregeln |
IsVersionValid | Dieser Build liegt innerhalb des Lizenz‑Support‑Fensters |
IsViewerLicensed | Nicht‑TRIAL‑Datei gefunden und Version abgedeckt — Basis‑Voraussetzung |
IsCapabilityGranted(cap) | Das einzelne Fähigkeits‑Gate |
HasSearch HasAnnotation HasConverter HasDicom | Freigegeben pro‑Fähigkeit‑Kauf‑Flags — verwenden Sie IsCapabilityGranted für die temporär‑bewusste Antwort |
IsValidForDomain(host) | Host‑Abdeckung; V4‑Lizenzen verwenden das Wildcard *.* |
LicenseRejectionReason | Nicht‑leer ⇒ Öffnen wird mit dieser Meldung blockiert |
DoconutLicenseInfo stellt den benutzerfreundlichen Snapshot für Admin‑Panels bereit: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, die Has*‑Flags, die temporären Lizenzfelder und RejectionMessage.
// Feature-flag your UI from the same source of truth the SDK uses
app.MapGet("/api/features", (IDoconutLicenseService lic) => Results.Ok(new
{
viewer = lic.IsViewerLicensed || lic.IsTemporary,
search = lic.IsCapabilityGranted(LicenseCapability.Search),
annotation = lic.IsCapabilityGranted(LicenseCapability.Annotation),
conversion = lic.HasConverter,
dicom = lic.HasDicom,
}));Health‑Check
AddDoconut() registriert einen "doconut"‑Health‑Check, der den Lizenz‑/Ablauf‑Zustand über den Standard‑ASP.NET‑Core‑Mechanismus meldet:
app.MapHealthChecks("/health");Binden Sie ihn in Ihr Monitoring ein und ein ablaufendes Abonnement wird zu einer Warnung statt zu einem Support‑Ticket.
Versionsaktualisierungen
Eine Lizenz deckt ein Versionsfenster ab. Das Aktualisieren des NuGet‑Pakets auf einen Build neuer als dieses Fenster macht die Lizenz für diesen Build ungültig: IsVersionValid wird zu false und das Öffnen wird blockiert mit einer LicenseException (der Grund befindet sich in License.RejectionMessage) — bewusst fail‑fast, sodass ein veralteter oder unlizenzierter Build beim Deployment abgefangen wird, anstatt stillschweigend Produktionsausgaben zu wasserzeichen. Erneuern Sie das Abonnement, ersetzen Sie die .lic‑Datei und starten Sie die Anwendung neu, damit AddDoconut() die neue Lizenz lädt.
War diese Seite hilfreich?