Lizenzsetup
Wo Doconut nach Ihrer Lizenzdatei unter IIS sucht
Ohne Lizenz rendert Doconut weiterhin Dokumente — jede Seite trägt lediglich ein Evaluationswasserzeichen. Diese Seite beschreibt die vier Möglichkeiten, eine Lizenz in Global.asax bereitzustellen, wo Doconut nachschaut, wenn Sie keine angeben, und was passiert, wenn die Lizenz eines Plugins fehlt.
Vier Möglichkeiten, eine Lizenz bereitzustellen
Es gibt drei explizite Quellen in DoconutOptions — einen Dateipfad, einen Stream oder rohen Inhalt — plus automatische Erkennung, wenn keine davon gesetzt ist. Alle werden einmalig in DoconutHost.Initialize gelesen. Wenn mehr als eine gesetzt ist, ist die Priorität exakt:
LicenseStream schlägt LicenseContent schlägt LicensePath schlägt automatische Erkennung.
Per Pfad
Geben Sie LicensePath einen vollständigen Pfad. Ein relativer Pfad wird relativ zum aktuellen Verzeichnis des Prozesses aufgelöst, und unter IIS ist das der eigene Ordner des Worker-Prozesses, nicht Ihre Site. HostingEnvironment.MapPath wandelt einen site-relativen Pfad in einen vollständigen Pfad um:
Doconut.DoconutHost.Initialize(options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});Wenn die Datei nicht existiert, wirft Doconut keinen Fehler und greift nicht auf die automatische Erkennung zurück: Es wird keine Lizenz geladen und der Viewer fügt Wasserzeichen ein. Die per‑Plugin‑Lizenzdateien im selben Ordner (Doconut.Viewer.<Capability>.lic) werden zusammen damit gelesen, sodass LicensePath und AddPlugin<...>() zusammenarbeiten, wenn die Plugin‑Lizenzen neben der Basislizenz liegen.
Per Stream
LicenseStream wird einmalig beim Start gelesen — nützlich, wenn die Lizenz aus einer eingebetteten Ressource oder einem Geheimspeicher stammt, anstatt aus einer Datei auf dem Datenträger.
// Precedence: LicenseStream > LicenseContent > LicensePath > auto-search.
Doconut.DoconutHost.Initialize(options =>
{
options.LicenseStream = licenseStream;
});Per Inhalt
LicenseContent übernimmt den Lizenztext selbst — aus einer Umgebungsvariablen, einer Datenbank oder einem Geheimspeicher — sodass keine Lizenzdatei mit der Site bereitgestellt werden muss.
// License XML from a database, an environment variable or a secret store -
// no file on disk. Beaten only by LicenseStream.
Doconut.DoconutHost.Initialize(options =>
{
options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});Automatische Erkennung
Setzen Sie keine der drei Optionen, und Doconut sucht die Lizenz selbst:
// Configure nothing, and Doconut searches for the license itself, in this order:
// 1. {CurrentDirectory}\wwwroot
// 2. {AppContext.BaseDirectory}\wwwroot (under IIS: the site's root folder)
// It looks for Doconut.lic first, then Doconut.Viewer.lic, plus any per-plugin
// Doconut.Viewer.<Capability>.lic files alongside it.
Doconut.DoconutHost.Initialize();Die beiden Ordner, in dieser Reihenfolge, und die gesuchten Dateien:
1. {CurrentDirectory}\wwwroot
2. {AppContext.BaseDirectory}\wwwroot
In each folder:
Doconut.lic — if found, this is the only file read
Doconut.Viewer.lic — base viewer license
Doconut.Viewer.<Capability>.lic — per-plugin licenses, read only next to Doconut.Viewer.licUnter IIS und IIS Express ist AppContext.BaseDirectory der Stammordner der Site — der Ordner, der Web.config enthält — nicht dessen bin‑Ordner. Daher gehört die Lizenz in wwwroot unter dem Site‑Stammordner:
MySite\
Web.config
Global.asax
bin\
wwwroot\
Doconut.Viewer.lic
Doconut.Viewer.Converter.licIm Projekt halten Sie wwwroot\*.lic neben Web.config und stellen den Ordner mit der Site bereit. Kein Build‑Schritt muss sie irgendwohin kopieren. Eine .lic an irgendeinem anderen Ort — in bin\, neben Web.config oder in einem Unterordner von wwwroot — wird nie gelesen.
Halten Sie
.lic‑Dateien außerhalb der Versionskontrolle. Stellen Sie sie zusammen mit der Site bereit oder liefern Sie die Lizenz überLicenseContentoderLicenseStreamaus Ihrem Geheimspeicher.
Was passiert ohne Lizenz
Eine fehlende Lizenz löst keinen Fehler aus. DoconutHost.Initialize schlägt erfolgreich ab, die Site startet und der Viewer läuft, aber jede Seite trägt ein Evaluationswasserzeichen und keine optionale Funktion wird gewährt.
Eine gefundene, aber abgelehnte Lizenzdatei ist etwas anderes. Eine ungültige Signatur, Manipulation oder ein Build außerhalb des Versionsfensters der Lizenz lässt OpenDocumentAsync eine LicenseException mit dem Grund auslösen.
Plugins benötigen ihre Lizenz beim Start
Die Registrierung eines Plugins, dessen Fähigkeit von keiner Lizenz gewährt wird, stoppt die Anwendung beim Start. DoconutHost.Initialize wirft in Application_Start:
InvalidOperationException: The Converter plugin is registered via AddPlugin but no active
license grants Converter. Remove the AddPlugin<...>() call or install a license (or
trial/demo) that includes Converter.Unter System.Web sehen Sie diese Meldung nicht im Browser. Jede Anfrage an die Site liefert ein leeres 500 — keine Fehlerseite, kein Stack‑Trace, nichts im IIS‑Log. Die Ausnahme wird nur im Windows‑Ereignisprotokoll (Anwendungsprotokoll, Quelle ASP.NET) aufgezeichnet. Wenn die gesamte Site sofort nach dem Hinzufügen einer AddPlugin‑Zeile nicht mehr reagiert, prüfen Sie die Lizenzdateien in wwwroot vor dem Code: Die Doconut.Viewer.<Capability>.lic des Plugins muss neben Doconut.Viewer.lic liegen, und ohne die Basislizenz werden die Plugin‑Dateien überhaupt nicht gelesen.
Überprüfen der geladenen Lizenz
IDoconutLicenseService ist die gleiche Wahrheitsquelle, die das SDK verwendet. Lösen Sie sie aus DoconutHost.Services auf, um einen authentifizierten Diagnose‑Endpunkt bereitzustellen oder Feature‑Flags zu steuern — geben Sie niemals Lizenzinhalte zurück:
// GET /License/Status
public ActionResult Status()
{
var license = Doconut.DoconutHost.Services.GetRequiredService<IDoconutLicenseService>();
return Json(new
{
viewer = license.IsViewerLicensed || license.IsTemporary,
temporary = license.IsTemporary,
search = license.IsCapabilityGranted(LicenseCapability.Search),
annotation = license.IsCapabilityGranted(LicenseCapability.Annotation),
converter = license.HasConverter,
dicom = license.HasDicom
}, JsonRequestBehavior.AllowGet);
}Die Lizenz wird einmalig in DoconutHost.Initialize gelesen. Nach dem Ersetzen einer Lizenzdatei den Anwendungspool neu starten (oder Web.config berühren), damit Application_Start erneut ausgeführt wird.
Fehlerbehebung
| Symptom | Wahrscheinliche Ursache | Prüfung |
|---|---|---|
| Viewer funktioniert, aber jede Seite ist mit Wasserzeichen versehen | Keine Lizenz gefunden | Ist die .lic in <site root>\wwwroot? Rufen Sie den oben genannten Status‑Endpunkt auf |
Jede Anfrage liefert ein leeres 500 direkt nach dem Hinzufügen eines Plugins | Ein registriertes Plugin hat keine Lizenz, die es gewährt | Windows‑Ereignisprotokoll, Quelle ASP.NET; die .lic des Plugins neben Doconut.Viewer.lic |
LicensePath funktioniert auf Ihrem Rechner, aber nicht auf dem Server | Ein relativer Pfad, der gegen den Ordner des Worker‑Prozesses aufgelöst wird | Erstellen Sie ihn mit HostingEnvironment.MapPath("~/wwwroot/...") |
Eine ersetzte .lic‑Datei hat keine Wirkung | Die Lizenz wurde beim Start der Anwendung gelesen | Den Anwendungspool neu starten |
OpenDocumentAsync wirft LicenseException | Die Lizenz wurde gefunden, aber abgelehnt | Lesen Sie die Fehlermeldung; zeigen Sie sie nicht unzuverlässigen Clients |
Nächste Schritte
- Lizenzierung — Funktionen und wie man sie zur Laufzeit prüft.
- Fehlerbehebung — Wasserzeichen, Startfehler und andere Symptome.
War diese Seite hilfreich?