Εγκατάσταση
Προσθήκη του Doconut στην εφαρμογή web .NET Framework 4.7.2
Doconut.NETFramework φιλοξενεί τον προβολέα Doconut σε μια κλασική εφαρμογή ASP.NET στο .NET Framework 4.7.2 — IIS ή IIS Express, MVC 5 ή Web Forms. Η ρύθμιση αποτελείται από τρία μέρη: το πακέτο NuGet, δύο καταχωρίσεις στο Web.config και μία κλήση στο Global.asax. Αυτή η σελίδα καλύπτει και τα τρία· Γρήγορη Εκκίνηση τοποθετεί στη συνέχεια ένα έγγραφο σε μια σελίδα.
Απαιτήσεις
- Το web project στοχεύει .NET Framework 4.7.2 ή νεότερο. Ένα project 4.7 δεν μπορεί να καταναλώσει αυτό το πακέτο· πρέπει πρώτα να αλλάξει στόχο.
- Ο ιστότοπος εκτελείται στην ενσωματωμένη pipeline (η προεπιλογή για τις ομάδες εφαρμογών IIS και IIS Express).
Αυτή η σελίδα καλύπτει το Doconut.NETFramework 26.9.0 και μεταγενέστερα. Οι εκδόσεις 26.8.0 και παλαιότερες στόχευαν .NET Framework 4.7 με διαφορετικό API· αυτή η γραμμή έχει διακοπεί. Η ενημέρωση μιας υπάρχουσας εφαρμογής πέρα από αυτό το όριο καλύπτεται στη Μετανάστευση.
Εγκατάσταση του πακέτου
Από την Κονσόλα Διαχειριστή Πακέτων:
Install-Package Doconut.NETFrameworkΉ, σε έργο τύπου SDK:
dotnet add package Doconut.NETFrameworkΗ μηχανή απόδοσης είναι ενσωματωμένη στο πακέτο: δεν υπάρχει ξεχωριστό assembly μηχανής για αναφορά, αντιγραφή ή ανάπτυξη. Προαιρετικές δυνατότητες διανέμονται ως δικά τους πακέτα — για παράδειγμα Doconut.NETFramework.Converter και Doconut.NETFramework.Dicom — και το καθένα απαιτεί άδεια που το παρέχει (δείτε το Σύστημα Πρόσθετων).
Διαμόρφωση Web.config
Το Doconut εξυπηρετεί δύο είδους αιτήματα, και το IIS δρομολογεί και τα δύο μέσω του Web.config:
DocImage.axd— η σελίδα του προβολέα, μικρογραφία, αναζήτηση και σημείο ανάλυσης, εξυπηρετείται από τοDoconut.DocImageHandler./doconut-res/*— τα δικά του scripts, φύλλα στυλ και εικονίδια, ενσωματωμένα στο assembly και εξυπηρετούνται από τοDoconut.DoconutResourceModule.
Προσθέστε και τα δύο, καθώς και τις ρυθμίσεις από τις οποίες εξαρτώνται:
<configuration>
<system.web>
<!-- MVC 5 only: Razor compiles views at run time and needs the netstandard facade. -->
<compilation targetFramework="4.7.2">
<assemblies>
<add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51" />
</assemblies>
</compilation>
<!-- maxRequestLength is in KILOBYTES: 200 MB. -->
<httpRuntime targetFramework="4.7.2" maxRequestLength="204800" />
<!-- Read .cshtml and .aspx files as UTF-8, not as the server's ANSI code page. -->
<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- maxAllowedContentLength is in BYTES: the same 200 MB. -->
<requestLimits maxAllowedContentLength="209715200" />
</requestFiltering>
</security>
<modules runAllManagedModulesForAllRequests="true">
<add name="DoconutResourceModule" type="Doconut.DoconutResourceModule, Doconut" />
</modules>
<handlers>
<add name="DocImage" verb="GET,HEAD,POST" path="DocImage.axd"
type="Doconut.DocImageHandler, Doconut" />
</handlers>
</system.webServer>
</configuration>Κάθε γραμμή αποτρέπει μια αποτυχία που δεν εγείρει εξαίρεση:
verb="GET,HEAD,POST"— διατηρήστε τοHEAD. Ο προβολέας στέλνει ένα αίτημαHEADγια τη σελίδα 1 ώστε να εντοπίσει κινούμενες εικόνες. Χωρίς αυτό το verb, το IIS απαντά404πριν εκτελεστεί ο χειριστής: τα έγγραφα εμφανίζονται, αλλά η ανίχνευση κίνησης δεν λειτουργεί ποτέ και η κονσόλα του προγράμματος περιήγησης γεμίζει με 404.runAllManagedModulesForAllRequests="true"— τα/doconut-res/*.js,.cssκαι.pngφαίνονται ως στατικά αρχεία, και το IIS θα τα παραδώσει στον στατικό χειριστή αρχείων πριν το module πόρων τα δει. Το αποτέλεσμα είναι ένας προβολέας χωρίς scripts ή εικονίδια.<globalization fileEncoding="utf-8">— τα αρχεία σελίδας που αποθηκεύονται ως UTF-8 χωρίς BOM διαβάζονται διαφορετικά με τη σελίδα κωδικοποίησης ANSI του διακομιστή, έτσι κάθε χαρακτήρας εκτός ASCII φθάνει στον περιηγητή διπλά κωδικοποιημένος (ένα em dash εμφανίζεται ως—). Το αρχείο είναι σωστό στο δίσκο, και η σελίδα εξακολουθεί να δηλώνει<meta charset="utf-8">.- Το assembly
netstandard(MVC 5) — το Razor μεταγλωττίζει τις προβολές όταν ζητούνται για πρώτη φορά, με τη δική του λίστα αναφορών που δεν περιλαμβάνει αυτή τη διασύνδεση. Μια προβολή που κάνει κάτι δυναμικό πέρα από απλή πρόσβαση σε μέλος αποτυγχάνει μεCS0012και επιστρέφει ένα κενό500, και μόνο οι σελίδες που την προκαλούν αποτυγχάνουν. Το σφάλμα του μεταγλωττιστή εμφανίζεται μόνο στο ημερολόγιο συμβάντων των Windows (πηγή ASP.NET). Οι εφαρμογές Web Forms δεν χρειάζονται αυτή τη γραμμή. - Όρια μεταφόρτωσης — το ASP.NET διαβάζει ολόκληρο το σώμα του αιτήματος πριν τρέξει οποιοσδήποτε χειριστής, έτσι μια μεταφόρτωση πάνω από αυτά τα όρια απορρίπτεται από το IIS με τη δική του σελίδα σφάλματος. Διατηρήστε το
maxRequestLength(kilobytes) και τοmaxAllowedContentLength(bytes) σε συμφωνία, και πάνω από το μεγαλύτερο αρχείο που οι χρήστες σας ανοίγουν ή ανεβάζουν.
Δύο ακόμη ρυθμίσεις έχουν σημασία, και συνήθως είναι ήδη σωστές:
- Η κατάσταση συνεδρίας παραμένει ενεργή. Από προεπιλογή μια σελίδα εξυπηρετείται μόνο στη συνεδρία ASP.NET που άνοιξε το έγγραφο, έτσι ο ιστότοπος δεν πρέπει να ορίζει
<sessionState mode="Off" />. Δείτε το Συνεδρίες & Ασφάλεια. - Ανακατευθύνσεις binding. Διατηρήστε τις ανακατευθύνσεις binding
<runtime>που γράφει το NuGet στοWeb.config. Σε ένα έργο τύπου SDK, αντιγράψτε τις από το παραγόμενοbin\<YourApp>.dll.config, επειδή το κλασικό ASP.NET διαβάζει τις ανακατευθύνσεις μόνο από τοWeb.config. Μια ανακατεύθυνση που αναφέρει μια έκδοση που λείπει από τοbin\σταματά όλη την εφαρμογή με κενό500κατά την εκκίνηση.
Καταχώρηση Doconut στο Global.asax
Δεν υπάρχει δημιουργός (builder) ούτε αγωγός μεσαζόν (middleware pipeline) στο System.Web. Το Doconut δημιουργείται μία φορά ανά διεργασία εργαζομένου από το DoconutHost.Initialize στο Application_Start και απελευθερώνεται από το DoconutHost.Shutdown στο Application_End:
// Global.asax.cs
protected void Application_Start()
{
Doconut.DoconutHost.Initialize(options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});
}
protected void Application_End()
{
Doconut.DoconutHost.Shutdown();
}Το DoconutHost.Initialize δημιουργεί τις υπηρεσίες που χρησιμοποιεί ο χειριστής, το μοντέλο πόρων και ο κώδικάς σας. Ο κώδικάς σας έχει πρόσβαση σε αυτές μέσω του DoconutHost.Services (δείτε το DoconutHost). Μόνο η πρώτη κλήση ρυθμίζει κάτι· η δεύτερη κλήση αγνοείται. Σε μια εφαρμογή MVC, διατηρήστε επίσης τις δύο διαδρομές του Doconut εκτός δρομολόγησης — το Γρήγορη Εκκίνηση δείχνει το πλήρες Application_Start.
Όλες οι επιλογές
DoconutOptions δέχεται τις παρακάτω ρυθμιζόμενες ιδιότητες. Κάθε μία είναι προαιρετική.
| Ιδιότητα | Προεπιλογή | Περιγραφή |
|---|---|---|
UnsafeMode | false | Όταν είναι false, το DocImage.axd εξυπηρετεί μια σελίδα μόνο στη συνεδρία ASP.NET που άνοιξε το έγγραφο. Όταν είναι true, εξυπηρετείται οποιοδήποτε αίτημα που φέρει το token. Αφήστε το false. |
ShowDoconutInfo | false | Όταν είναι true, ένα αίτημα DocImage.axd χωρίς token επιστρέφει μια μπάρα έκδοσης αντί για 404. Χρήσιμο ως γρήγορος έλεγχος· αφήστε το απενεργοποιημένο στην παραγωγή. |
ResourcesPath | "/doconut-res" | Που ο πόρος εξυπηρετεί τα ενσωματωμένα σενάρια, τα στυλ και τα εικονίδια. Αλλάξτε το μόνο μαζί με το ResPath του προβολέα και τυχόν IgnoreRoute του MVC. |
LicensePath | "" | Πλήρης διαδρομή προς το αρχείο άδειας. Κενό σημαίνει μετάβαση στην επόμενη πηγή, και στη συνέχεια στην αυτόματη ανίχνευση. |
LicenseContent | "" | Ακατέργαστο περιεχόμενο άδειας — από μεταβλητή περιβάλλοντος, μυστικό αποθηκευτικό χώρο ή βάση δεδομένων. |
LicenseStream | null | Άδεια ως ροή, διαβάζεται μία φορά κατά την εκκίνηση. |
MiddlewarePath | "/doconut" | Δεν χρησιμοποιείται σε αυτό το πακέτο. Το σημείο τέλους της σελίδας είναι ο χειριστής DocImage.axd που δηλώνεται στο Web.config, ό,τι και αν έχει οριστεί. Εξακολουθεί να επικυρώνεται: πρέπει να ξεκινά με / και να διαφέρει από το ResourcesPath. |
ResetLicense | false | Δεν χρησιμοποιείται σε αυτό το πακέτο. Η άδεια διαβάζεται μία φορά, στο DoconutHost.Initialize; επαναλάβετε την κυκλοφορία της πισίνας εφαρμογών μετά την αντικατάσταση του αρχείου άδειας. |
Όταν ορίζονται περισσότερες από μία πηγές άδειας, το LicenseStream υπερισχύει του LicenseContent, το οποίο υπερισχύει του LicensePath, το οποίο υπερισχύει της αυτόματης ανίχνευσης — δείτε το Ρύθμιση Άδειας.
Doconut.DoconutHost.Initialize(options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
options.ResourcesPath = "/doconut-res"; // where the viewer's JS/CSS/images are served from
options.UnsafeMode = false; // keep session security on
options.ShowDoconutInfo = false;
});
// Το σημείο τέλους της σελίδας δεν είναι επιλογή εδώ: είναι ο χειριστής DocImage.axd που δηλώνεται στο Web.config.Επόμενα βήματα
- Γρήγορη Εκκίνηση — ανοίξτε ένα έγγραφο και αποδώστε το στον περιηγητή, σε MVC 5 ή Web Forms.
- Ρύθμιση Άδειας — όπου το Doconut αναζητά το αρχείο άδειας σας.
Ήταν αυτή η σελίδα χρήσιμη;