Αντιμετώπιση προβλημάτων
Διάγνωση κοινών σφαλμάτων
Πολλές αποτυχίες του System.Web δεν εγείρουν εξαίρεση που μπορείτε να δείτε: η σελίδα απαντά με ένα κενό 500, ένα εικονίδιο δίνει 404 ή ένα αίτημα δεν επιστρέφει ποτέ. Αυτή η σελίδα είναι οργανωμένη με βάση ό,τι παρατηρείτε. Τα παρατιθέμενα μηνύματα είναι το κυριολεκτικό κείμενο που παράγει το Doconut.
Συμπτώματα με μια ματιά
| Τι βλέπετε | Πιθανότερη αιτία | Διόρθωση |
|---|---|---|
Κάθε αίτημα απαντά με ένα κενό 500 | Μια εξαίρεση στο Application_Start: ένα plugin χωρίς την άδειά του, μια μη έγκυρη επιλογή, μια ελλιπής διαμόρφωση farm — ή μια ανακατεύθυνση binding που ονομάζει μια έκδοση που δεν υπάρχει στο bin\ | Καταγραφή συμβάντων Windows, Εφαρμογή, πηγή ASP.NET. Δείτε Αποτυχίες εκκίνησης |
Κάποιες σελίδες MVC απαντούν με ένα κενό 500 | Το Razor μεταγλωττίζει τις προβολές κατά την εκτέλεση: η προσκηνή netstandard λείπει από το <compilation>, ή η προβολή χρησιμοποιεί C# νεότερο από το 5 (?., $"...", nameof) | Προσθέστε την προσκηνή (Εγκατάσταση); μετακινήστε τη λογική από την προβολή στον ελεγκτή |
Οι σελίδες εμφανίζουν —, … ή παρόμοιο αντί για παύλες και τόνους | Αρχεία σελίδων χωρίς byte-order mark διαβάζονται με τη σελίδα κώδικα ANSI του διακομιστή | <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" /> |
Η κονσόλα του προγράμματος περιήγησης εμφανίζει 404 για HEAD /DocImage.axd?...&page=1 | Ο χειριστής είναι καταχωρημένος χωρίς το ρήμα HEAD | verb="GET,HEAD,POST" στον χειριστή |
| Το έγγραφο αποδίδεται, αλλά τα εικονίδια της γραμμής εργαλείων και ο δείκτης φόρτωσης λείπουν | ResPath δείχνει στη ρίζα του πόρου, ή ξεκινά με / | ResPath: 'doconut-res/images' |
Τα αιτήματα /doconut-res/... απαντούν 404 | Το μοντέλο πόρου δεν είναι καταχωρημένο, το runAllManagedModulesForAllRequests είναι απενεργοποιημένο, ή η δρομολόγηση MVC παγιδεύει τη διαδρομή | Η καταχώρηση <modules>, και routes.IgnoreRoute("doconut-res/{*pathInfo}") |
Ο προβολέας αναφέρει The viewer handler could not be reached (no response). | BasePath ξεκινά με / ('/myapp' γίνεται //myapp/…, άλλο κεντρικό υπολογιστή) | BasePath: '/' στη ρίζα του ιστότοπου· 'myapp' σε εικονικό φάκελο |
Ο προβολέας αναφέρει Please make sure your middleware is configured. | DocImage.axd απάντησε 404: ο χειριστής δεν βρίσκεται στο Web.config, η δρομολόγηση MVC το παγίδευσε, ή το BasePath δείχνει αλλού | Η καταχώρηση <handlers>, routes.IgnoreRoute("{resource}.axd/{*pathInfo}"), και BasePath |
Κάθε σελίδα εμφανίζει You Are Not Authorized To View This Page. | Το έγγραφο ανοίχτηκε σε αίτημα χωρίς κατάσταση συνεδρίας, η κατάσταση συνεδρίας είναι απενεργοποιημένη, ή το cookie συνεδρίας δεν φτάνει στο DocImage.axd | Δείτε Μη εξουσιοδοτημένο |
| Μια μετατροπή Web Forms δεν επιστρέφει ποτέ | Η σελίδα μπλοκάρει στο ConvertAsync — ένα αδιέξοδο | Async="true" + RegisterAsyncTask (Πρόσθετο Μετατροπέα) |
| Κάθε σελίδα φέρει υδατογράφημα αξιολόγησης | Δεν βρέθηκε άδεια — δεν βρίσκεται στο <site root>\wwwroot | Ρύθμιση Άδειας |
Ένα widget φορτώνει, αλλά η πρώτη του ενέργεια απαντά 404 | Το widget δεν είναι ενεργοποιημένο, ή το basePath του δεν είναι '/DocImage.axd' | options.Add…Widget(), και basePath: '/DocImage.axd' |
| Το πρώτο έγγραφο μετά την εκκίνηση ή την επαναφορά του ιστότοπου διαρκεί ένα λεπτό ή περισσότερο· τα επόμενα είναι γρήγορα | Οι μηχανές εγγράφων φορτώνονται στην πρώτη άνοιξη, και το antivirus σε πραγματικό χρόνο τις σαρώει καθώς φορτώνονται | Ζεστάνετε τον ιστότοπο και διατηρήστε την πισίνα ενεργή — δείτε Το πρώτο έγγραφο μετά από εκκίνηση |
| Μια μεγάλη μεταφόρτωση εμφανίζει σελίδα σφάλματος IIS | Η μεταφόρτωση υπερβαίνει το maxRequestLength (KB) ή το maxAllowedContentLength (bytes) | Αυξήστε και τα δύο πάνω από το μέγιστο αρχείο ή όριο widget σας |
Αποτυχίες εκκίνησης
Μια εξαίρεση που ρίχνεται στο Application_Start δεν φτάνει στο πρόγραμμα περιήγησης: κάθε αίτημα απαντά με ένα κενό 500, και το αρχείο καταγραφής IIS δεν εμφανίζει κάτι χρήσιμο. Η εξαίρεση βρίσκεται στο Windows event log (Προβολή Συμβάντων → Windows Logs → Application, πηγή ASP.NET). Τα συνηθισμένα:
Ένα plugin χωρίς την άδειά του:
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.Το Doconut.Viewer.<Capability>.lic του plugin πρέπει να βρίσκεται στο wwwroot, δίπλα στο Doconut.Viewer.lic. Μια ελλιπής άδεια και ένα παλιό αρχείο TRIAL δεν παρέχουν δυνατότητες plugin.
Μη έγκυρες επιλογές:
DoconutOptions.MiddlewarePath must be a non-empty path starting with '/'.
DoconutOptions.ResourcesPath must be a non-empty path starting with '/'.
DoconutOptions.MiddlewarePath and ResourcesPath must be different paths.Ένα assembly που δεν μπορεί να φορτωθεί.
Το ASP.NET φορτώνει κάθε assembly στο bin\ όταν ξεκινά η εφαρμογή, έτσι μια ανακατεύθυνση binding στο Web.config που ονομάζει μια έκδοση που λείπει από το bin\ σταματά ολόκληρο τον ιστότοπο. Αντιγράψτε τις ανακατευθύνσεις που δημιούργησε το NuGet (για έργο τύπου SDK, από το bin\<YourApp>.dll.config) αντί να τις επεξεργαστείτε χειροκίνητα, και αντιγράψτε τις ξανά μετά τις ενημερώσεις πακέτων.
Δεν Είστε Εξουσιοδοτημένοι Να Προβάλετε Αυτή τη Σελίδα.
Η σελίδα απορρίπτεται επειδή η αιτούσα συνεδρία ASP.NET δεν είχε ποτέ παραχωρηθεί το έγγραφο. Ελέγξτε, με τη σειρά:
- Το άνοιγμα εκτελέστηκε με κατάσταση συνεδρίας. Οι ελεγκτές MVC και οι σελίδες Web Forms την έχουν. Ένα προσαρμοσμένο
IHttpHandlerπου ανοίγει έγγραφα πρέπει να υλοποιείSystem.Web.SessionState.IRequiresSessionState, αλλιώς δεν έχει συνεδρία για να παραχωρήσει. - Η κατάσταση συνεδρίας είναι ενεργή.
<sessionState mode="Off" />απορρίπτει κάθε σελίδα. - Το cookie φτάνει στον χειριστή. Τα αιτήματα ίδιας προέλευσης του widget μεταφέρουν
ASP.NET_SessionId· ένα script, μια κλήση server-to-server ή μια σελίδα διαφορετικής προέλευσης χωρίς cookies δεν το κάνει. - Web farm: το άνοιγμα συνέδεσε το πρόγραμμα περιήγησης (
DocOptions.BrowserId) και η σελίδα περνάει το εισιτήριο (objViewer.View(token, access))· κάθε κόμβος χρησιμοποιεί το ίδιο κλειδί υπογραφής.
Η απόρριψη είναι μια εικόνα που σερβίρεται με κατάσταση 200, περίπου 2 KB. Ένας παρατηρητής που ελέγχει μόνο κωδικούς κατάστασης την μετρά ως σελίδα.
Η Συνεδρία Εγγράφου Δεν Βρέθηκε. Παρακαλώ Ανοίξτε Ξανά το Έγγραφο.
Το token έληξε (παράθυρο κύλισης, DocOptions.TimeOut, προεπιλογή 60 λεπτά), το έγγραφο έκλεισε, ή — σε έναν μοναδικό διακομιστή — η δεξαμενή εφαρμογών ανανεώθηκε. Η ανανέωση συμβαίνει προγραμματισμένα, σε κάθε επεξεργασία Web.config, και μετά το χρονικό όριο αδράνειας της δεξαμενής (20 λεπτά προεπιλογή στο IIS). Ανοίξτε ξανά το έγγραφο για νέο token.
Αποτυχία Ανοίγματος Εγγράφου
LicenseException με λόγο απόρριψης — το αρχείο άδειας βρέθηκε αλλά απορρίφθηκε (μη έγκυρη υπογραφή, παραποίηση, μαύρη λίστα, ή μια έκδοση εκτός του παραθύρου έκδοσης της άδειας). Το άνοιγμα αποκλείεται αντί για υδατογράφημα.
LicenseException:
This document type requires the 'Dicom' plugin license.Η επέκταση διαχειρίζεται μόνο από ένα πρόσθετο (εδώ DICOM) του οποίου η δυνατότητα δεν έχει παραχωρηθεί.
FormatNotSupportedException — κανένας προβολέας (ενσωματωμένος, πρόσθετο ή προσαρμοσμένος) δεν υποστηρίζει την επέκταση. DoconutOptions.RegisterViewer μπορεί να προσθέσει έναν για τα δικά σας φορμάτ.
InvalidDataException — το περιεχόμενο είναι κατεστραμμένο ή δεν ταιριάζει με την επέκταση (αρχείο με αλλαγμένο όνομα). Επικυρώστε τα ανεβάσματα πριν το άνοιγμα.
InvalidOperationException:
No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().DocumentConverter επιλύθηκε χωρίς την καταχώρηση του πρόσθετου Converter.
Η Έξοδος Φαίνεται Λανθασμένη
Οι σελίδες φέρουν υδατογράφημα — δεν βρέθηκε άδεια, ή έχει λήξει ή δεν καλύπτει αυτήν την έκδοση. Στο IIS, η άδεια πρέπει να βρίσκεται στο wwwroot κάτω από τη ρίζα του ιστότοπου (AppContext.BaseDirectory\wwwroot), όχι στο bin\. Ελέγξτε το IDoconutLicenseService (License.IsLicenseFileFound, IsExpired, IsVersionValid, License.RejectionMessage).
Τα παλαιά έγγραφα εμφανίζουν ακατανόητο κείμενο — καταχωρίστε τις κωδικοποιήσεις σελίδας κώδικα μία φορά, κατά την εκκίνηση:
// Global.asax.cs, Application_Start - πριν το DoconutHost.Initialize.
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);Λάθος ή αντικατεστημένες γραμματοσειρές — ο διακομιστής δεν διαθέτει τις γραμματοσειρές του εγγράφου. Ένας Windows Server χωρίς Office έχει πολύ λιγότερες γραμματοσειρές από ένα μηχάνημα ανάπτυξης. Εγκαταστήστε τις γραμματοσειρές, ή κατευθύνετε το FontFolders (σε WordConfig και PptConfig) σε έναν φάκελο που τις περιέχει.
Μια σημείωση εικόνας εμφανίζεται στον προβολέα αλλά η εξαγωγή έχει ένα πλαίσιο «Image blocked» — ο κεντρικός υπολογιστής της εικόνας έχει ιδιωτική ή διεύθυνση loopback, την οποία ο διακομιστής αρνείται να ανακτήσει. Δείτε Σημειώσεις.
Η Λειτουργία Λειτούργησε στην Αξιολόγηση, Αλλά Είναι Σιωπηλή στην Παραγωγή
Μια ενεργή προσωρινή άδεια παρέχει κάθε δυνατότητα· η αγορασμένη άδεια παρέχει μόνο ό,τι αγοράσατε. Χωρίς μια δυνατότητα, τα αρχεία Αναζήτησης ή Σημειώσεων δεν εκδίδονται, και ένα καταχωρημένο πρόσθετο σταματά τον ιστότοπο κατά την εκκίνηση. Συγκρίνετε το IsCapabilityGranted(...) με κάθε δυνατότητα που χρησιμοποιείτε πριν την ανάπτυξη.
Η Αναζήτηση Δεν Βρίσκει Τίποτα (Ή Πολύ Λίγα)
- Για ένα PDF, το
AllowSearchδεν ήταν ενεργοποιημένο όταν το έγγραφο άνοιξε — προεπιλογή είναι τοfalse. Το Word, το Excel και το PowerPoint εκθέτουν την ίδια επιλογή. - Το περιεχόμενο είναι σαρωμένο ή μόνο εικόνα, έτσι δεν υπάρχει στρώση κειμένου για αντιστοίχιση.
- Το HTML και το Microsoft Project (MPP) δεν είναι αναζητήσιμα στις προεπιλογές τους: ορίστε το
DefaultRender = falseώστε να αποδίδουν μέσω προβολής PDF με κείμενο. - Το
objViewer.CanSearch()είναιfalseμετά την αρχικοποίηση: η επιλυμένη μορφή δεν έχει διαδρομή αναζήτησης. Αυτό είναι ξεχωριστό από την άδεια Search· ελέγξτε και τα δύο. - Η σελίδα διαβάζει την τιμή επιστροφής του
objViewer.Search(...)— η καταμέτρηση φτάνει στο τρίτο όρισμα, μια κλήση επιστροφής.
Ακόμα κολλήσατε;
Αναπαράγετε το πρόβλημα με την ελάχιστη ρύθμιση από το Γρήγορη Εκκίνηση. Αν επαναληφθεί εκεί, επικοινωνήστε με την υποστήριξη με το έγγραφο, το Global.asax.cs, τα τμήματα Doconut του Web.config, και την καταχώρηση του αρχείου καταγραφής συμβάντων των Windows αν υπάρχει.
Ήταν αυτή η σελίδα χρήσιμη;