我的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上的文件
当我debugging我的本地机器上的代码时,该文件是从ASP页面正确读取的。 但是,当我在Web服务器上运行它,它不能读取该文件。 我需要什么权限给\文件服务器\共享,以便ASP页面将正确读取文件? 显然本地系统不是在权限页面上的有效用户login。
ASP.NET工作进程使用在IIS中configuration的应用程序池的标识运行。 在IIS 6及更高版本中,默认为networking服务(如splattne指出的那样)。
如果您需要从您的ASP.NET应用程序访问远程文件,我build议您创build一个特定的域帐户,并以该用户身份运行应用程序池,并同时向该共享授予相同的用户访问权限。 这样你可以控制谁可以访问这些文件。 networking服务是一个内置的帐户,存在于所有的WinXP机器(及以上),所以你不想打开共享。
另一个解决scheme是提升访问共享的代码以使用域login,但让其余的ASP.NET代码作为networking服务运行。 这可能是更安全的,但你必须弄清楚如何安全地存储凭证。
戴夫
networking服务和本地系统都作为计算机帐户(DOMAIN \ computer $)出现在networking上。 因此,如果您无法使用常规用户帐户,则需要为该文件共享提供该帐户的权限。
在Windows Server 2003(IIS 6.0)中,ASP.NET代码运行为
Network Service
帐户。 因此,将文件夹读取权限授予该内置帐户。
Microsoft TechNet文章: IIS和内置帐户(IIS 6.0)
内置的networking服务用户帐户对系统的访问权限比本地系统用户帐户less,但networking服务用户帐户仍然能够在整个networking中与计算机帐户的凭证进行交互。
对于IIS 6.0,build议为应用程序池定义的工作进程标识作为networking服务用户帐户运行,这是默认设置。 下表显示了networking服务帐户的默认用户权限以及每个权限的派生方式。