2009-06-12 3 views
4

Ich habe eine Visual Studio 2008-Lösung, die eine Handvoll von Projekten enthält. Ein Projekt enthält eine WCF Service, die ich bereitstelle. Dieser WCF-Dienst verweist auf Code in einem der anderen Projekte. Dieser Code versucht, eine Datei zu lesen, die sich in einem Ordner im WCF-Projekt befindet. Pseudo-Projektstruktur:C#: Wie kann Server.Mappath eine Datei lesen?

Solution 
Project1 
    myclass.cs 
    string file = Server.Mappath(""); 


Project2 
    filefolder 
    myfile.txt 

Wie lautet die richtige Syntax für den Mappath? Ich habe alle verschiedenen Variationen versucht, wie zum Beispiel:

".filefolder/myfile.txt" 
"/filefolder/myfile.txt" 
"./filefolder/myfile.txt" 
"~/filefolder/myfile.txt" 

Keine scheinen die Datei erreichen zu können. Eine Sache, an die ich dachte: Visual Studio 2008 führt das Projekt und WCF in einer eigenen Sandbox in IIS. Könnte das das Problem sein? Würde es funktionieren, wenn es im regulären IIS eingerichtet und bereitgestellt wird?

+0

Odd aufzunehmen, zog ich die Datei, die ich von Project2 in Project1 zugreifen müssen, und es kann nicht finde es immer noch! Ich habe versucht: HttpContext.Current.Server.MapPath ("filefolder/myfile.txt") und HttpContext.Current.Server.MapPath ("/ filefolder/myfile.txt") – Blaze

Antwort

-1

Das Problem besteht darin, dass das Dateisystem beim Aufrufen der WCF vollständig in den Ordner bin/Debug ausgeführt wird. Von dort aus versucht MapMath nicht zu funktionieren. Backtracking den Pfad funktioniert:

filedata = File.ReadAllBytes("../../filefolder/myfile.txt"); 

Das hat funktioniert. Danke für die Hilfe Jungs!

0

Die beste Sache wäre, dies nicht zu tun, um damit zu beginnen.

Warum möchten Sie den Bereitstellungsort eines Projekts an den Bereitstellungsort eines anderen binden? Wenn Sie den WCF-Dienst zum Lesen der Datei benötigen, kopieren Sie die Datei in den WCF-Dienst.

+0

Projekt1 enthält alle Datenzugriff und Geschäftsobjekte, die ich dem Kunden, der den WCF kauft, nicht zugänglich machen möchte (Project2). Alles, was sie bekommen, ist das WCF-Projekt mit den Endpunkten und einigen DLLs. – Blaze

+0

Und dennoch benötigt der WCF-Dienst Zugriff auf eine Datei aus dem DAL/BLL-Projekt. Brauchen diese Projekte auch die Datei? In jedem Fall sollten Sie die Dateien entweder in den gleichen Ordner wie den WCF-Dienst stellen oder den Pfad zur Datei in der Konfigurationsdatei des WCF-Projekts angeben. –

+0

Es ist verwirrend ich weiß. Die Datei wird im WCF-Projekt gespeichert (2). Das DAL/BLL-Projekt (1) muss die Datei lesen, einige Operationen damit durchführen und das Ergebnis an den WCF weiterleiten, um den Endpunkt zu verlassen. – Blaze

0

Von MSDN; Da die Pfadparameter in den folgenden Beispielen nicht mit einem Schrägstrich beginnen, werden sie relativ zum Verzeichnis zugeordnet, das die Beispieldatei enthält.

Versuchen:

Server.Mappath("filefolder/somefile.file"); 
+0

Das hat auch nicht funktioniert, ich glaube ich habe jeden möglichen Weg ausprobiert! – Blaze

2

Haben Sie versucht HostingEnvironment.ApplicationPhysicalPath mit?

var fileInfo = new FileInfo(
    Path.Combine(new DirectoryInfo(HostingEnvironment.ApplicationPhysicalPath).Parent.Name , @"filefolder/myfile.txt")); 
2
Server.MapPath(Path.Combine(new DirectoryInfo(HostingEnvironment.ApplicationPhysicalPath).Parent.Name , "Filename.txt")); 

Scheint für mich zu arbeiten. Ich brauchte

using System.Web.Hosting; 
31
var serverPath = 
     System.Web.Hosting.HostingEnvironment.MapPath("~/filefolder/myfile.txt"); 
+0

Schön. Diese spezielle Antwort hat mir sehr geholfen. Es funktioniert in einer Umgebung mit teilweisem Vertrauen, wo die anderen Antworten dies nicht tun. –

+0

Stimmen Sie Blaze dafür zu, dass Sie diese richtige Antwort nicht gewählt haben und egoistisch sind und eine eigene Antwort haben – VISHMAY