Дескриптор недействителен.(Исключение из HRESULT: 0x80070006 (E_HANDLE)) - PullRequest
19 голосов
/ 12 октября 2011

У меня есть веб-сайт в среде общего хостинга 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);
}

Ответы [ 6 ]

14 голосов
/ 18 декабря 2012

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

taskkill  /fi "imagename eq webdev.webserver40.exe" 
12 голосов
/ 19 ноября 2013

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

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 голосов
/ 17 августа 2015

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

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

2 голосов
/ 26 марта 2014

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

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");
2 голосов
/ 12 октября 2011

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

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

у вас есть

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

Дайте мне знать, если это поможет.

0 голосов
/ 06 апреля 2018

В моем случае это произошло только для конкретного пользователя. У любого другого пользователя это работало.

Проблема заключалась в дополнительном пробеле в логине пользователя.

Это произошло в приложении MVC, которое использовало Asp.net Identity и Impersonation для загрузки файла Excel из каталога, который находится на хост-сервере.

Странные вещи!

...