2013-03-05 3 views
6

Ho un controllo FileUpload ASP.NET che funziona correttamente finché non lo distribuisco. Quindi funziona bene a meno che il file non superi ~ 55kb. Penso che questo abbia qualcosa a che fare con i postback e che devo metterlo in una variabile di sessione. Tuttavia, funziona per file di piccole dimensioni.Impossibile accedere a un file chiuso

È forse una limitazione di quanto può essere grande una variabile di sessione? Ma funziona quando si esegue dal mio IDE, quindi non sono sicuro.

System.ObjectDisposedException: Non è possibile accedere a un file chiuso

Grazie per eventuali contatti.

risposta

7

Questo può essere risolto dando DiskBufferSize nel web.config:

<system.web> 
    <httpRuntime executionTimeout="90" maxRequestLength="20000" useFullyQualifiedRedirectUrl="false" requestLengthDiskThreshold="8192"/> 
</system.web> 

per Cannot access a closed file

2

ho fatto alcuni test di questo, e sembra che l'impostazione DiskBufferSize sta facendo il giro del problema disattivando buffering. Ora il computer utilizzerà più memoria. Ora il buffering è disabilitato in modo efficace. e i guadagni in termini di prestazioni ottenuti non sono più disponibili.

Penso che la risoluzione corretta sia quella di utilizzare il metodo SaveAs per salvare il file pubblicato in una cartella temporanea sul primo postback e archiviare il percorso del file nel file temporaneo in viewstate o sessione.

Dopo ogni post o reindirizzamento aggiuntivo, in particolare se sono coinvolti thread asincroni, la funzione SaveAs non funzionerà se è richiesto il buffering; riceverai l'errore "Impossibile accedere a un file chiuso".

Non so cosa inserisci nella tua 'variabile di sessione', ma suppongo che sia il controllo del file, che è il problema.

Questo ha risolto il problema per me, nel caso in cui altri stiano correndo in questo, ma non si vuole disabilitare il buffering.

+0

Grazie! Questa è una risposta molto migliore dal punto di vista architettonico. – Carling