Ρύθμιση Άδειας
Πού ψάχνει το Doconut για το αρχείο άδειας σας στο IIS
Χωρίς άδεια, το Doconut εξακολουθεί να αποδίδει έγγραφα — κάθε σελίδα φέρει μόνο ένα υδατογράφημα αξιολόγησης. Αυτή η σελίδα καλύπτει τους τέσσερις τρόπους παροχής άδειας στο Global.asax, πού ψάχνει το Doconut όταν δεν παρέχετε καμία, και τι συμβαίνει όταν λείπει η άδεια ενός πρόσθετου.
Τέσσερις τρόποι παροχής άδειας
Υπάρχουν τρεις ρητές πηγές στο DoconutOptions — διαδρομή αρχείου, ροή ή ακατέργαστο περιεχόμενο — συν αυτόματη ανίχνευση όταν καμία δεν έχει οριστεί. Όλες διαβάζονται μία φορά, στο DoconutHost.Initialize. Όταν ορίζονται περισσότερες από μία, η προτεραιότητα είναι ακριβής:
LicenseStream υπερισχύει του LicenseContent υπερισχύει του LicensePath υπερισχύει της αυτόματης ανίχνευσης.
Με διαδρομή
Δώστε στο LicensePath μια πλήρη διαδρομή. Μια σχετική διαδρομή επιλύεται σε σχέση με τον τρέχοντα φάκελο της διεργασίας, και στο IIS αυτός είναι ο φάκελος της διαδικασίας εργασίας, όχι του ιστότοπού σας. Το HostingEnvironment.MapPath μετατρέπει μια διαδρομή σχετική με τον ιστότοπο σε πλήρη διαδρομή:
Doconut.DoconutHost.Initialize(options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});Αν το αρχείο δεν υπάρχει, το Doconut δεν πετάει εξαίρεση και δεν επανέρχεται στην αυτόματη ανίχνευση: δεν φορτώνει άδεια και ο προβολέας προσθέτει υδατογράφημα. Τα αρχεία άδειας ανά πρόσθετο στον ίδιο φάκελο (Doconut.Viewer.<Capability>.lic) διαβάζονται μαζί του, έτσι το LicensePath και το AddPlugin<...>() λειτουργούν μαζί όταν οι άδειες των πρόσθετων βρίσκονται δίπλα στην κύρια άδεια.
Με ροή
LicenseStream διαβάζεται μία φορά, κατά την εκκίνηση — χρήσιμο όταν η άδεια προέρχεται από ενσωματωμένο πόρο ή μυστικό αποθηκευτικό χώρο αντί για αρχείο στο δίσκο.
// Precedence: LicenseStream > LicenseContent > LicensePath > auto-search.
Doconut.DoconutHost.Initialize(options =>
{
options.LicenseStream = licenseStream;
});Με περιεχόμενο
LicenseContent παίρνει το κείμενο της άδειας — από μεταβλητή περιβάλλοντος, βάση δεδομένων ή μυστικό αποθηκευτικό χώρο — έτσι δεν χρειάζεται να αναπτυχθεί αρχείο άδειας με τον ιστότοπο.
// 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") ?? "";
});Αυτόματη ανίχνευση
Μην ορίσετε καμία από τις τρεις, και το Doconut ψάχνει την άδεια μόνο του:
// 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();Οι δύο φάκελοι, με τη σειρά, και τα αρχεία που αναζητούνται:
Σε κάθε φάκελο:
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.licΣτο IIS και IIS Express, το AppContext.BaseDirectory είναι ο ριζικός φάκελος του ιστότοπου — αυτός που περιέχει το Web.config — όχι ο φάκελος bin. Έτσι η άδεια πρέπει να βρίσκεται στο wwwroot κάτω από τη ρίζα του ιστότοπου:
MySite\
Web.config
Global.asax
bin\
wwwroot\
Doconut.Viewer.lic
Doconut.Viewer.Converter.licΣτο έργο, διατηρήστε τα wwwroot\*.lic δίπλα στο Web.config και αναπτύξτε το φάκελο με τον ιστότοπο. Δεν απαιτείται βήμα κατασκευής για αντιγραφή του κάπου. Ένα .lic οπουδήποτε αλλού — στο bin\, δίπλα στο Web.config, ή σε υποφάκελο του wwwroot — δεν διαβάζεται ποτέ.
Διατηρήστε τα αρχεία
.licεκτός ελέγχου πηγής. Αναπτύξτε τα δίπλα στον ιστότοπο, ή παρέχετε την άδεια μέσωLicenseContentήLicenseStreamαπό το μυστικό σας αποθηκευτικό χώρο.
Τι συμβαίνει χωρίς άδεια
Μια ελλιπής άδεια δεν πετάει εξαίρεση. Το DoconutHost.Initialize ολοκληρώνεται επιτυχώς, ο ιστότοπος ξεκινά, και ο προβολέας λειτουργεί, αλλά κάθε σελίδα φέρει υδατογράφημα αξιολόγησης και δεν χορηγείται καμία προαιρετική δυνατότητα.
Ένα αρχείο άδειας που βρέθηκε αλλά απορρίφθηκε είναι διαφορετικό. Μη έγκυρη υπογραφή, παραποίηση ή κατασκευή εκτός του χρονικού παραθύρου της άδειας προκαλεί το OpenDocumentAsync να πετάξει LicenseException με τον λόγο.
Τα πρόσθετα χρειάζονται την άδειά τους κατά την εκκίνηση
Η καταχώρηση ενός πρόσθετου του οποίου η δυνατότητα δεν χορηγείται από καμία άδεια σταματά την εφαρμογή κατά την εκκίνηση. Το DoconutHost.Initialize πετάει εξαίρεση στο 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.Στο System.Web, δεν βλέπετε αυτό το μήνυμα στο πρόγραμμα περιήγησης. Κάθε αίτηση στον ιστότοπο επιστρέφει ένα κενό 500 — χωρίς σελίδα σφάλματος, χωρίς στοίβα εντολών, τίποτα στο αρχείο καταγραφής του IIS. Η εξαίρεση καταγράφεται μόνο στο αρχείο καταγραφής συμβάντων των Windows (Application log, πηγή ASP.NET). Αν ολόκληρος ο ιστότοπος σταματήσει να ανταποκρίνεται αμέσως μετά την προσθήκη μιας γραμμής AddPlugin, ελέγξτε τα αρχεία άδειας στο wwwroot πριν από τον κώδικα: το Doconut.Viewer.<Capability>.lic του πρόσθετου πρέπει να βρίσκεται δίπλα στο Doconut.Viewer.lic, και χωρίς τη βασική άδεια τα αρχεία του πρόσθετου δεν διαβάζονται καθόλου.
Επαλήθευση της φορτωμένης άδειας
Το IDoconutLicenseService είναι η ίδια πηγή αλήθειας που χρησιμοποιεί το SDK. Ανακτήστε το από το DoconutHost.Services για να εκθέσετε ένα πιστοποιημένο διαγνωστικό endpoint ή να ελέγξετε σημαίες λειτουργιών — ποτέ μην επιστρέφετε το περιεχόμενο της άδειας:
// 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);
}Η άδεια διαβάζεται μία φορά, στο DoconutHost.Initialize. Μετά την αντικατάσταση ενός αρχείου άδειας, ανακυκλώστε την ομάδα εφαρμογών (ή τροποποιήστε το Web.config) ώστε το Application_Start να εκτελεστεί ξανά.
Επίλυση προβλημάτων
| Σύμπτωμα | Πιθανή αιτία | Έλεγχος |
|---|---|---|
| Ο προβολέας λειτουργεί αλλά κάθε σελίδα έχει υδατογράφημα | Δεν βρέθηκε άδεια | Βρίσκεται το .lic στο <site root>\wwwroot; Κλήστε το endpoint κατάστασης παραπάνω |
Κάθε αίτηση επιστρέφει ένα κενό 500 αμέσως μετά την προσθήκη ενός πρόσθετου | Ένα καταχωρημένο πρόσθετο δεν έχει άδεια που το χορηγεί | Αρχείο καταγραφής συμβάντων των Windows, πηγή ASP.NET· το .lic του πρόσθετου δίπλα στο Doconut.Viewer.lic |
LicensePath λειτουργεί στον υπολογιστή σας αλλά όχι στον διακομιστή | Μια σχετική διαδρομή που επιλύεται σε σχέση με το φάκελο της διαδικασίας εργασίας | Κατασκευάστε το με HostingEnvironment.MapPath("~/wwwroot/...") |
Ένα αντικατεστημένο αρχείο .lic δεν έχει αποτέλεσμα | Η άδεια διαβάστηκε όταν ξεκίνησε η εφαρμογή | Ανακυκλώστε την ομάδα εφαρμογών |
OpenDocumentAsync πετάει LicenseException | Η άδεια βρέθηκε αλλά απορρίφθηκε | Διαβάστε το μήνυμα της εξαίρεσης· μην το εμφανίζετε σε μη αξιόπιστους πελάτες |
Επόμενα βήματα
- Άδεια — δυνατότητες, και πώς να τις ελέγξετε κατά την εκτέλεση.
- Επίλυση προβλημάτων — υδατογραφήματα, αποτυχίες εκκίνησης, και άλλα συμπτώματα.
Ήταν αυτή η σελίδα χρήσιμη;