2013-03-25 2 views
1

Я создал HttpHandler (.ashx) для загрузки содержимого клиентов (видео) с моего сайта. Сначала я использовал метод WriteFile, и понял, что он требует много памяти, а затем решил изменить его на метод TransmitFile.Невозможно вызвать обработчик ashx более одного раза при использовании Response.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(); 

Каждый может знать, что эта проблема?

ответ

0

Я нашел, в чем была проблема.

HttpHandler (ashx), который я использовал для страницы загрузки, реализовал интерфейс IRequireSessionState, который дал мне права на чтение/запись для управления данными сеанса. При использовании метода TransmitFile IIS блокирует любую операцию в системе для защиты данных сеанса от изменения.

Раствор изменял IRequireSessionState для IReadOnlySessionState, что дает только чтение доступ к данным сеанса, и не было никакой необходимости предоставлять какой-либо безопасности, блокируя действия пользователя.