Ρύθμιση Άδειας

Πού ψάχνει το Doconut για το αρχείο άδειας σας στο IIS

Χωρίς άδεια, το Doconut εξακολουθεί να αποδίδει έγγραφα — κάθε σελίδα φέρει μόνο ένα υδατογράφημα αξιολόγησης. Αυτή η σελίδα καλύπτει τους τέσσερις τρόπους παροχής άδειας στο Global.asax, πού ψάχνει το Doconut όταν δεν παρέχετε καμία, και τι συμβαίνει όταν λείπει η άδεια ενός πρόσθετου.

Τέσσερις τρόποι παροχής άδειας

Υπάρχουν τρεις ρητές πηγές στο DoconutOptions — διαδρομή αρχείου, ροή ή ακατέργαστο περιεχόμενο — συν αυτόματη ανίχνευση όταν καμία δεν έχει οριστεί. Όλες διαβάζονται μία φορά, στο DoconutHost.Initialize. Όταν ορίζονται περισσότερες από μία, η προτεραιότητα είναι ακριβής:

LicenseStream υπερισχύει του LicenseContent υπερισχύει του LicensePath υπερισχύει της αυτόματης ανίχνευσης.

Με διαδρομή

Δώστε στο LicensePath μια πλήρη διαδρομή. Μια σχετική διαδρομή επιλύεται σε σχέση με τον τρέχοντα φάκελο της διεργασίας, και στο IIS αυτός είναι ο φάκελος της διαδικασίας εργασίας, όχι του ιστότοπού σας. Το HostingEnvironment.MapPath μετατρέπει μια διαδρομή σχετική με τον ιστότοπο σε πλήρη διαδρομή:

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});

Αν το αρχείο δεν υπάρχει, το Doconut δεν πετάει εξαίρεση και δεν επανέρχεται στην αυτόματη ανίχνευση: δεν φορτώνει άδεια και ο προβολέας προσθέτει υδατογράφημα. Τα αρχεία άδειας ανά πρόσθετο στον ίδιο φάκελο (Doconut.Viewer.<Capability>.lic) διαβάζονται μαζί του, έτσι το LicensePath και το AddPlugin<...>() λειτουργούν μαζί όταν οι άδειες των πρόσθετων βρίσκονται δίπλα στην κύρια άδεια.

Με ροή

LicenseStream διαβάζεται μία φορά, κατά την εκκίνηση — χρήσιμο όταν η άδεια προέρχεται από ενσωματωμένο πόρο ή μυστικό αποθηκευτικό χώρο αντί για αρχείο στο δίσκο.

csharp
// Precedence: LicenseStream > LicenseContent > LicensePath > auto-search.
Doconut.DoconutHost.Initialize(options =>
{
    options.LicenseStream = licenseStream;
});

Με περιεχόμενο

LicenseContent παίρνει το κείμενο της άδειας — από μεταβλητή περιβάλλοντος, βάση δεδομένων ή μυστικό αποθηκευτικό χώρο — έτσι δεν χρειάζεται να αναπτυχθεί αρχείο άδειας με τον ιστότοπο.

csharp
// 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 ψάχνει την άδεια μόνο του:

csharp
// 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();

Οι δύο φάκελοι, με τη σειρά, και τα αρχεία που αναζητούνται:

Σε κάθε φάκελο:

text
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 κάτω από τη ρίζα του ιστότοπου:

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

text
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 ή να ελέγξετε σημαίες λειτουργιών — ποτέ μην επιστρέφετε το περιεχόμενο της άδειας:

csharp
// 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Η άδεια βρέθηκε αλλά απορρίφθηκεΔιαβάστε το μήνυμα της εξαίρεσης· μην το εμφανίζετε σε μη αξιόπιστους πελάτες

Επόμενα βήματα

  • Άδεια — δυνατότητες, και πώς να τις ελέγξετε κατά την εκτέλεση.
  • Επίλυση προβλημάτων — υδατογραφήματα, αποτυχίες εκκίνησης, και άλλα συμπτώματα.

Ήταν αυτή η σελίδα χρήσιμη;