2013-03-25 73 views
1

我为客户端从我的网站上下载内容(视频)创建了一个HttpHandler(.ashx)。首先我使用WriteFile方法,我意识到它需要大量内存,然后决定将其更改为TransmitFile方法。使用Response.TransmitFile时不能多次调用处理程序ashx

但是发生了一件奇怪的事情,我无法再做一次以上的下载。我不得不等待下载完成并启动其他。

基本上代码是这样的:

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

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

回答

0

我发现了什么问题。

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

溶液改变IRequireSessionStateIReadOnlySessionState,也就是说,只有读访问会话数据,也没有必要提供任何形式的安全性,阻止用户操作。

相关问题