it-swarm.com.de

Der Verweis ist ungültig. (Ausnahme von HRESULT: 0x80070006 (E_HANDLE))

Ich habe eine Website in einer IIS 7 Shared Hosting-Umgebung. Es läuft .NET 3.5. Ich habe eine Schaltfläche zum Herunterladen, um eine Datei vom Server herunterzuladen. 

Wenn ich diese Anwendung lokal auf IIS 6 bereitstelle, läuft sie einwandfrei. Auf dem freigegebenen Hosting-Server IIS 7 tritt die Ausnahme auf.

Der Verweis ist ungültig. (Ausnahme von HRESULT: 0x80070006 (E_HANDLE)) Beschreibung: Während der Ausführung der aktuellen Webanforderung ist eine unbehandelte Ausnahme aufgetreten. Überprüfen Sie die Stack-Ablaufverfolgung auf weitere Informationen zu dem Fehler und wo er im Code entstanden ist.
System.Runtime.InteropServices.COMException: Das Handle ist ungültig. (Ausnahme von HRESULT: 0x80070006 (E_HANDLE))
COMException (0x80070006): Das Handle ist ungültig. (Ausnahme von HRESULT: 0x80070006 (E_HANDLE))]] HttpException (0x80004005): Bei der Kommunikation mit dem Remote-Host ist ein Fehler aufgetreten. Der Fehlercode ist 0x80070006.]

Wie kann das gelöst werden?

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);
}
19
Salman Roy

Erstellen Sie eine .bat-Datei, geben Sie den folgenden Befehl ein und führen Sie die Datei aus. Dadurch werden alle vorhandenen Webserverprozesse abgebrochen und das Problem behoben. Ich hatte das gleiche Problem und es hat für mich geklappt. Vielen Dank

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

Ich habe einen Fix aus dem Link unten gefunden:

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


}
12
Ricky

Ich habe dieses Problem gerade in unserer Umgebung gelöst. Wir haben Identitätswechsel aktiviert und den Anwendungspool als ApplicationPoolIdentity ausgeführt.

Das Problem wurde dadurch verursacht, dass die Identität des App-Pools keinen Lesezugriff auf die Quelldatei hatte, obwohl der imitierte Benutzer Zugriff auf die Datei hatte. Das Problem war schwer zu lösen: Wenn sowohl Benutzer als auch App-Pool keinen Zugriff haben, wird ein Zugriffsberechtigungsfehler angezeigt.

3
Andrew Rose

In meinem Fall habe ich versucht, diese Datei zu schreiben und zu lesen:

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

Ich habe den folgenden Code verwendet und es hat funktioniert. Ich denke, dass IIS dem Benutzer die Berechtigung zum Schreiben oder Lesen aus der temporären Datei fehlt.

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
Akira Yamamoto

BEARBEITEN: Der Teil über das Laden der Seite wurde anfangs verfehlt. Ich bin nicht genau sicher, was von Ihrem Querystring übergeben wird, aber haben Sie Server.MapPath verwendet? Also statt

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

du hast

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

Lass es mich wissen, wenn das hilft.

2
joelmdev

In meinem Fall geschah dies nur bei einem bestimmten Benutzer-Login. Jeder andere Benutzer hatte es funktioniert. 

Das Problem war ein zusätzliches Leerzeichen in der LoginEmail des Benutzers.  

Dies geschah in einer MVC-Anwendung, die Asp.net Identity und Impersonation zum Herunterladen einer Excel-Datei aus einem Verzeichnis auf dem Hosting-Server verwendete.

Komisches Zeug!

0
t_plusplus