DoconutExtensions

Καταχώρηση υπηρεσιών και middleware

DoconutExtensions (namespace Doconut.Middleware) είναι η στατική κλάση με τις τρεις κλήσεις που κάνει κάθε κεντρικός Doconut: μία καταχώρηση υπηρεσίας και δύο καταχωρίσεις middleware.

csharp
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // ΠΡΙΝ UseDoconut()
app.UseDoconut();

AddDoconut

text
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)

Δημιουργεί το DoconutOptions, τα επικυρώνει άμεσα (δείτε DoconutOptions → Startup validation), και καταχωρεί το πλήρες γράφημα υπηρεσιών:

ΥπηρεσίαΔιάρκεια ζωήςΡόλος
DoconutOptionsSingletonΤο αντικείμενο διαμόρφωσης
Υπηρεσία προσωρινής μνήμης συνεδρίαςSingletonToken → προσωρινή μνήμη συνεδρίας (το IMemoryCache επίσης καταχωρείται)
IDoconutLicenseServiceSingletonΆδεια που φορτώνεται μία φορά κατά την εκκίνηση (προτεραιότητα: LicenseStream → LicenseContent → LicensePath → αυτόματη αναζήτηση)
Διαδικασία σελίδας-εικόναςSingletonΕκτελεί επεξεργασία εικόνας για σελίδες (υδατογράφημα, περιστροφή, κλιμάκωση, σημειώσεις)
Ασφάλεια εγγράφου (αποθήκευση πρόσβασης)SingletonΔικαιώματα για σύνδεση token-σε-συνεδρία
ViewerTransientΗ δημόσια διεπαφή ανοίγματος/κλεισίματος
DocumentConverterTransientΔιεπαφή μετατροπής — απαιτεί το plugin Converter
DistributedDocumentPublisher—Δημοσιεύει τα τεχνικά αρχεία ενός εγγράφου στην κοινόχρηστη αποθήκευση
Health check "doconut"—Αναφέρει την κατάσταση άδειας/λήξης μέσω ελέγχων υγείας ASP.NET

Δεν υπάρχει αντίστοιχη κλήση στη προηγούμενη βιβλιοθήκη .NET Standard. Δημιούργησε το new Viewer(cache, accessor) ανά αίτηση και πέρασε επιλογές στο middleware· και τα δύο αντικαθίστανται από αυτή τη μοναδική καταχώρηση.

Δύο συμπεριφορές που αξίζει να γνωρίζετε:

  • Ο Converter απαιτεί το plugin του. Η επίλυση του DocumentConverter χωρίς το options.AddPlugin<ConverterPlugin>() προκαλεί εξαίρεση:
text
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().
  • Η δικαιοδοσία του plugin επικυρώνεται κατά την εκκίνηση. Μια ελλιπής άδεια, αρχείο legacy TRIAL, ή πληρωμένη άδεια χωρίς καταχωρημένη δυνατότητα plugin αποτυγχάνει στη χρονική στιγμή AddDoconut(). Οι προσωρινές/Δοκιμαστικές καταχωρίσεις παραμένουν μετά την ημερομηνία λήξης, ενώ οι πύλες χρόνου εκτέλεσης ανακαλούν τις ληγμένες δυνατότητες.

Ο έλεγχος υγείας ενσωματώνεται με τον τυπικό μηχανισμό ASP.NET Core — χαρτογραφήστε τον αν θέλετε την κατάσταση της άδειας στο endpoint υγείας σας:

csharp
app.MapHealthChecks("/health");

UseDoconut

text
IApplicationBuilder UseDoconut(this IApplicationBuilder app)

Προσθέτει το middleware Doconut page-image. Απαντά σε κάθε αίτηση που περιέχει την παράμετρο ερωτήματος ?token= — σελίδες, μικρογραφίες, αναζήτηση, σημειώσεις, ενέργειες σελίδας (ο πλήρης πίνακας αιτήσεων βρίσκεται στα Core Concepts → How the Viewer Works). Όταν το UnsafeMode είναι false, το επίπεδο ασφάλειας εγγράφου ενσωματώνεται αυτόματα πριν από αυτό.

Δεν δέχεται ορίσματα. Η μεταβίβαση ενός αντικειμένου DoconutOptions εδώ ήταν η μορφή της προηγούμενης βιβλιοθήκης και πλέον δεν μεταγλωττίζεται.

Το δείγμα αναφοράς δρομολογεί τα αιτήματα του widget μέσω ενός κλάδου διαδρομής, διατηρώντας το ιστορικό σχήμα αιτήματος:

csharp
app.MapWhen(
    ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
    branch => branch.UseDoconut());

UseDoconutResources

text
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)

Εξυπηρετεί τα ενσωματωμένα JS, CSS, εικόνες και γραμματοσειρές στο DoconutOptions.ResourcesPath (προεπιλογή /doconut-res). Αυτά είναι τα αρχεία για τα οποία το Viewer.ReferenceCss() / ReferenceScripts() δημιουργούν ετικέτες.

Πάντα καλέστε το πριν από το UseDoconut(). Εάν η περιοχή προβολής παραμένει κενή και η κονσόλα του προγράμματος περιήγησης εμφανίζει 404 για το /doconut-res/..., αυτή η κλήση λείπει ή είναι τοποθετημένη λανθασμένα.

Αυτή είναι η υποστηριζόμενη αντικατάσταση για τη χειροκίνητη ενσωμάτωση του middleware διαχείρισης ενσωματωμένων πόρων.

Serving from shared storage

Δύο επιπλέον καταχωρίσεις υπάρχουν για αναπτύξεις όπου ο κόμβος που αποδίδει ένα έγγραφο δεν είναι απαραίτητα ο κόμβος που εξυπηρετεί τις σελίδες του. Και οι δύο καλύπτονται πλήρως στο Distributed Deployments; οι υπογραφές είναι:

text
IServiceCollection AddDoconutDistributedAsyncPublish(...)   // εγγραφή σε ουρά δημοσίευσης παρασκηνίου
IServiceCollection AddDoconutDistributedWidgets(...)        // κοινόχρηστη αποθήκη υποστήριξης για μεταφορτώσεις widget

Η πλευρά ανάγνωσης είναι ένα ξεχωριστό middleware από το πακέτο Doconut.Clouds:

text
IApplicationBuilder UseDoconutCloud<THandler>(
    this IApplicationBuilder app,
    Action<CloudOptions>? configure = null,
    string pathPrefix = "/doconut-cloud")
    where THandler : BaseCloudHandler

UseDoconutWebFarm(...) και WebFarmOptions δεν υπάρχουν σε αυτή την έκδοση. Δείτε τον οδηγό μετάβασης για τη χαρτογράφηση ρύθμισης-ανά-ρύθμιση.

Ordering recap

csharp
app.UseRouting();
app.UseSession();          // απαιτείται όταν UnsafeMode = false
app.UseDoconutResources(); // 1η κλήση Doconut
app.UseDoconut();          // 2η κλήση Doconut (ή μέσω κλάδου MapWhen)

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