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

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

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

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

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

LicenseStream υπερισχύει του LicenseContent υπερισχύει του LicensePath υπερισχύει του auto-search.

Με διαδρομή

LicensePath περνιέται στο File.Exists ακριβώς όπως δίνεται. Μια σχετική διαδρομή επιλύεται σε σχέση με τον τρέχοντα φάκελο εργασίας της διεργασίας — όχι τον φάκελο του έργου σας, και όχι τον φάκελο όπου βρίσκεται το Program.cs. Αν η διαδρομή δεν επιλυθεί, το Doconut δεν πετάει εξαίρεση και δεν επιστρέφει στην αυτόματη αναζήτηση — απλώς δεν φορτώνει άδεια και το πρόγραμμα προβολής προσθέτει υδατογράφημα. Η αυτόματη αναζήτηση εκτελείται μόνο όταν κανένα από τα LicensePath, LicenseContent ή LicenseStream δεν έχει οριστεί. Τα αρχεία άδειας ανά plugin στον ίδιο φάκελο (Doconut.Viewer.<Capability>.lic) διαβάζονται μαζί του, έτσι ώστε τα LicensePath και AddPlugin<...>() να λειτουργούν μαζί όταν οι άδειες των plugins βρίσκονται δίπλα στην κύρια άδεια.

Προτιμήστε μια απόλυτη διαδρομή (για παράδειγμα δημιουργημένη από IWebHostEnvironment.WebRootPath ή AppContext.BaseDirectory), ή παραλείψτε εντελώς το LicensePath και βασιστείτε στην αυτόματη ανίχνευση παρακάτω.

csharp
builder.Services.AddDoconut(options =>
{
    options.LicensePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
});

Με ροή

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

csharp
// Ιεραρχία: LicenseStream > LicenseContent > LicensePath > αυτόματη αναζήτηση.
builder.Services.AddDoconut(options =>
{
    options.LicenseStream = licenseStream;
});

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

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

csharp
// XML άδειας από βάση δεδομένων, μεταβλητή περιβάλλοντος ή διαχειριστή μυστικών —
// Κανένα αρχείο στο δίσκο. Υπέρβηται μόνο από LicenseStream.
builder.Services.AddDoconut(options =>
{
    options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});

Αυτόματη ανίχνευση

Μη διαμορφώσετε καμία από τις τρεις ρητές πηγές, και το Doconut θα ψάξει την άδεια αυτόματα:

csharp
// Μην ρυθμίσετε τίποτα και το Doconut ψάχνει την άδεια μόνο του, μόνο σε αυτούς τους δύο φακέλους:
//   1. {CurrentDirectory}/wwwroot
//   2. {AppContext.BaseDirectory}/wwwroot   (wwwroot μέσα στο φάκελο εξόδου της κατασκευής)
// Αναζητά πρώτα το Doconut.lic, μετά το Doconut.Viewer.lic, καθώς και τυχόν ανά plugin.
// Αρχεία Doconut.Viewer.<Capability>.lic δίπλα του.
builder.Services.AddDoconut();

Οι φάκελοι ανίχνευσης, με τη σειρά, και τα ονόματα αρχείων που ψάχνονται σε καθέναν:

text
1. {CurrentDirectory}/wwwroot
2. {AppContext.BaseDirectory}/wwwroot

Filenames (checked in each folder above, in order):
  Doconut.lic                          — base viewer license (checked first)
  Doconut.Viewer.lic                   — base viewer license
  Doconut.Viewer.<Capability>.lic      — per-plugin license, alongside the base license

Τίποτα εκτός ενός φακέλου wwwroot δεν διαβάζεται: ένα .lic στον ίδιο φάκελο εξόδου, ή στο wwwroot/lib, αγνοείται.

Αντιγράψτε την άδεια στο φάκελο εξόδου σας

Όταν η διεργασία δεν εκτελείται από τον φάκελο του έργου — μια δημοσιευμένη εφαρμογή, IIS, ένα κοντέινερ, ένας εκτελεστής δοκιμών — η πρώτη ανίχνευση αποτυγχάνει, και η δεύτερη, {AppContext.BaseDirectory}/wwwroot, πρέπει να βρει το αρχείο. Η δοκιμαστική εφαρμογή του SDK αντιγράφει τις άδειες εκεί σε κάθε κατασκευή με αυτόν τον στόχο MSBuild:

xml
<Target Name="CopyLicensesToOutput" AfterTargets="Build">
  <ItemGroup>
    <DoconutLicenseFiles Include="$(MSBuildProjectDirectory)\wwwroot\*.lic" />
    <StaleOutputLicenses Include="$(OutDir)wwwroot\*.lic" />
  </ItemGroup>
  <!-- Διαγράψτε πρώτα, ώστε η μετονομασία ή η αφαίρεση ενός .lic στο wwwroot να το αφαιρεί επίσης από την έξοδο. -->
  <Delete Files="@(StaleOutputLicenses)" />
  <Copy SourceFiles="@(DoconutLicenseFiles)" DestinationFolder="$(OutDir)wwwroot" />
</Target>

Ο προορισμός πρέπει να είναι $(OutDir)wwwroot: ένα .lic που αντιγράφεται στη ρίζα εξόδου δεν εντοπίζεται ποτέ από την αυτόματη αναζήτηση. Τα παραδείγματα LicensePath σε αυτή τη σελίδα δείχνουν στην ίδια θέση.

