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?WasserzeichenFunktionen
Vollständige (bezahlte) Lizenz (innerhalb ihres Abonnement‑/Update‑Fensters)JaKeineDie erworbenen (Has*‑Flags)
Temporäre Lizenz (Developer/NFR — die Evaluationslizenz, vor ihrem Ablaufdatum)JaKeineAlle — pauschale Erlaubnis (der Evaluations‑Trichter)
Abgelaufen (eine temporäre Lizenz nach ihrem Ablaufdatum oder ein bezahltes Abonnement nach seinem Erneuerungsdatum)JaEvaluierungswasserzeichenKeine gewährt
Keine Lizenzdatei vorhandenJaEvaluierungswasserzeichenKeine 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 (von OpenDocumentAsync) enthält den Grund aus License.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:

csharp
bool viewerLicensed = lic.IsViewerLicensed; // non-TRIAL license present AND covering this build's version

Das einzige Gate, das die gesamte Pipeline nutzt, ist IsCapabilityGranted:

csharp
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:

MitgliedBedeutung
IsTemporaryEin ExpiryNote‑Tag ist vorhanden (Erkennung erfolgt über das Vorhandensein des Tags — der Text des Hinweises wird nie verglichen, er ist dynamisch)
ExpiryNoteInformations‑Text, der in der Lizenz eingebettet ist
LicenseExpiryDas 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):

MitgliedBedeutung
LicenseVollständiger DoconutLicenseInfo‑Snapshot (siehe unten)
IsTrialEine Legacy‑TRIAL‑Datei (als unlizenziert behandelt — keine Berechtigung)
IsTemporary / ExpiryNote / LicenseExpiryMarker für temporäre Lizenzen
IsExpiredAbgelaufen gemäß den oben genannten Stufenregeln
IsVersionValidDieser Build liegt innerhalb des Unterstützungsfensters der Lizenz
IsViewerLicensedNicht‑TRIAL‑Datei gefunden und Version abgedeckt — Grundvoraussetzung
IsCapabilityGranted(cap)Das einzelne Fähigkeits‑Gate
HasSearch HasAnnotation HasConverter HasDicomFreigegebene 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 *.*
LicenseRejectionReasonNicht‑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.

csharp
// 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:

csharp
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?