Web应用在开发机上可以正常运行,上传到服务器后有关文件上传一直不能正常使用。
错误是:未找到路径“D:/”的一部分。
程序是没有问题,看来肯定是服务器的问题了,权限应该也没问题。后来发现这次在服务器上面安装的盘符与IIS的默认目录不在同一个盘符上,原来.NET FrameWork安装的时候会将aspnet用户增加一个权限,浏览当前盘的权限。而如果不在默认盘的情况下:要在d盘加上users组“读取”、“列出文件夹”的权限。这样才能保证aspnet用户可以访问该盘以及该盘的子目录。
后来在网上偶然发现一篇给服务商的文章:
问题:
为何我添加频道得时候,如果填写频道目录会提示这样的错误:未找到路径“D:/”的一部分。(其中的D:/可能是其它盘符)
回答:
解决办法其实很简单,给磁盘根目录ASPNET用户读权限,程序所在目录ASPNET用户给予写、创建目录、修改等权限即可,详细操作方法请参考“ 创建安全的ASP.NET虚拟主机”
在实际的应用中,我们发现很多的Asp.NET空间提供商并没有相关的经验,而依然停留在Asp的管理模式中。
其中最常见,就是目录权限的配置上:他们大多数沿习了Asp的经验,给用户所在目录赋于所有权限,然后将磁盘根目录的相关权限全部去掉。
这样以来就导致一个问题,就是Asp.NET中的 Server.MapPath 无法使用,这个方法却是创建目录或文件所必须的,如下面创建目录的代码:
Directory.CreateDirectory(Server.MapPath("Test"));
这是一个非常简单的操作:在用户的当前目录下创建一个名为 "Test" 的子目录。
然后就是这样一个操作在没有正确配置的空间就会无法运行,它会提示为什么会有这样的错误呢?
原因就是 Server.MapPath() 这个方法,这个方法是让一个相对路径转为绝对路径,而在转换的过程序中,.NET框架需要得到当前硬盘的一些属性,如盘符等,而这个时候,空间提供商却将.Net用户对磁盘根目录的权限全部拒绝,从而导致程序无法正常运行。
有个时候,空间提供商会说:"你为什么要用绝对路径,而不使用相对路径呢?"
这是行不通的,如果你这样程序:Directory.CreateDirectory("Test");
系统在运行的时候,并不是象你想像的那样,会自动在用户的当前目录下创建目录,而会尝试在 "C:/WINNT/System32" 路径下创建目录 (其中的C:/WINNT表示你的操作系统安装的路径)