Lizenzierung
Funktionen, Lizenzstufen und der Lizenzservice
Diese Seite ist die Laufzeit‑Referenz dafür, wie eine Lizenz das Verhalten von Doconut bestimmt: was jeder Lizenzstatus erlaubt, wie Funktionen gewährt werden und wie man das alles aus dem Code heraus inspiziert. (Zum Laden einer Lizenz siehe Erste Schritte → Lizenz‑Setup.)
Lizenzstatus und ihre Wirkung
| Status | Öffnet Dokumente? | Wasserzeichen | Funktionen |
|---|---|---|---|
| Vollständige (bezahlte) Lizenz (innerhalb ihres Abonnement‑/Update‑Fensters) | Ja | Keine | Die erworbenen (Has*‑Flags) |
| Temporäre Lizenz (Developer/NFR — die Evaluationslizenz, vor ihrem Ablaufdatum) | Ja | Keine | Alle — pauschale Erlaubnis (der Evaluations‑Trichter) |
| Abgelaufen (eine temporäre Lizenz nach ihrem Ablaufdatum oder ein bezahltes Abonnement nach seinem Erneuerungsdatum) | Ja | Evaluierungswasserzeichen | Keine gewährt |
| Keine Lizenzdatei vorhanden | Ja | Evaluierungswasserzeichen | Keine gewährt |
| Gefunden, aber abgelehnt (ungültige Signatur, manipuliert, gesperrt 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 Funktion (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 wasserzeichenbehafteten Ausgaben. Diese Ausnahme (vonOpenDocumentAsync) enthält den Grund ausLicense.RejectionMessage.
Funktionen
Doconut steuert optionale Funktionalität über Fähigkeiten. Heute sind das die optionalen Converter‑ und DICOM‑Plugins sowie die integrierten Search‑ und Annotation‑Features, die jeweils von Ihrer 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 nutzt, 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 solcher, für die noch kein dediziertes Kauf‑Flag existiert; eine echte, gekaufte Lizenz gewährt exakt ihre Has*‑Flags und ist standardmäßig ablehnend für alles, was nicht zugeordnet ist. (Eine Legacy‑TRIAL‑Datei ist keine Berechtigung — sie wird wie unlizenziert behandelt: Wasserzeichen, nichts gewährt.)
Temporäre Lizenzen
Temporäre (Developer/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 | Informations‑Text, der in der Lizenz eingebettet ist |
LicenseExpiry | Das feste Ablaufdatum (DateTime?) |
Die Ablauf‑Semantik 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 am Datum ihres Abonnement‑/Update‑Fensters ab.
IDoconutLicenseService Referenz
Injizieren Sie IDoconutLicenseService (Namespace Doconut.Core.Interfaces; registriert als Singleton — die Lizenz wird einmal beim Start geparst):
| Mitglied | Bedeutung |
|---|---|
License | Vollständiger DoconutLicenseInfo‑Snapshot (siehe unten) |
IsTrial | Eine Legacy‑TRIAL‑Datei (als unlizenziert behandelt — keine Berechtigung) |
IsTemporary / ExpiryNote / LicenseExpiry | Marker für temporäre Lizenzen |
IsExpired | Abgelaufen gemäß den oben genannten Stufenregeln |
IsVersionValid | Dieser Build liegt innerhalb des Unterstützungsfensters der Lizenz |
IsViewerLicensed | Nicht‑TRIAL‑Datei gefunden und Version abgedeckt — Grundvoraussetzung |
IsCapabilityGranted(cap) | Das einzelne Fähigkeits‑Gate |
HasSearch HasAnnotation HasConverter HasDicom | Freigegebene pro‑Fähigkeit‑Kauf‑Flags — verwenden Sie IsCapabilityGranted für die temporär‑bewusste Antwort |
IsValidForDomain(host) | Domain‑Abdeckung; V4‑Lizenzen nutzen das Wildcard‑Muster *.* |
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 Lizenz‑/Ablauf‑Zustand über den Standard‑ASP.NET‑Core‑Mechanismus meldet:
app.MapHealthChecks("/health");Binden Sie ihn in Ihr Monitoring ein, und ein auslaufendes Abonnement wird zu einem Alarm statt zu einem Support‑Ticket.
Versions‑Upgrades
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 steht in License.RejectionMessage) — absichtlich sofortiges Scheitern, sodass ein veralteter oder unlizenzierter Build beim Deployment erkannt wird, anstatt stillschweigend Produktions‑Ausgaben zu wässern. 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?