C#3.5 ASP.net文件IO问题,UnauthorizedAccessException到网络共享上的文件

每当我尝试访问(只读取 )网络共享“\\ server \ folder1 \ folder2 \ file.pdf”上的文件时,我都会收到UnauthorizedAccessException

我冒充域\ aspnet用户,它具有对上述文件夹的读写权限。 该文件不是只读的。

我尝试通过System.Security.Permissions.FileIOPermission查找权限。 它只是说NoAccess所有文件。

我不确定我还能做什么。

我在Framework 3.5,WinXP,IIS 5.1上使用Visual Studio 2008,ASP.net 2.0。

我假设您已正确设置了模拟。 您已关闭匿名访问,将身份validation模式设置为Windows并将模拟设置为true等。

即使完成所有操作并且正确的帐户模拟,您仍然无法访问该文件。 被模拟的帐户正在使用所谓的网络凭据。 这些仅适用于正在进行模拟的计算机。 当您尝试访问计算机本身的文件时,将使用用户的凭据执行访问,但对于共享上的文件,访问将以未经身份validation的用户身份执行,因此不允许访问。

为了允许您使用用户的凭据进行远程工作,即访问共享,远程数据库的集成安全性等,您需要使用委派而不是模拟。 这是一个涉及Active Directory设置和IIS配置的有点复杂的主题。 看看这篇文章 ,它应该会给你一个很好的起点。

确保域用户具有安全权限共享权限。 也就是说,在共享文件夹上,在属性中的“共享”选项卡下以及“安全”选项卡下添加域用户。

您使用的是什么IIS版本? 如果是版本6,则可以将Web应用程序放在其自己的应用程序池中,然后将该应用程序池的标识设置为域用户帐户。 然后,授予该域用户帐户访问网络共享的权限。

仅供参考,您可以将以下内容放在aspx文件中,以validation您的页面运行的标识符:

 <%@ Page Language="C#" %> <% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %> 

要访问网络共享,上述用户需要是网络管理员设置的域帐户。