1

クライアントが自分の Web サイトからコンテンツ (ビデオ) をダウンロードするための HttpHandler (.ashx) を作成しました。最初は WriteFile メソッドを使用していましたが、大量のメモリが必要であることに気付き、それを TransmitFile メソッドに変更することにしました。

しかし、奇妙なことが 1 つ起こりました。複数のダウンロードを行うことができなくなりました。ダウンロードが完了するのを待ってから、別のダウンロードを開始する必要がありました。

基本的にコードは次のようになります。

        System.IO.FileInfo file = new System.IO.FileInfo(file_path);

        context.Response.Clear();

        if (flagH264)
        {
            context.Response.ContentType = "video/mp4";
        }
        else
        {
            context.Response.ContentType = "video/x-ms-wmv";
        }

        context.Response.AddHeader("Content-Length", file.Length.ToString());
        context.Response.AddHeader("Content-Disposition", "attachment; filename=" + name);

        //context.Response.WriteFile(file_path.Trim());
        context.Response.TransmitFile(file_path.Trim());
        context.Response.Flush();

誰でもこの問題が何であるか知っているかもしれませんか?

4

1 に答える 1

0

私は何が問題なのかを見つけました。

ダウンロード ページに使用していた HttpHandler (ashx) は、セッション データを操作するための読み取り/書き込み権限を与えるインターフェイス IRequireSessionState を実装していました。TransmitFile メソッドを使用する場合、IIS はシステム上のすべての操作をブロックして、セッション データが変更されないように保護します。

解決策は IReadOnlySessionState のIRequireSessionState変更することでした。これにより、セッション データへの読み取りアクセスのみが許可され、いかなる種類のセキュリティも提供する必要がなくなり、ユーザー アクションがブロックされました。

于 2013-03-26T19:04:36.800 に答える