Domanda

Piattaforma: IIS 6, ASP.Net 2.0 (.Net 3.5), Server 2003.

Sto creando un'applicazione che accetta file da un utente, li elabora e restituisce un risultato. Il file viene caricato utilizzando HTTP POST in un modulo Web ASP.Net. L'applicazione si aspetta alcuni file di grandi dimensioni (centinaia di MB).

Sto usando SWFUpload per eseguire il caricamento con una bella barra di avanzamento, ma ciò non contribuisce al problema, perché quando lo bypasso utilizzando un modulo HTML standard che punta alla mia pagina di accettazione del caricamento, ottengo lo stesso errore esatto. Quando si utilizza la barra di avanzamento, il caricamento continua al 100%, quindi non riesce. Con un modulo standard, il comportamento sembra essere lo stesso.

Al momento sto riscontrando un problema nel caricare un file di circa 150 MB. Ho modificato tutte le impostazioni che riesco a trovare, ma non ho ancora avuto fortuna.

Ecco un riassunto di ciò che ho cambiato finora:

In Web.config: Aggiunto questo all'interno di system.web:

<httpRuntime executionTimeout="3600" maxRequestLength="1536000"/>

In machine.config: All'interno di system.web, modificato:

<processModel autoConfig="true" />

a:

<processModel autoConfig="true" responseDeadlockInterval="00:30:00" responseRestartDeadlockInterval="00:30:00" />

e in MetaBase.xml: Cambiato:

AspMaxRequestEntityAllowed="204800"

a:

AspMaxRequestEntityAllowed="200000000"

Quando il caricamento non riesce, viene visualizzato un errore 404 da IIS. Il mio modulo Web non inizia l'elaborazione, o almeno, non arriva all'evento Page_Load. Ho lanciato un'eccezione all'inizio di quel gestore e non si esegue affatto su file di grandi dimensioni.

Tutto funziona bene con file più piccoli (ho testato fino a circa 5,5 MB). Non sono esattamente sicuro di quale sia la dimensione del file, ma so che il mio limite deve essere superiore a 150 MB, poiché questo non è il file più grande che il client dovrà caricare.

Qualcuno può aiutare?

È stato utile?

Soluzione

Urlscan era attivo su tutti i siti Web e ha il proprio limite di lunghezza dell'entità richiesta. Non sapevo che Urlscan fosse in esecuzione sul nostro server perché era un filtro ISAPI globale, non funzionante sul mio sito web.

Nota: per individuare i filtri ISAPI globali, fare clic con il tasto destro sulla cartella Siti Web in Amministrazione IIS e fare clic su Proprietà, quindi sulla scheda Filtri ISAPI.

Altri suggerimenti

(Una nota per i googler):

Per IIS7 aggiungi sotto a web.config (ho aggiunto sopra <system.serviceModel>):

<system.webServer>
        <security>
            <requestFiltering><requestLimits maxAllowedContentLength="262144000" /></requestFiltering> <!-- maxAllowedContentLength is in bytes. Defaults to 30,000,000 -->
        </security>
</system.webServer>

Quando abbiamo riscontrato questo problema abbiamo dovuto aumentare il limite della dimensione del buffer in base a questo articolo KB: http://support.microsoft.com/kb/944886/en-us

So che menziona ASP, ma credo che abbia funzionato anche per ASP.NET.

Modifica: ecco un link che potrebbe essere più pertinente al tuo problema e fornire altre opzioni:
http: // weblogs.asp.net/jgalloway/archive/2008/01/08/large-file-uploads-in-asp-net.aspx

404 e Page_Load mancante: IIS può elaborare la richiesta solo quando il POST completo è sul server. Pertanto, se il POST ha esito negativo (a causa delle sue dimensioni), non può attivare gli eventi della pagina.

Potresti provare NeatUpload http://www.brettle.com/neatupload . Dal manuale: & Quot; Per impostazione predefinita, NeatUpload non limita direttamente la dimensione dei caricamenti. & Quot;

Puoi anche provare Velodoc XP Edition che presenta numerosi vantaggi rispetto a NeatUpload incluso il fatto che utilizza Estensioni Ajax ASP.NET. Vedi anche il sito web Velodoc per ulteriori informazioni.

Dici:

Ma 1536000 è solo 1,5 MB?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top