Κρατήστε τα αρχεία .lic εκτός ελέγχου πηγής — αναπτύξτε τα δίπλα στην εφαρμογή, ή ενσωματώστε την άδεια μέσω LicenseContent ή LicenseStream από το μυστικό σας αποθηκευτικό χώρο.

Τι συμβαίνει χωρίς άδεια

Η απουσία άδειας δεν προκαλεί εξαίρεση. AddDoconut() επιτυγχάνει, η εφαρμογή ξεκινά και ο προβολέας λειτουργεί — αλλά κάθε σελίδα φέρει υδατογράφημα αξιολόγησης και δεν χορηγείται καμία προαιρετική δυνατότητα.

Ένα αρχείο άδειας που βρέθηκε αλλά απορρίφθηκε είναι διαφορετικό. Μια μη έγκυρη υπογραφή, παραποίηση, μαύρη λίστα ή μια έκδοση εκτός του χρονικού παραθύρου της άδειας προκαλεί το OpenDocumentAsync να ρίξει LicenseException με License.RejectionMessage. Μια άδεια που έχει λήξει κατά ημερολογιακό τρόπο και δεν έχει μήνυμα απόρριψης συνεχίζει σε λειτουργία με υδατογράφημα.

Τα πρόσθετα χρειάζονται δυνατότητες

Η καταχώρηση ενός πρόσθετου χωρίς αντίστοιχη δικαιούσια είναι διαφορετική: για έλλειψη άδειας, ένα παλιό αρχείο TRIAL, ή μια επί πληρωμή άδεια χωρίς αυτή τη δυνατότητα, το AddDoconut() ρίχνει InvalidOperationException, έτσι η εφαρμογή δεν ξεκινά. Για παράδειγμα, η καταχώρηση του πρόσθετου Converter χωρίς άδεια που χορηγεί Converter:

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.

Το μήνυμα σας λέει άμεσα τη διόρθωση: είτε αφαιρέστε την κλήση options.AddPlugin<...>() για εκείνο το πρόσθετο, είτε εγκαταστήστε μια επί πληρωμή άδεια ή μια ενεργή προσωρινή/δωρεάν (NFR) άδεια που χορηγεί τη δυνατότητα. Οι προσωρινές καταχωρήσεις επιτρέπεται να παραμείνουν μετά τη λήξη τους ώστε μια ήδη ρυθμισμένη εφαρμογή να υποβαθμιστεί κατά την εκτέλεση αντί να καταρρεύσει κατά την επανεκκίνηση· μετά τη λήξη, οι δυνατότητές τους παραμένουν ανακλημένες.

Επαλήθευση της φορτωμένης άδειας

Χρησιμοποιήστε το IDoconutLicenseService, την ίδια πηγή αλήθειας που χρησιμοποιεί το SDK, για να εκθέσετε ένα πιστοποιημένο διαγνωστικό endpoint ή για να ελέγξετε τις σημαίες χαρακτηριστικών. Μην επιστρέφετε το περιεχόμενο ή τα κλειδιά της άδειας.

csharp
app.MapGet("/api/doconut/license", (IDoconutLicenseService license) => Results.Ok(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
}));

Η άδεια διαβάζεται κατά την καταχώρηση του AddDoconut(). Το ResetLicense είναι επί του παρόντος μια ιδιότητα συμβατότητας χωρίς ενεργή διαδρομή επαναφόρτωσης, έτσι η αντικατάσταση ενός αρχείου άδειας απαιτεί επανεκκίνηση της εφαρμογής.

Πίνακας αντιμετώπισης προβλημάτων

ΣύμπτωμαΠιθανή αιτίαΈλεγχος
Ο προβολέας λειτουργεί αλλά κάθε σελίδα έχει υδατογράφημαΔεν φορτώθηκε άδεια, ή η άδεια έχει λήξει κατά ημερολογιακό τρόποΕπιλύστε το IDoconutLicenseService· επαληθεύστε τον φάκελο εξόδου και τον τρέχοντα φάκελο εργασίας της διαδικασίας
AddDoconut() ρίχνει εξαίρεση για ένα πρόσθετοΗ άδεια δεν χορηγεί αυτή τη δυνατότητα του πρόσθετουΕλέγξτε το IsCapabilityGranted(...) και αφαιρέστε τις καταχωρήσεις που δεν αγοράσατε
Μια ρυθμισμένη σχετική διαδρομή λειτουργεί τοπικά αλλά όχι στο IIS/containerΟ τρέχων φάκελος εργασίας της διαδικασίας άλλαξεΧρησιμοποιήστε το AppContext.BaseDirectory ή μια απόλυτη διαδρομή
Αντικαταστημένο .lic αρχείο δεν έχει καμία επίδρασηΗ υπηρεσία άδειας singleton είχε ήδη δημιουργηθείΕπανεκκινήστε την εφαρμογή
OpenDocumentAsync ρίχνει LicenseExceptionΗ υπογραφή, ο τομέας, το χρονικό παράθυρο έκδοσης, η μαύρη λίστα ή η πύλη χρόνου εκτέλεσης του πρόσθετου απέρριψαν την άδειαΔιαβάστε το μήνυμα εξαίρεσης/απόρριψης χωρίς να το εκθέσετε σε μη αξιόπιστους πελάτες

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

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