PRB: Δεν είναι δυνατό να αποστολή μεγάλων αρχείων, όταν χρησιμοποιείτε το στοιχείο ελέγχου του διακομιστή HtmlInputFile

Συμπτώματα

Κατά την προσπάθειά σας να χρησιμοποιήσετε το στοιχείο ελέγχου HtmlInputFile να αποστείλετε ένα μεγάλο αρχείο, το αρχείο δεν μπορεί να σταλούν.

Αιτία

Αυτό το ζήτημα παρουσιάζεται επειδή η προεπιλεγμένη τιμή για την παράμετρο maxRequestLength της ενότητας < httpRuntime > του αρχείου Machine.config είναι 4096 (4 megabyte). Ως αποτέλεσμα, τα αρχεία που είναι μεγαλύτερα από αυτήν την τιμή δεν αποστέλλονται από προεπιλογή.

Προτεινόμενη αντιμετώπιση

Για να επιλύσετε αυτό το ζήτημα, χρησιμοποιήστε μία από τις ακόλουθες μεθόδους:

  • Στο αρχείο Machine.config, αλλάξτε το χαρακτηριστικό maxRequestLength της ενότητας ρύθμισης παραμέτρων < httpRuntime > σε μια μεγαλύτερη τιμή. Η αλλαγή αυτή επηρεάζει το σύνολο του υπολογιστή.
  • Στο αρχείο Web.config, παρακάμψετε την τιμή του maxRequestLength για την εφαρμογή. Για παράδειγμα, η ακόλουθη καταχώρηση στο αρχείο Web.config επιτρέπει αρχεία που είναι μικρότερη ή ίση από 8 megabyte (MB), για να είναι δυνατή η αποστολή:
    <httpRuntime maxRequestLength="8192" />

Περισσότερες πληροφορίες

Από προεπιλογή, η τιμή αυτή περιορίζεται σε 4 MB, για να περιορίσετε τις πιθανές επιθέσεις άρνησης υπηρεσίας.

Όταν η ιδιότητα maxRequestLength έχει οριστεί στο αρχείο Machine.config και, στη συνέχεια, καταχωρείται μια αίτηση (για παράδειγμα, ένα αρχείο αποστολή) που υπερβαίνει την τιμή του maxRequestLength, δεν μπορεί να εμφανιστεί μια προσαρμοσμένη σελίδα σφάλματος. Αντίθετα, το Microsoft Internet Explorer θα εμφανίσει ένα μήνυμα λάθους "Δεν είναι δυνατή η εύρεση διακομιστή ή DNS".


Θεωρητικά, το μέγιστο μέγεθος αποστολής είναι αρκετά μεγάλο. Ωστόσο, λόγω ASP.NET παρακολούθηση της εύρυθμης λειτουργίας, δεν είναι δυνατό να αποστείλετε πολύ μεγάλα αρχεία στο ASP.NET. Η διαδικασία εργασίας ASP.NET έχει χώρο εικονικών διευθύνσεων των 2 gigabyte (GB). Ωστόσο, η διαδικασία εργασίας ASP.NET χρησιμοποιεί μόνο λίγο περισσότερο από 1 GB εξαιτίας εύρυθμης λειτουργίας παρακολούθησης και μνήμη κατακερματισμού.

Κατά τη διαδικασία αποστολής, το ASP.NET φορτώνει ολόκληρο το αρχείο στη μνήμη πριν ο χρήστης να αποθηκεύσετε το αρχείο στο δίσκο. Επομένως, η διαδικασία ενδέχεται να Ανακύκλωσης λόγω το όριο μνήμης χαρακτηριστικό της ετικέτας processModel του αρχείου Machine.config. Το όριο μνήμης χαρακτηριστικό καθορίζει το ποσοστό φυσικής μνήμης που επεξεργάζονται το βοηθητικό ASP.NET μπορεί να εξαντλήσει πριν η διεργασία ανακυκλώνεται αυτόματα. Ανακύκλωση εμποδίζει "διαρροές" μνήμης να προκαλεί ASP.NET για να διακοπεί η λειτουργία του ή να σταματήσει να ανταποκρίνεται.

Επιπλέον, άλλοι παράγοντες παίζουν ρόλο με το μέγιστο μέγεθος αρχείου που μπορεί να αποσταλεί. Στους παράγοντες αυτούς περιλαμβάνεται η διαθέσιμη μνήμη, χώρος στο σκληρό δίσκο, ταχύτητα επεξεργαστή και τρέχουσα κίνηση στο δίκτυο. Με τακτικές μεταφορές αρχείων που αποστέλλεται, η Microsoft συνιστά να χρησιμοποιείτε ένα μέγιστο μέγεθος αρχείου στην περιοχή από 10 έως 20 megabyte (MB). Εάν σπάνια αποστολή αρχείων, το μέγιστο μέγεθος αρχείου μπορεί να είναι 100 MB.


Σημείωση Μπορείτε να αποστείλετε τα αρχεία που είναι μεγαλύτερα από 100 MB στο ASP.NET. Ωστόσο, η Microsoft συνιστά να ακολουθήσετε τα μεγέθη αποστολής αρχείου μέγιστο που αναφέρονται σε αυτό το άρθρο. Για να προσδιορίσετε πιο ακριβή μεγέθη των αρχείων, εκτελέστε καταπόνησης δοκιμής σε υπολογιστές που είναι παρόμοιες με αυτές που θα χρησιμοποιηθεί στην παραγωγή.

Εάν συναντήσετε όρια μεγέθους αρχείου κατά τη διαδικασία αποστολής αρχείων, ενδέχεται να παρατηρήσετε τα ακόλουθα μηνύματα λάθους:
  • Δεν είναι δυνατή η εμφάνιση της σελίδας.
  • Η εφαρμογή διακομιστή δεν είναι διαθέσιμο
    Στο αρχείο καταγραφής συμβάντων, το μήνυμα λάθους θα είναι παρόμοιο με το ακόλουθο:
  • Τύπου System.OutOfMemoryException εξαίρεση.
Μπορείτε επίσης να βρείτε ότι οι αποστολές πραγματοποιούνται πολύ αργά. Εάν μπορείτε να παρακολουθήσετε τη διαδικασία Aspnet_wp.exe στη Διαχείριση εργασιών των Windows, θα παρατηρήσετε ότι η διαφορά μνήμης αλλάζει από 64 KB κάθε 1 έως 2 δευτερόλεπτα. Ανάλογα με το μέγεθος του αρχείου, αυτή η καθυστέρηση μπορεί να προκαλέσει η διαδικασία εργασίας ASP.NET για ανακύκλωση εξαιτίας ενός σφάλματος responseDeadlock.
Ιδιότητες

Αναγνωριστικό άρθρου: 295626 - Τελευταία αναθεώρηση: 21 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια