4

当我尝试从本地网络中的共享文件夹访问文件时遇到问题。
当我在 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();
}

它给了我以下错误:

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息: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 帐户,然后选中所需访问权限的框。

请有人可以帮助我。提前致谢。

4

3 回答 3

1

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

阅读此内容以获取更多信息

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

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

于 2012-04-23T18:39:12.853 回答
0

解决方案1:

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

解决方案2:

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

于 2013-09-30T03:43:26.367 回答
0

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

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

于 2017-07-17T11:10:11.330 回答