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 das alles aus dem Code heraus inspiziert. (Zum Laden einer Lizenz siehe Erste Schritte → Lizenz‑Einrichtung.)

Lizenzstatus und ihre Funktionen

StatusÖffnet Dokumente?WasserzeichenFähigkeiten
Vollständige (bezahlte) Lizenz (innerhalb ihres Abonnement-/Update‑Fensters)JaKeinesDie gekauften (Has*‑Flags)
Temporäre Lizenz (Entwickler/NFR — die Evaluierungslizenz, vor ihrem Ablaufdatum)JaKeinesAlle — pauschale Gewährung (der Evaluierungs‑Trichter)
Abgelaufen (eine temporäre Lizenz nach ihrem Ablaufdatum oder ein bezahltes Abonnement nach seinem Erneuerungsdatum)JaEvaluierungs‑WasserzeichenKeine gewährt
Keine Lizenzdatei vorhandenJaEvaluierungs‑WasserzeichenKeine gewährt
Gefunden, aber abgelehnt (ungültige Signatur, manipuliert, auf der 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 ausgestattete, wasserzeichenfreie Erlebnis erfordert eine echte 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 den Fehler beim Deployment abfangen — nicht durch stillschweigendes Ausliefern von wasserzeichenbehafteten Ausgaben. Diese Ausnahme (von OpenDocumentAsync) enthält den Grund aus License.RejectionMessage.

Fähigkeiten

Doconut steuert optionale Funktionalität über Fähigkeiten. 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; // Nicht‑TRIAL‑Lizenz vorhanden UND deckt die Version dieses Builds ab

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 ablehnend für alles, was nicht zugeordnet ist. (Eine alte TRIAL‑Datei ist keine Berechtigung — sie wird als unlizenziert behandelt: wasserzeichenbehaftet, 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)
ExpiryNoteInformations‑Text, der in die Lizenz eingebettet ist
LicenseExpiryDas 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):

MitgliedBedeutung
LicenseVollständiger DoconutLicenseInfo‑Schnappschuss (unten)
IsTrialEine alte TRIAL‑Datei (als unlizenziert behandelt — keine Berechtigung)
IsTemporary / ExpiryNote / LicenseExpiryMarkierungen für temporäre Lizenzen
IsExpiredAbgelaufen gemäß den oben genannten Stufenregeln
IsVersionValidDieser Build liegt innerhalb des Support‑Fensters der Lizenz
IsViewerLicensedNicht‑TRIAL‑Datei gefunden und Version abgedeckt — Grundvoraussetzung
IsCapabilityGranted(cap)Das einzige Fähigkeits‑Gate
HasSearch HasAnnotation HasConverter HasDicomFreigegebene Kauf‑Flags pro Fähigkeit — 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 Schnappschuss für Admin‑Panels bereit: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, die Has*‑Flags, die Felder für temporäre Lizenzen und RejectionMessage.

csharp
// Schalte UI‑Features basierend auf derselben Quelle, die das SDK verwendet
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,
}));

Gesundheitsprüfung

AddDoconut() registriert einen "doconut"‑Health‑Check, der den Lizenz‑/Ablaufstatus ü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.

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 false und das Öffnen wird blockiert mit einer LicenseException (der Grund befindet sich in License.RejectionMessage) — bewusst schnell scheitern, sodass ein veralteter oder unlizenzierter Build beim Deployment erkannt 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?