我的 ASP 页面从共享目录中读取文件并将其发送给用户。
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition:", string.Format("attachment; filename={0}", fileName));
Response.WriteFile(filePath);
Response.End();
此 ASP 代码在 Web 服务器上运行,我想它作为本地系统帐户运行,因为 IIS 是。filePath 指向文件服务器上的一个文件 \\fileserver\shared\abc.pdf
当我在本地机器上调试代码时,会从 ASP 页面正确读取文件。但是,当我在 Web 服务器上运行它时,它无法读取该文件。我需要给 \fileserver\shared 什么权限才能让 ASP 页面正确读取文件?显然本地系统不是权限页面中的有效用户登录。
ASP.NET 工作进程使用 IIS 中配置的应用程序池的标识运行。在 IIS 6 及更高版本中,这默认为网络服务(如 splattne 指出的那样)。
如果您需要从 ASP.NET 应用程序访问远程文件,我建议您创建一个特定的域帐户并以该用户身份运行应用程序池,并授予该用户访问共享的权限。这样您就可以控制谁可以访问这些文件。网络服务是一个内置帐户,存在于所有 WinXP 机器(及更高版本)上,因此您不希望为此打开共享。
另一种解决方案是只提升访问共享的代码以使用域登录,但让其余的 ASP.NET 代码作为网络服务运行。这可能更安全,尽管您必须弄清楚如何安全地存储凭据。
-戴夫
网络服务和本地系统都以计算机帐户 (DOMAIN\computer$) 的形式出现在网络上。因此,如果您无法使用常规用户帐户,则需要授予该帐户对文件共享的权限。
在 Windows Server 2003 (IIS 6.0) 中,ASP.NET 代码运行为
帐户。因此,将文件夹读取权限授予该内置帐户。
Microsoft TechNet 文章:IIS 和内置帐户 (IIS 6.0)