これは、ストリームがコードによって、つまり、使用中またはdisposeの呼び出しによって破棄されたことを必ずしも意味しないというのは本当ですか。
このコードの外部でストリームが閉じられた可能性がありますが、この例外は引き続き発生しますか?
だから私は私のコメントに答えを出します:はい、ストリームはコードの外部からも同様に閉じることができるので、必ずチェックしてくださいSystem.ObjectDisposedException
。
これが発生する可能性のあるいくつかの場合があります。たとえば、ネットワーク接続に関連付けられたストリームが突然中断された場合を想像してみてください。実装によっては、これによりストリームが閉じられ、ストリームにアクセスした場合にその特定の例外がスローされる可能性があります。
このコードの外部でストリームが閉じられた可能性がありますが、この例外は引き続き発生しますか?
はい。例-これは、ストリームを別のストリーム内にラップし、「ラッパー」ストリームを破棄した場合に発生する可能性があります。多くの実装は、ラップしているストリームを破棄します。
その後、「ラップされた」ストリームに書き込もうとすると、このエラーメッセージが表示されます。
使用中またはdisposeの呼び出しによって。
Close()
また、などのメソッドを持つオブジェクトの場合Stream
、通常は同じ機能を実行することにも注意してくださいClose
。Dispose
ストリームを閉じると、ストリームも破棄されます。
このエラーは、requestLengthDiskThresholdが、ストリームを介してアップロード/処理しようとしているファイルのサイズよりも小さい場合にも発生する可能性があります。これは、web.configで定義されています。
<httpRuntime maxRequestLength="512000" requestLengthDiskThreshold="512000" />
ここで2番目のパラメーターの説明を見ると:
入力ストリームのバッファリングしきい値(キロバイト単位)が設定されていることがわかります。デフォルト値は80KBであるため、この値を設定せずに、たとえば80KBを超えるファイルをajaxアップロードしようとすると、しきい値の制限に達するとストリームが閉じられるため、System.ObjectDisposedException例外が発生します。 。
私の場合、しきい値を500MBに設定しています...