2010-07-20 72 views
2

我在IIS6中设置了虚拟目录。这映射到共享的网络驱动器。Server.MapPath()返回与DirectoryInfo一起使用时不存在的路径

我可以用

string mappedPath = HttpContext.Current.Server.MapPath(path); 

然后创建一个DirectoryInfo对象,因为我想在目录中查找某些文件正确映射路径。

DirectoryInfo updateDirectory = new DirectoryInfo(mappedPath); 

但是那么updateDirectory.Exists是错误的?我可以从mappedPath中取出字符串并将其复制到开始 - >运行中以便到达路径,以便我知道它存在。我使用集成的Windows身份验证对Web服务进行身份验证,并拥有所需文件夹的权限。

有没有什么明显的我在代码中缺少?或者这是纯粹的IIS设置和配置等?

+0

你也可以发布mappedPath的确切输出或值吗?我认为,它可能存在一些问题。@Adam,他说,他已经使用Start-> Run验证了它。 – Kangkan 2010-07-20 11:58:49

+0

@Adam:是的,我可以手动验证它,如上所述 – 2010-07-20 11:59:50

+0

@Kangkan:输出是“\\\\ someserver \\ somepath”,这是正确的,但存在,但是当我创建一个DirectoryInfo对象时,它返回False for Exists属性。 – 2010-07-20 12:01:24

回答

2

根据此链接:

http://bytes.com/topic/asp-net/answers/471616-server-mappath-virtual-directories

Server.MapPath对虚拟目录使用时不会给期望的输出。

如果是服务器的权限,并且您使用Windows身份验证,请确保您有这个在你的配置:

<identity impersonate="true" /> 

的DirectoryInfo返回出错条件错误:如果文件夹不存在;你没有权限;或者它是一个断开的网络文件夹。

听起来像你的ASP.NET工作进程对我的权限 - 模拟将解决这个问题。

+0

很好地诀窍,谢谢。 – 2010-07-20 12:13:01

+0

酷,所以我可以记住一些做ASP.NET的东西! Windows身份验证应用于当前用户主体,但您需要手动提升“工作进程”。 – 2010-07-20 12:14:22

4

您需要检查您的服务工作流程帐户是否具有该文件夹的访问权限。 AFAIK Windows身份验证不会为工作进程带来模拟,因此它可能与Windows acct不同。 或者(只是为了证明帐户问题),您可以使用您的帐户运行应用程序池以查看问题是否会消失。

相关问题