从IIS中部署的应用程序访问共享文件夹

时间:2012-04-23 18:11:18

标签: asp.net iis

当我尝试从本地网络中的共享文件夹访问文件时出现问题 当我在Visual Studio中运行应用程序时,它工作正常,我可以下载该文件,但是当我将应用程序部署到IIS时,它根本无法工作。
我不明白为什么,因为我向所有用户授予完全权限,包括NETWORK SERVICE和IIS_USR 我正在使用我的电脑来测试这个。它有Windows 7并运行IIS 7.5。我正在尝试访问的共享文件夹是在没有安装IIS的Windows Vista安装中。

下载文件的代码是:

protected void button_Click(object sender, EventArgs e)
{
    Response.Clear();
    Response.ContentType = "application/octet-stream";
    Response.AddHeader("Content-Disposition", "attachment; filename=S10.png");
    Response.WriteFile(@"\\192.168.1.82\Machine\file.png");
    Response.End();
}

它给了我以下错误:

  

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.UnauthorizedAccessException:Acesso negado   ao caminho'\ 192.168.1.82 \ Machine \ file.png'。

     

ASP.NET无权访问所请求的资源。考虑   授予对ASP.NET请求的资源访问权限   身份。 ASP.NET具有基本进程标识(通常是   IIS 5上的{MACHINE} \ ASPNET或IIS 6和IIS 7上的网络服务,以及   IIS 7.5上配置的应用程序池标识,如果使用的话   该申请不是冒充。如果申请是   冒充通过,身份将是   匿名用户(通常是IUSR_MACHINENAME)或经过身份验证的用户   请求用户。

     

要授予对文件的ASP.NET访问权限,请在资源管理器中右键单击该文件,   选择“属性”,然后选择“安全”选项卡。单击“添加”进行添加   适当的用户或组。突出显示ASP.NET帐户,和   选中所需访问的框。

请有人帮助我。 提前谢谢。

3 个答案:

答案 0 :(得分:1)

您已经授予了文件系统的访问权限(完全控制对此有些过分,读取或修改应该没问题),但您可能会发现共享权限仍然是默认的只读。您需要更改共享权限。

Read this for more info

编辑:调试时工作正常的原因是因为它使用的是您登录的帐户,而不是VS中的aspnet帐户。

创建一个新的应用程序池,在服务帐户下运行,该服务帐户是IIS服务器上IIS_WPG组的成员,并且对您要写回的共享具有权限(请记住将服务帐户设置为密码永不过期) 。给IIS_WPG组Read&对网站目录执行,列出文件夹内容和读取权限。更改Web应用程序以在此新Web池中运行。

答案 1 :(得分:0)

解决方案1:

您可以定义域用户。让IIS服务器与此用户一起运行(通过池标识或“连接为”)。授予此用户对共享文件夹的访问权限。

解决方案2:

将IIS服务器帐户添加到包含共享文件夹的服务器的用户组中,在共享文件夹上授予此用户访问权限。

答案 2 :(得分:0)

如果文件和Machine文件夹在C Drive中,那么您还需要授予包含此文件路径的根文件夹的权限,因为C Drive通常是读/写保护的,因为它包含系统文件。

例如,如果文件位于路径C:\ Machine \ file.png中。 然后,您需要添加IIS用户组并将相关权限授予计算机文件夹,而不仅仅是文件,即file.png。