2009-06-12 6 views
4

У меня есть решение Visual Studio 2008, которое содержит несколько проектов. Один проект содержит WCF Service Я развертываю. Эта служба WCF ссылается на некоторый код в одном из других проектов. Этот код пытается прочитать файл, находящийся в папке в проекте WCF. Псевдопроектная структура:C#: Как Server.Mappath читает файл?

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


Project2 
    filefolder 
    myfile.txt 

Каков правильный синтаксис для ввода в Mappath? Я пробовал все различные варианты, такие как:

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

Похоже, что нет возможности добраться до файла. Одна вещь, о которой я подумал: Visual Studio 2008 запускает проект и WCF в своей песочнице в IIS. Это может быть проблема? Будет ли он работать при настройке и развертывании в обычном IIS?

+0

Странно, я переместил файл, мне нужно получить доступ из Project2 в Проект1 и до сих пор не могу найти его! Я пробовал: HttpContext.Current.Server.MapPath ("filefolder/myfile.txt") и HttpContext.Current.Server.MapPath ("/ filefolder/myfile.txt") – Blaze

ответ

-1

Проблема заключается в том, что при вызове WCF файловая система полностью запускается в папку bin/Debug. Поэтому попытка MapMath оттуда не работает. Откат пути:

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

Это сработало. Спасибо за всю помощь, ребята!

0

Лучше всего было бы не делать этого для начала.

Почему вы хотите связать местоположение развертывания одного проекта с местом развертывания другого? Если вам нужна служба WCF для чтения файла, скопируйте файл в службу WCF.

+0

Project1 содержит все доступ к данным и бизнес-объекты, которые я не хочу подвергать клиента покупке WCF (Project2). Все, что они получают, это проект WCF с конечными точками и некоторыми DLL. – Blaze

+0

И тем не менее, службе WCF необходим доступ к некоторому файлу из проекта DAL/BLL. Нужны ли этим проектам и файлы? В любом случае, поместите файлы в ту же папку, что и служба WCF, или поместите путь к файлу в файле конфигурации проекта WCF. –

+0

Смущает я знаю. Файл хранится в проекте WCF (2). Проект DAL/BLL (1) должен прочитать файл, выполнить некоторые операции с ним и передать результат WCF для выхода из конечной точки. – Blaze

0

От MSDN; Поскольку параметры пути в следующих примерах не начинаются с символа косой черты, они отображаются относительно каталога, содержащего пример файла.

Try:

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

Это тоже не сработало, я думаю, я пробовал все возможные пути! – Blaze

2
Server.MapPath(Path.Combine(new DirectoryInfo(HostingEnvironment.ApplicationPhysicalPath).Parent.Name , "Filename.txt")); 

Кажется, для меня работает. Я должен включать

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

Ницца. Этот конкретный ответ помог мне потратить тонну. Он работает в частичной среде доверия, где другие ответы не соответствуют. –

+0

Голос до Blaze за то, что вы не выбрали правильный ответ и не эгоистичны и не выбрали собственный ответ – VISHMAY

Смежные вопросы