2012-06-26 19 views
5

Es cierto que esto no significa necesariamente que el flujo haya sido eliminado por el código, ya sea en un uso o llamando a dispose.System.ObjectDisposedException: no se puede acceder a un Stream cerrado

La secuencia podría haberse cerrado fuera de este código y esta excepción aún se produciría?

+1

Sí exactamente .... –

+0

@PhilipDaubmeier - Debe ampliar que a una respuesta antes de que alguien más lo hace. Esta es una pregunta válida que probablemente no se cerrará, y necesita una respuesta. Tú fuiste primero Toma el crédito, hombre! – David

+1

Si nos muestra el código, tal vez podamos indicarle el origen de su problema ... –

Respuesta

5

Así que haré un comentario y una respuesta: Sí, un flujo de datos podría cerrarse desde fuera de su código, así que asegúrese de marcar System.ObjectDisposedException.

En varias ocasiones esto podría suceder: imagínese, por ejemplo, una secuencia asociada a una conexión de red y la conexión se interrumpe repentinamente. Dependiendo de la implementación, esto podría cerrar la transmisión y lanzar esa excepción en particular si se accede a la transmisión.

1

La secuencia podría haberse cerrado fuera de este código y esta excepción todavía se produciría?

Sí. Por ejemplo: esto puede suceder si envuelve una transmisión dentro de otra transmisión y descarta la transmisión "contenedora". Muchas implementaciones eliminan la transmisión que están envolviendo.

Si intenta escribir en la secuencia "envuelta", recibirá este mensaje de error.

ya sea en un uso o llamando a disponer.

también se dan cuenta de que, para los objetos que tienen un método Close(), tales como Stream, Close y Dispose típicamente realizan la misma función. Al cerrar una secuencia también se deshace de ella.

0

Este error también puede ocurrir si requestLengthDiskThreshold es más pequeño que el tamaño del archivo que está tratando de cargar/manejar a través de la transmisión. Esto se define en el web.config:

<httpRuntime maxRequestLength="512000" requestLengthDiskThreshold="512000" /> 

Si loook en la explicación para el segundo parámetro aquí:

https://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.requestlengthdiskthreshold(v=vs.110).aspx

verá que se establece el umbral de entrada de la corriente de amortiguación (en kilobytes). El valor predeterminado es 80 KB, por lo que si no tiene este valor configurado e intenta, por ejemplo, cargar el archivo más grande que 80 KB ajax, obtendrá la excepción System.ObjectDisposedException ya que la secuencia se cerrará una vez que se alcance el límite .

En mi caso estoy estableciendo el umbral de 500 MB ...

Cuestiones relacionadas