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?WasserzeichenFähigkeiten
Vollständige (bezahlte) Lizenz (innerhalb ihres Abonnement-/Update-Fensters)JaKeinDie gekauften (Has*-Flags)
Temporäre Lizenz (Entwickler/NFR — die Evaluierungslizenz, vor ihrem Ablaufdatum)JaKeinAlle — Pauschalgewährung (der Evaluierungs‑Trichter)
Abgelaufen (eine temporäre Lizenz nach ihrem Ablaufdatum oder ein bezahltes Abonnement nach seinem Verlängerungsdatum)JaEvaluierungs‑WasserzeichenKeine gewährt
Keine Lizenzdatei vorhandenJaEvaluierungs‑WasserzeichenKeine 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 (von OpenDocumentAsync) enthält den Grund aus License.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:

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

Das einzige Gate, das die gesamte Pipeline verwendet, 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 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:

MitgliedBedeutung
IsTemporaryEin ExpiryNote‑Tag ist vorhanden (Erkennung erfolgt über das Vorhandensein des Tags — der Text des Hinweises wird nie verglichen, er ist dynamisch)
ExpiryNoteInformationaler Text, der in der Lizenz eingebettet ist
LicenseExpiryDas feste Ablaufdatum (DateTime?)

Die Ablaufsemantik unterscheidet sich je nach Stufe: Eine temporäre Lizenz läuft nur an ihrem LicenseExpiryDatum 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):

MitgliedBedeutung
LicenseVollständiger DoconutLicenseInfo‑Snapshot (unten)
IsTrialEine alte TRIAL‑Datei (als unlizenzierte Datei behandelt — keine Berechtigung)
IsTemporary / ExpiryNote / LicenseExpiryTemporäre‑Lizenz‑Markierungen
IsExpiredAbgelaufen gemäß den oben genannten Stufenregeln
IsVersionValidDieser Build liegt innerhalb des Lizenz‑Support‑Fensters
IsViewerLicensedNicht‑TRIAL‑Datei gefunden und Version abgedeckt — Basis‑Voraussetzung
IsCapabilityGranted(cap)Das einzelne Fähigkeits‑Gate
HasSearch HasAnnotation HasConverter HasDicomFreigegeben pro‑Fähigkeit‑Kauf‑Flags — verwenden Sie IsCapabilityGranted für die temporär‑bewusste Antwort
IsValidForDomain(host)Host‑Abdeckung; V4‑Lizenzen verwenden das Wildcard *.*
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 den Lizenz‑/Ablauf‑Zustand über den Standard‑ASP.NET‑Core‑Mechanismus meldet:

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