Dotnet Zugriff von Server auf Client schlägt fehl

19/02/2009 - 15:28 von Thomas Weiler | Report spam
Hallo,

habe ein ASP.NET (Dotnet Ver. 1) Web in dem ich in einem WebService eine
Funktion habe, die über einen Parameter einen Quellpfad (inkl.
Dateinamen) entgegennimmt und dann die Datei vom Quellpfad mittels
File.Copy in einen Zielpfad auf dem Server kopiert. Also Bsp:

File.Copy("\\lokalerPC\freigabe$\datei.xml","c:\inetpub\wwwroot\verz1\datei.xml");

Auf der Freigabe freigabe$ hat der User, der den IE benutzt Leserechte.
Führe ich das auf dem gleichen Rechner, wo auch der Webserver làuft aus,
wird die Datei ohne Probleme kopiert. Führe ich das gleiche auf einem
Client (alle sind in der selben AD 2003 Domàne), der die Freigabe
freigabe$ bereitstellt aus, kommt folgender Fehler:

System.Web.Services.Protocols.SoapException: Der Server konnte die
Anforderung nicht verarbeiten -> System.IO.FileNotFoundException: Die
Datei \\lokalerPC\freigabe$\datei.xml konnte nicht gefunden werden
Dateiname: \\lokalerPC\freigabe$\datei.xml
at System.IO.__Error.WinIOError(Int32 errorCode, String str)
at System.IO.File.InternalCopy(String ..

Wenn ich das Client-Verzeichnis mittels UNC Pfad vom Server aus mappe,
komme ich Problemlos drauf.

Mir ist nicht ganz klar, fehlen hier Userrechte (habe testweise auch
schon jeder Vollzugriff auf das Clientverzeichnis gegeben ohne Erfolg)
oder muss man hier der Dotnet Umgebung weitere Rechte einràumen?

Danke für alle Antworten.
 

Lesen sie die antworten

#1 Frank Dzaebel
19/02/2009 - 20:34 | Warnen spam
Hallo Thomas,

File.Copy("\\lokalerPC\freigabe$\datei.xml","c:\inetpub\wwwroot\verz1\datei.xml");



schreibe mal ein @ vor die beiden Strings. Also etwa:
File.Copy(@"\\lokalerPC\freigabe$ .");
- Gib auch mal den dritten Parameter (true) mit an.
- Gib auch mal in Deiner WebMethod den User
aus, unter dem der Code làuft (nebst realem Remote-
Zugriffs-Test), Du wirst evtl. sehen, dass es unter
Networkservice oder ASPNET-User làuft (je nach OS/IIS).
Dann musst Du natürlich die Rechte haben!

[WebMethod]
public string Test()
{ return WindowsIdentity.GetCurrent().Name;
}


- Nutze ggf. "Server.MapPath" anstatt das hart codierte "c:\inetpub ...".
Bessere Gruppe ggf.:
microsoft.public.de.german.entwickler.dotnet.aspnet

Links zu best practices und Codebeispielen für solche
Account-Techniken (sorry, ist jetzt ASP.NET 2.0] :

[How To: Use Impersonation and Delegation in ASP.NET 2.0]
http://msdn.microsoft.com/en-us/lib...98351.aspx

[How To: Create a Service Account for an ASP.NET 2.0 Application]
http://msdn.microsoft.com/en-us/lib...98297.aspx

[Code mit anderen Rechten ausführen]
http://dzaebel.net/LogonUser.htm

[How To: Use the Network Service Account to Access Resources in ASP.NET]
http://msdn.microsoft.com/en-us/lib...98320.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen