ASP.NET: System.UnauthorizedAccessException - der Zugriff auf Pfad Verweigert
Habe ich eine ASP.NET web-Anwendung, die Folgendes macht:
- Liest eine Excel-Datei.
- Die excel-Datei wird eine Bild-URL liegt, dass es in Punkte um irgendwo auf dem internet.
- Das Programm liest jede Bild-URL, und speichern Sie es in einen temporären Ordner auf dem web-server.
- Die Anwendung dann ändert (ändert die Breite und Höhe) des Bildes.
-
Schließlich, die Anwendung wird speichern Sie das Bild in einen anderen Ordner.
Ich bin immer folgende exception:
System.Net.WebException: Eine Ausnahme
traten während einer WebClient-Anforderung.
---> System.UnauthorizedAccessException:
Der Zugriff auf den Pfad
'\abcserver\target03\3111\35644\www.testing.com\web\content\images\TempStorage\tempImage.jpg'
verweigert. bei
System.IO.__Fehler.WinIOError(Int32
errorCode, String maybeFullPath) bei
System.IO.FileStream.Init(String path,
FileMode mode, FileAccess access,
Int32 rights, Boolean useRights,
FileShare share, Int32 bufferSize,
FileOptions options,
SECURITY_ATTRIBUTES secAttrs, String
msgPath, Boolean bFromProxy) bei
System.IO.FileStream..ctor(String
path, FileMode mode, FileAccess
access) an
System.Net.WebClient.DownloadFile(Uri
address, String fileName) --- Ende
der inneren Ausnahmestapelüberwachung ---
bei ProcessImage.GetFileFromUrl(String
imageFileUrl, String newFileName)
bei
uploadexceldata.UploadExcelData(String
mit dem Namen)
foreach (DataRow dr in dt.Rows) //Reading each excel row
{
if (dr[0].ToString() != "")
{
id= "";
path = "";
manuId = "";
id= dr[0].ToString();
path = dr[1].ToString();
fileNameOnly = iProImg.GetFileNameOnly(path);
objDb.openConnection();
strSqlGroupInfo = "select ManufacturerID from manufacturers where id='" + id+ "'";
dTblManu = objDb.BuildDT(strSqlGroupInfo); //To Fill data to Datatable
objDb.closeConnection();
if (dTblManu.Rows.Count > 0)
{
manuId = dTblManu.Rows[0][0].ToString();
}
if (manuId != "")
{
tempUploadPath = "images/TempStorage/";
tempUploadPath = Server.MapPath(tempUploadPath);
if (!Directory.Exists(tempUploadPath))
{
Directory.CreateDirectory(tempUploadPath);
}
tempFilePath = tempUploadPath + "\\tempImage.jpg";
tempFilePath = tempFilePath.Replace("/", "\\");
previewPath = Server.MapPath("images/previews/" + manuId);
thumbNailPath = Server.MapPath("images/thumbnails/" + manuId);
if (!Directory.Exists(previewPath))
{
Directory.CreateDirectory(previewPath);
}
if (!Directory.Exists(thumbNailPath))
{
Directory.CreateDirectory(thumbNailPath);
}
fileNameOnly = "\\preview" + id+ ".jpg";
fileNameOnly = fileNameOnly.Replace("/", "\\");
previewPath = previewPath + fileNameOnly;
tempPartialPathP = "images\\previews\\" + manuId + fileNameOnly;
fileNameOnly = "\\thumbnail" + id+ ".jpg";
thumbNailPath = thumbNailPath + fileNameOnly;
tempPartialPathT = "images\\thumbnails\\" + manuId + fileNameOnly;
try
{
iProImg.GetFileFromUrl(path, tempFilePath);
rowCounter++;
iProImg.ReSizeImage(tempFilePath, previewPath, previewSize);
iProImg.ReSizeImage(previewPath, thumbNailPath, thumbNailSize);
}
catch (Exception ec)
{
errorRowCount++;
iLog.LogErrorToFile("uploadExcel", ec.ToString(), "path : " + path + ",tempFilePath :" + tempFilePath);
}
finally
{
if(File.Exists(tempFilePath))
{
File.Delete(tempFilePath);
}
}
} //If manuid!=""
} //if (dr[0].ToString() != "")
Hat jemand irgendwelche Vorschläge wie man dieses Problem beheben Ausnahme?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie, die Zugriffsrechte auf "Vollzugriff" für die .Net user ab, wo Sie sind, Lesen/speichern von Dateien.
Keine Antworten in der Welt löste diese für mich bis stieß ich auf die Antwort für mich:
UN-VERSCHLÜSSELN SIE DIE DATEI
Können Sie erteilen der vollen Berechtigungen für alle, die auf Ihre gesamte Festplatte, die es noch nicht erlauben ASP.NET entschlüsseln von Dateien.
Wenn Sie sicher sind, die Datei ist nicht verschlüsselt, dann müssen Sie nur fügen Sie das ASPNET-Konto, um die Datei oder den Ordner, den Sie zugreifen möchten. Aber stellen Sie sicher, dass Ihre nicht verschlüsselte erste!
In Antwort auf das, was war, sagte : "Dies ist ein remote-server und der Ordner hat volle lese-und Schreibrechte gewährt.Funktioniert immer noch nicht "
Stellen Sie sicher, dass die .Net user /Computer-Konto-Benutzer verfügt über vollständige Berechtigungen für den Ordner.
Auch, hinzufügen < Identität /> in deine config-Datei
Stellen Sie sicher, dass die ASP.NET Konto hat lese - /Schreibzugriff auf den Ordner schreiben (grundlegende windows-Sicherheit).
Wie:
http://www.microsoft.com/windowsxp/using/networking/security/permissions.mspx
(die ersten 4 Schritte, die Kontrollkästchen und klicken Sie auf
OK
)[BEARBEITEN]
Sie müssen sich authentifizieren Sie sich mit einem Konto bekannt, über remote-server. Sie gab vermutlich Rechte der lokalen ASP.NET Konto auf dem remote-server, das wird nicht funktionieren, denn das ist nicht der Benutzer, den Sie Zugriff auf den Ordner mit (vom webserver aus).
[/EDIT]
Alle der oben genannten, plus möglicherweise müssen Sie fügen Sie diese Tags:
Lesen Sie diese KB-Artikel und wenn Sie sich von browser zu iis in eine Datei zu teilen, zählt dies als zwei hops, und jetzt müssen Sie zum konfigurieren der Kerberos-Delegierung. System-Administratoren, die viel klüger als ich versucht habe zu konfigurieren die kerberos-Delegierung und scheiterte. Bewegen Sie Ihre Bilder oder Sie die IIS-Instanz, so dass Sie auf der gleichen Maschine.
Erste, verengen Ihr problem, indem Sie vorübergehend die Gewährung Jeder die volle Berechtigung auf diesem besonderen Weg. Wenn es funktioniert, dann wissen Sie für eine Tatsache, es ist eine einfache Erlaubnis und Sie müssen nur herausfinden, welche acct braucht die entsprechende Genehmigung. Wahrscheinlich das Anonyme Benutzerkonto (überprüfen Sie diese Einstellung im IIS-Admin) und nicht den ASP.NET Konto. (vergessen Sie nicht, ziehen Sie die Berechtigung für Alle)
Wenn Sie müssen, glaube ich, können Sie FileMon verwenden, um zu sehen, welches Konto zuzugreifen versucht, eine bestimmte Datei. Falsch sein könnte, habe ich noch nicht verwendet, dieses tool in eine Weile.
Eine Letzte Sache... ist der nur-lese-flag gesetzt auf die Datei? 🙂
Ich hatte genau das gleiche problem heute. Nachdem stundenlang versucht, auf die Spur, was war die Ursache des Problems fand ich heraus, dass die Berechtigungen für den Ordner, der geschrieben wurde, waren falsch. Im wesentlichen, der Ordner war schreibgeschützt aus der Perspektive des Benutzers wird verwendet, um die Datei zu erstellen.
Versuchen Sie die folgenden für den Ordner in Frage:
Sehen, als diese Frage gestellt wurde vor 6 Monaten, ich nehme an, Sie haben bereits das Problem gelöst...aber ich dachte, ich würde dokumentieren meine Lösung nur für den Fall wird es nützlich sein, jemand anderes in der Zukunft, wie Sie versuchen, herauszufinden, wie man dieses Problem lösen UnauthorizedAccessException.
Überprüfen Sie, dass die Bild-Datei (jpg) schreiben Sie die tempStorage hat die richtigen Berechtigungen für den webuser-Konto(aspnet oder iis_wpg). Sie können die TempStorage Verzeichnis zu ersetzen permisson Einträge für alle untergeordneten Objekte.
Nun alle Dateien, die Sie hinzufügen, um die TempStoreage Ordner Erben die Berechtigungen, so dass Sie webuser Konto zum Lesen der jpg-Datei.
Anstelle der Gewährung von Berechtigungen für ASPNET-Benutzer, Berechtigungen auf NETZWERK-SERVICE-Benutzer. Ändern Sie die Berechtigungen innerhalb des Ordners sollte genug sein, keine Notwendigkeit zu geben, volle Berechtigungen (keinen Grund zu geben, mehr Berechtigungen als nötig)
weitere details Lesen forum : http://forums.asp.net/t/1013434.aspx/1
der Fehler ist ziemlich offensichtlich, da der Zugriff auf den Pfad 'bin\myprojname.pdb\' verweigert. der Benutzer der web-Konsole Prozess ausgeführt wird (nicht der Benutzer, den Sie erstellt in der webconsole, die eigentlichen windows-Benutzer), die meisten wahrscheinlich "Netzwerkdienst" nicht über die Berechtigungen auf diesen Ordner.
Können Sie entweder Rechts Klick auf den Ordner, gehe auf Berechtigungen und fügen Sie die "Network Service" - Benutzer - Rechtsklick auf den Ordner, gehe auf Berechtigungen und fügen Sie den "Jeder" Benutzer
dass sollte das problem beheben.