DoconutExtensions

Service and middleware registration

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

csharp
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // BEFORE UseDoconut()
app.UseDoconut();

AddDoconut

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

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

ΥπηρεσίαΔιάρκεια ζωήςΡόλος
DoconutOptionsΜοναδικόΤο αντικείμενο διαμόρφωσης
IViewerFactoryΜοναδικόΧαρτογραφεί επεκτάσεις σε προβολείς μορφής
IDocumentSessionManagerΜοναδικόToken → cache συνεδρίας (IMemoryCache επίσης καταχωρείται)
IDoconutLicenseServiceΜοναδικόΆδεια φορτώνεται μία φορά κατά την εκκίνηση (προτεραιότητα: LicenseStreamLicenseContentLicensePath → αυτόματη αναζήτηση)
PageImageServiceΜοναδικόΔιαδικασία εικόνας σελίδας (υδατογράφημα/περιστροφή/κλιμάκωση/σχόλια)
Ασφάλεια εγγράφου (αποθήκη πρόσβασης)ΜοναδικόΠαραχωρήσεις για σύνδεση token-σε-συνεδρία
ViewerΠροσωρινόΔημόσια διεπαφή ανοίγματος/κλεισίματος
DocumentConverterΠροσωρινόΔιεπαφή μετατροπής — απαιτεί το πρόσθετο Converter
DistributedDocumentPublisherΔημοσιεύει τα τεχνικά στοιχεία ενός εγγράφου σε κοινόχρηστη αποθήκευση
Έλεγχος υγείας "doconut"Αναφέρει την κατάσταση άδειας/λήξης μέσω ελέγχων υγείας ASP.NET

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

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

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

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

csharp
app.MapHealthChecks("/health");

UseDoconut

text
IApplicationBuilder UseDoconut(this IApplicationBuilder app)

Προσθέτει το middleware εικόνας σελίδας Doconut. Απαντά σε κάθε αίτηση που περιέχει την παράμετρο ερωτήματος ?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(). Εάν η περιοχή του viewer παραμένει κενή και η κονσόλα του προγράμματος περιήγησης εμφανίζει 404 για /doconut-res/..., αυτή η κλήση λείπει ή είναι τοποθετημένη λανθασμένα.

Αυτή είναι η υποστηριζόμενη αντικατάσταση για τη χειροκίνητη ενσωμάτωση του middleware ενσωματωμένων πόρων με app.UseMiddleware<EmbeddedResourceMiddleware>().

Serving from shared storage

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

text
IServiceCollection AddDoconutDistributedAsyncPublish(...)   // opt-in background publish queue
IServiceCollection AddDoconutDistributedWidgets(...)        // shared backing store for widget uploads

Η πλευρά ανάγνωσης είναι ένα ξεχωριστό 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();          // required when UnsafeMode = false
app.UseDoconutResources(); // 1st Doconut call
app.UseDoconut();          // 2nd Doconut call (or via a MapWhen branch)

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