3

私の職場には、次のコードを使用してファイルのダウンロードを実行するASP.NETページがあります。ファイルはzipアーカイブから直接取得されるため、Request.TransmitFile()ではなくこれを使用します。

    private void DownloadStream(Stream stream)
    {
        int bytesRead;
        int chunkSize = 1048576; //1MB
        byte[] readBuffer = new byte[chunkSize];

        while ( (bytesRead = stream.Read(readBuffer, 0, readBuffer.Length)) > 0)
        {
            if (!Response.IsClientConnected)
                break;

            Response.OutputStream.Write(readBuffer, 0, bytesRead);
            Response.Flush();
        }
    }

httpRuntimeexecutionTimeout設定の妥当な値を決定しようとしています。送信されるファイルのサイズは最大1GBであり、一部のユーザーはWebサーバーへのパイプ*が非常に遅い(64K回線を考えてください)。これらのユーザーに接続のリセットを経験させたくありません。ただし、サイトの残りの部分については、妥当なタイムアウト値を維持する必要があります。

この特定のページに対してのみexecutionTimeout設定を定義する(またはそのページに対して無制限にする)方法はありますか?推奨されるアプローチは何ですか?ファイルを提供するためにまったく異なる方法(FTPなど)を使用したほうがよいと思いますが、その選択をする自由はありません。私たちにできることは、サイトのコードを変更することだけです。

また、これらのダウンロードは送信する前に圧縮する必要があると思いますが、それは別の問題です

*トピック外の質問:「遅いパイプ」は厄介な混合比喩ですか?代わりに「小さなパイプ」と言うべきかもしれませんが、この文脈ではそれは私には奇妙に聞こえます。意見?

4

1 に答える 1

7

この特定のページに対してのみexecutionTimeout設定を定義する(またはそのページに対して無制限にする)方法はありますか?推奨されるアプローチは何ですか?


はい、独自のweb.configを持つサブディレクトリを作成し、特定の設定が必要な特定のページをサブディレクトリに配置できます。さらに、web.configファイルのスキーマは、特定のパス(特定のページでも)の設定を指定するのに役立つ要素も提供します。たとえば、1ページ(upload.aspx)の設定を上書きする場合は、次のようにweb.configファイルの要素を適用できます。

http://www.velocityreviews.com/forums/t75299-executiontimeout.html

詳細はこちら:http://forums.asp.net/t/1235207.aspx
およびこちら:http ://codebetter.com/blogs/peter.van.ooijen/archive/2006/06/15/146446.aspx

于 2010-02-05T21:28:27.963 に答える