1

TransmitFile を使用してファイルを送信するたびに、ファイルが完了するまで、sirte はユーザーに対してブロックされます。IOW、ユーザーはサイトをナビゲートできません。

ユーザーが転送をキャンセルした場合でも、サイトがタイムアウトするか、データの送信が完了するまでブロックされます。どちらかはわかりませんが、たとえば、ダウンロードを開始した直後に 30 MB のファイルをキャンセルした場合、10 MB のファイルよりも回復に時間がかかることがわかります。

関連するコードは次のとおりです。

Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", contdisp);
Response.AddHeader("Content-Length", new FileInfo(fullfilename).Length.ToString());
Response.TransmitFile(fullfilename);
Response.Flush();
4

1 に答える 1

2

これを理解し、問題が再発した場合や他の誰かがこの問題を抱えている場合に備えて、投稿したほうがよいでしょう。

この問題は、私のページがセッションデータを使用していることが原因です。私のダウンロードページでは、並べ替えや検索語などの特定の項目を記憶するためにこのセッションデータが必要です。ページにはファイルも表示され、ボタンをクリックすると上記のコードが実行されることに注意してください。

このため、ダウンロードコード(上記のスニペット)を実行すると、転送はIISによって保護され、セッションデータが完全な状態に保たれます。これは、通常のページナビゲーションの下にあるはずですが、ファイル転送には明らかに望ましくないためです。

ダウンロードコードをこのページからセッションデータのないページに移動することで、ユーザーがサイトをナビゲートし続けている間にダウンロードを実行できます。

EnableSessionState="False"また、セッションを使用しないように、Pageディレクティブにを使用して新しいダウンロードページを作成しました。

于 2010-06-30T19:50:33.473 に答える