Directory.CreateDirectory在共享主机上抛出UnauthorizedAccessException的可能原因

时间:2010-12-29 09:30:00

标签: asp.net security hosting

我目前正在开发一个ASP.NET 3.5 / IIS7应用程序,我正在使用WinHost作为临时托管环境。我正在阅读一些我认为是权限问题的剧集,并且票务流程刚刚达到“你在自己的舞台上”。

这是我正在尝试做的事情:

var dir = Server.MapPath("~/MyFolder/NewPath");
Directory.CreateDirectory(dir);

这是我得到的回应:

  

访问路径   'E:\ web \ MyAccount \ MyFolder \ NewPath'是   拒绝。

     

描述:未处理的异常   在执行期间发生   当前的网络请求。请查看   堆栈跟踪以获取更多信息   错误及其来源   代码。

     

异常详细信息:   System.UnauthorizedAccessException的:   访问路径   'E:\ web \ MyAccount \ MyFolder \ NewPath'是   拒绝。

堆栈跟踪显示CreateDirectory行失败。该应用程序在本地运行良好,并且运行应用程序池的标识具有对“MyFolder”路径的写入权限。在这两种环境中,信任级别都设置为“完全”。

WinHost的指导是:

  

默认情况下,asp.net用户已满   对您网站的权限。

进一步研究,WindowsIndentity.GetCurrent()。Name返回“W02 \ aspnet_17884”,它似乎是一个帐户特定的身份。我的感觉是这个帐户没有权限写入应用程序的文件系统,但当我提示WinHost时,我收到了:

  

您遇到的问题是   与您的申请相关   配置。

  

我建议做的是   注册然后发布你的   DiscountASP.NET中的问题   社区论坛

这显然是为什么现在问题出现在Stack Overflow:)

有人建议任何应用级配置更改吗?这更可能是托管网站上的权限问题吗?感谢。

更新:我还put the question up on the WinHost forum

2 个答案:

答案 0 :(得分:4)

答案是......网站部署打破了它。实际上,答案严格来说,权限根本不存在(如预期的那样),但原因似乎是Web部署以某种方式删除了写权限。我可以从具有发布ACL能力的Web部署的角度看到这一点,但是为什么WinHost允许它操纵包含该网站的目录的权限超出我的范围。

关于我的问题(以及WinHost的回复)的更多信息,在他们的论坛下No write access to file system开始。

答案 1 :(得分:0)

是的,“W02 \ aspnet_17884”应该有足够的权限来创建文件夹。我建议您在ASPSPIDER上创建一个免费帐户,并在其中上传一个非常简单的示例,其配置与您的类似。如果它在那里工作而不在WinHost上工作,你可以向他们展示它是如何在aspspider上工作而不是在他们的服务器上工作。然后强迫他们解决或获得新主持人。