2009-07-09 3 views
0

Im Moment arbeite ich an einem Stub eines Projekts. Im Laufe des Projekts muss ich in der Lage sein, von einem Web-Frontend eine Nachricht auf einen Server zu stellen und dann von einem iPhone den Server abzufragen, um die Nachricht zu lesen.Probleme mit einer ASMX-Webmethode, die Datei-E/A verwendet

Während all einzelne Peices arbeiten und meine Anfrage wird durch fein Ich habe Probleme mit dieser Webmethod mit

[WebMethod()] 
public void setMessage(string message) 
{ 
    FileStream file = new FileStream("mymessage.txt", FileMode.OpenOrCreate, FileAccess.Write); 
    StreamWriter sw = new StreamWriter(file); 
    sw.Write(message); 
    sw.Close(); 
    file.Close(); 
} 

Als ich das Aufrufen über HTTP Post SOAP von einer iPhone App.

Ich bekomme die folgende XML in meiner Konsole, wenn ich die Anfrage mache.

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<soap:Body> 
<soap:Fault> 
<faultcode>soap:Server</faultcode> 
<faultstring>Server was unable to process request. ---&gt; Access to the path 'c:\windows\system32\inetsrv\myMessage.txt' is denied.</faultstring> 
<detail /> 
</soap:Fault> 
</soap:Body> 
</soap:Envelope> 

Der Server ist eine nach meinem Chef konfiguriert, dass derzeit in anderen Kapazitäten als im Haus Testserver für mehrere verschiedene Projekte verwendet wird.

Der Server ist ein IIS-Server Ich weiß nicht, welche Version mit ASP.NET konfiguriert und installiert ist.

Das Skript befindet sich an einem anderen Ort als das Programm versucht zu schreiben. Ich nehme an, dass das Skript von diesem Verzeichnis aus ausgeführt wird und deshalb versucht es dort zu schreiben. Ist das der Fall oder fehlt mir etwas Grundlegendes?

Wenn es alternative Vorschläge gibt, wie ich das machen könnte, würde ich sie auch gerne hören, da ich von einer ziemlich kleinen Wissensbasis arbeite.

Danke!

+0

Was ist Ihre Frage? Welche Rolle hast du nicht verstanden? –

+0

Wenn Sie außerhalb der Anwendung schreiben möchten, sollten Sie den vollständigen Pfad zu dieser Datei angeben. Wenn sich diese Datei in Ihrem Anwendungsverzeichnis befindet, können Sie 'Server.MapPath' verwenden, um einen virtuellen Pfad zu konvertieren, wenn Sie möchten (oder den Pfad manuell angeben, nichts hält Sie davon ab). In beiden Fällen sollte das Benutzerkonto, unter dem die ASP.NET-Anwendung ausgeführt wird, Schreibberechtigung für diesen Speicherort haben. –

Antwort

4

Change „filename.txt“ zu

Server.MapPath("filename.txt") 

oder dem vollständigen physischen Pfad der Datei angeben und NTFS-Berechtigungen für den ASP.NET Benutzer gewähren zu können, auf den Ordner zuzugreifen.

Server.MapPath wandelt virtuelle Pfade (z. B. ~/helloworld.aspx) in physische Pfade um (z. B. D:\WebSite\helloworld.aspx).

1

Neben der Datei in einem Ordner gespeichert haben Sie Zugriff auf (Sie waren nicht in der Lage, die Nachricht zu lesen?), Müssen Sie richtig implementieren „mit“ Blöcke:

using (FileStream file = new FileStream("mymessage.txt", 
        FileMode.OpenOrCreate, FileAccess.Write)) { 
    using (StreamWriter sw = new StreamWriter(file)) { 
     sw.Write(message); 
    } 
} 

Der Grund Es schreibt nach c: \ windows \ system32 \ inetsrv \, dass dies das Standardverzeichnis ist. Wenn Sie in ein anderes Verzeichnis schreiben wollen, müssen Sie es angeben. Server.MapPath wird das tun, wie Sie bereits erwähnt haben.

Verwandte Themen