Подтвердить что ты не робот

Ручка недействительна. (Исключение из HRESULT: 0x80070006 (E_HANDLE))

У меня есть веб-сайт в среде совместного размещения IIS 7. Он запускает .NET 3.5. У меня есть кнопка загрузки, чтобы загрузить файл с сервера.

Когда я локально развертываю это приложение в IIS 6, он работает нормально. На сервере хостинга IIS 7 возникает исключение.

Неверный дескриптор. (Исключение из HRESULT: 0x80070006 (E_HANDLE)) Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека, чтобы узнать больше об ошибке и где она возникла в коде. System.Runtime.InteropServices.COMException: дескриптор недействителен. (Исключение из HRESULT: 0x80070006 (E_HANDLE))
COMException (0x80070006): дескриптор недействителен. (Исключение из HRESULT: 0x80070006 (E_HANDLE))] [HttpException (0x80004005): Произошла ошибка при общении с удаленным хостом. Код ошибки: 0x80070006.]

Как это можно решить?

string strRequest = Convert.ToString(Request.QueryString.Get("file"));
System.IO.FileInfo file = new System.IO.FileInfo(strRequest);
if (file.Exists)
{
    Response.Clear();
    Response.ContentType = ReturnExtension(System.IO.Path.GetExtension(file.Name));
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + file.Name);
    Response.TransmitFile(strRequest);
    Response.End();
    HttpContext.Current.ApplicationInstance.CompleteRequest();
    //DownloadFile(file.FullName, file.Name);
}
4b9b3361

Ответ 1

Создайте файл .bat, поместите следующую команду и запустите файл. Он убьет все существующие процессы веб-сервера и устранит проблему. У меня была такая же проблема, и это сработало для меня. Большое спасибо

taskkill  /fi "imagename eq webdev.webserver40.exe" 

Ответ 2

Я нашел исправление из ссылки ниже:

http://forums.asp.net/t/1387967.aspx?How+to+create+a+flipcart+like+panel+for+showing+products+in+gridview

if (file.Name == fileName)

{
     Response.ClearContent();
     Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
     Response.AddHeader("Content-Length", file.Length.ToString());
     Response.TransmitFile(file.FullName);
     //Response.End(); Will raise that error. this works well locally but not with IIS
     Response.Flush();//Won't get error with Flush() so use this Instead of End()


}

Ответ 3

Я только что решил эту проблему в нашей среде. Мы включили олицетворение и включили пул приложений как ApplicationPoolIdentity.

Проблема вызвана тем, что идентификатор пула приложений не имеет доступа к исходному файлу, даже если у него был доступ к файлу. Из-за этого сложно решить, что если у пользователя и пула приложений нет доступа, вы получите ошибку разрешения доступа.

Ответ 4

РЕДАКТИРОВАТЬ: Первоначально пропущена часть о загрузке страницы. Я не совсем уверен, что вам передали из вашего запроса, но вы пытались использовать Server.MapPath? Поэтому вместо

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

у вас есть

System.IO.FileInfo file = new System.IO.FileInfo(Server.MapPath(strRequest));

Сообщите мне, если это поможет.

Ответ 5

В моем случае я пытался писать и читать в этот файл:

var path = System.IO.Path.GetTempFileName();

Я использовал код ниже, и он сработал. Я думаю, что у пользователя IIS отсутствовало разрешение на запись или чтение из временного файла.

var path = Server.MapPath(@"~\App_Data\Stats");
Directory.CreateDirectory(path);
path = Path.Combine(path, String.Format("{0}.csv", Guid.NewGuid()));

using (var streamWriter = new StreamWriter(path))
using (var csvWriter = new CsvHelper.CsvWriter(streamWriter))
{
    csvWriter.Configuration.Delimiter = csvWriter.Configuration.CultureInfo.TextInfo.ListSeparator;

    csvWriter.WriteRecords(rounds);
}

return File(path, "text/csv", "Stats.csv");