ASP.NET Core

Τρεις κλήσεις middleware, όχι μια επανεγγραφή

Το Doconut καταχωρείται όπως όλα τα άλλα στο ASP.NET Core: μια υπηρεσία στο container και middleware στην αλυσίδα. Κληρονομεί την εξουσιοδότησή σας, την καταγραφή, το γράφημα DI και την ιστορία ανάπτυξης, επειδή εκτελείται μέσα σε αυτά αντί δίπλα τους.

3
κλήσεις middleware για ενσωμάτωση
75
επεκτάσεις αρχείων έτοιμες προς χρήση
2
στόχοι ανάπτυξης: Windows, Docker

Το πρόβλημα

Ο φόρος ενσωμάτωσης που κανείς δεν προϋπολογίζει

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

Το Doconut είναι μια βιβλιοθήκη. Η AddDoconut() το τοποθετεί στη συλλογή υπηρεσιών σας· η UseDoconut() το τοποθετεί στην αλυσίδα. Εκτελείται υπό την ταυτότητα της διαδικασίας σας, βλέπει τη διαμόρφωσή σας, γράφει στον καταγραφέα σας, και αναπτύσσεται από ό,τι ήδη αναπτύσσει την εφαρμογή σας.

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

Δυνατότητες

Τι σας προσφέρει το middleware

Razor Pages, MVC και ελάχιστα APIs

Ο προβολέας δεν είναι δεσμευμένος σε κάποιο στυλ φιλοξενίας. Αποδώστε το div τοποθέτησης από μια Razor view ή μια στατική σελίδα και ανοίξτε το έγγραφο από μια ενέργεια ελεγκτή, έναν χειριστή σελίδας ή ένα χαρτογραφημένο endpoint.

Η εξουσιοδότησή σας, αμετάβλητη

Επειδή τα endpoints ζουν στην αλυσίδα σας, το [Authorize] λειτουργεί όπως πάντα. Δεν υπάρχει δεύτερο σύστημα ταυτότητας για ενοποίηση.

Ασφάλεια εγγράφου με βάση τη συνεδρία

Η ασφάλεια εγγράφου βασίζεται στην κατάσταση συνεδρίας του ASP.NET, γι' αυτό η UseSession() πρέπει να καταχωρηθεί πριν τη UseDoconut(). Αυτό σημαίνει ότι η αντίληψη του προβολέα για το ποιος είστε είναι η ίδια με αυτή της εφαρμογής.

Έτοιμο για web farm

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

Windows ή Docker

IIS, Kestrel ή μια εικόνα κοντέινερ που δημιουργείτε μόνοι σας. Τίποτα στην ενσωμάτωση δεν αλλάζει μεταξύ τους εκτός από το πού τοποθετείται το αρχείο άδειας.

Μετατροπή στην ίδια αλυσίδα

Με το πρόσθετο Converter, το DocumentConverter.ConvertAsync() εκτελείται στην ίδια διαδικασία — χωρίς δεύτερη υπηρεσία, χωρίς προσωρινή μεταφόρτωση, χωρίς επαναφορά.

Ενσωμάτωση

Καταχώρηση και ένα ανοιχτό endpoint

UserMayRead και ResolvePath είναι ο δικός σας κώδικας. Αυτό είναι το σημείο: το Doconut ποτέ δεν μαθαίνει ποια έγγραφα υπάρχουν ή ποιος επιτρέπεται να τα δει.

Υποστηριζόμενες πλατφόρμες

Razor PagesMVCMinimal APIs.NET 8.NET 6WindowsDocker
csharp
// Program.cs
builder.Services.AddDoconut(options =>
{
    options.LicensePath = "Doconut.Viewer.lic";
});
builder.Services.AddSession(); // document security rides on session state

var app = builder.Build();

app.UseSession();          // call UseSession() before UseDoconut()
app.UseDoconutResources(); // must be registered before UseDoconut()
app.UseDoconut();

// Open the document server-side, behind your own authorization
app.MapPost("/api/open", async (Viewer viewer, HttpContext ctx, string documentId) =>
{
    if (!await ctx.UserMayRead(documentId))
        return Results.Forbid();

    // The token is opaque — hand it to the widget, never log or persist it.
    string token = await viewer.OpenDocumentAsync(ResolvePath(documentId));
    return Results.Ok(new { token });
}).RequireAuthorization();

Λεπτομέρειες

Σειρά καταχώρησης και παγίδες

  • Η UseSession() πρέπει να έρθει πριν τη UseDoconut(). Η ασφάλεια εγγράφου εξαρτάται από αυτήν.
  • Η UseDoconutResources() πρέπει να έρθει πριν τη UseDoconut() και πρέπει να βρίσκεται πίσω από την ίδια εξουσιοδότηση με το υπόλοιπο της εφαρμογής.
  • Η Razor view ενσωματώνει το Doconut.Viewer και εκδίδει ReferenceCss / ReferenceScripts· το jQuery πρέπει να φορτωθεί πριν τα scripts του προβολέα.
  • Ορίστε το options.LicensePath από τη διαμόρφωση ώστε το αρχείο άδειας να μπορεί να τοποθετηθεί ως μυστικό αντί να ενσωματώνεται στην εικόνα.

Συχνές ερωτήσεις

Λειτουργεί με .NET 6 όπως και με .NET 8;

Ναι. Και τα δύο υποστηρίζονται και χρησιμοποιούν την ίδια αρχιτεκτονική DI-plus-middleware. Υπάρχουν αφιερωμένες σελίδες για το καθένα αν χρειάζεστε λεπτομέρειες ανά έκδοση.

Υπάρχει Razor component ή tag helper;

Όχι, και αυτό είναι σκόπιμο. Η ενσωμάτωση είναι πάντα middleware συν το JavaScript widget, το οποίο διατηρεί την ίδια ενσωμάτωση έγκυρη σε Razor Pages, MVC, Web Forms και Blazor αντί να κατακερματίζεται σε τέσσερα.

Πώς συμπεριφέρεται πίσω από φορτωτικό εξισορροπίας;

Το web farm και η κατανεμημένη ανάπτυξη υποστηρίζονται μέσω κοινής κρυφής μνήμης απόδοσης. Ένα έγγραφο που ανοίχτηκε σε έναν κόμβο παραμένει αναγνώσιμο όταν επόμενα αιτήματα φτάνουν σε άλλον.

Χρειάζεται να είναι εγκατεστημένο το Office στον διακομιστή;

Όχι. Η απόδοση είναι εγγενής — δεν υπάρχει διασύνδεση με Office, κανένα headless Word, και καμία αυτοματοποίηση COM για να φροντίζει.

Δοκιμάστε το με τα δικά σας έγγραφα

Μια προσωρινή άδεια απαιτεί λίγα λεπτά για να ζητηθεί και εκτελείται εξ ολοκλήρου στον δικό σας υπολογιστή. Τα αρχεία που έχουν σημασία είναι εκείνα που ήδη διακόπτουν τον τρέχοντα προβολέα σας.