Невозможно вызвать обработчик ashx более одного раза при использовании Response.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 ответ

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

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

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

Другие вопросы по тегам