使用Response.TransmitFile时,无法多次调用处理程序ashx

时间:2013-03-25 20:50:58

标签: file-io download httphandler ashx transmitfile

我为客户从我的网站下载内容(视频)创建了一个HttpHandler(.ashx)。首先我使用WriteFile方法,我意识到它需要大量内存,然后我决定将其更改为TransmitFile方法。

但是发生了一件奇怪的事情,我再也无法进行多次下载了。我不得不等待下载完成并启动另一个。

基本上代码是这样的:

        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();

任何人都可能知道这是什么问题?

1 个答案:

答案 0 :(得分:0)

我发现了什么问题。

我用于下载页面的HttpHandler(ashx)实现了一个接口IRequireSessionState,它给了我操作会话数据的读/写权限。使用TransmitFile方法时,IIS会阻止系统上的任何操作,以保护会话数据不被更改。

解决方案是更改 IRequireOnlySessionState IRequireSessionState ,它只提供对会话数据的读取权限,并且不需要提供任何类型的安全性,阻止用户操作。