2013-03-04 76 views
1

我在IIS 7中的默认网站下有一个应用程序,并且每当我尝试访问同一个域(但不同的计算机)上的另一个文档时,File.Exists返回False,即使该文件确实存在,我可以通过托管该站点的计算机访问它。设置的AD部分似乎工作正常,我只是无法访问域中不同机器上的文档。这里是我的IIS设置:File.Exists在Active Directory环境中返回False

  1. 应用程序池:.NET 4.0,集成管道和使用ApplicationPoolIdentity标识。我试过使用NetworkService,但这似乎没有什么区别。

  2. 身份验证:我的应用程序仅启用了ASP.NET模拟和Windows身份验证。 bin文件夹是相同的。

如果还有什么与IIS设置相关的,请让我知道,我会得到它添加。

我也试过授予我的机器完全权限的文件夹,我试图访问该文件(这是在另一台机器在同一个域中)。这似乎也没有区别。

有没有人遇到过这种情况,或知道其他任何我可以尝试或知道的任何IIS设置,我可以检查?如果在我的设置中还有其他任何相关内容,请告诉我!

UPDATE:

是否有可能找出使用什么样的身份或谁被假冒时System.IO.File.Exists()被调用,或者更具体地说找出谁该方法如,假冒?我试过在调用File.Exists()之前检查Thread.CurrentPrincipal.Identity.Name,并且正确返回我的域用户。

因此,执行File.Exists()时看起来不是用户正在模拟。更重要的是,如果在IIS中,我更改ASP.NET模拟(在身份验证设置中)以使用我的特定域用户,一切正常!但是,当我改回它使用“认证用户”,它不?

我也可以确认在File.Exists()之前调用Principal.WindowsIdentity.GetCurrent.Name()也会返回正确的域用户。

更新2:

我也尝试应用程序池标识设置为我的特定领域的用户,这似乎不有所作为无论是。在这一点上,我不确定当检查文件是否存在时,可以模拟其他帐户?

更新3:

我拥有我想访问文件的设备上使用Process Monitor试过了,但是当我筛选下来到我要找的文件类型(或期待看到),当我重新运行我的测试时什么也没有显示。我只能假定对你无权访问的文件执行File.Exists(),不会注册到进程监视器?有没有其他方法可以找出哪个模拟用户/服务尝试(无法)访问这些文档?

UPDATE 4:

使用下面@约翰发现的例子,我已经试过检查之前以编程模拟登录的用户,如果该文件存在:

Dim wID As WindowsIdentity = HttpContext.Current.User.Identity 
Dim ctx As WindowsImpersonationContext = Nothing 

ctx = wID.Impersonate() 

If System.IO.File.Exists(sFile) Then 

Else 
    'Still gets here? 
End If 

然而,File.Exists()即使在模仿时仍然会返回错误。

UPDATE 5(液):

,我需要这样的:

Using ctx As System.Security.Principal.WindowsImpersonationContext = System.Security.Principal.WindowsIdentity.Impersonate(IntPtr.Zero) 
    'My code here 
End Using 

回答

1

在IIS中,选择您的网站,然后转到验证中,选择Windows身份验证,

  1. 选择高级设置 - >确保内核模式已启用
  2. 选择提供程序,检查是否N egotiate是映射中的第一项

当您测试只使用IE并从您的Intranet运行。

您也可以模拟特定用户,转到ASP.NET模拟,指定有权访问远程目录的用户。

+0

谢谢你的回复,但我加倍检查,我已经正确设置了这些设置。另外,在IE中测试没有区别(我之前使用Chrome)。 – lhan 2013-03-05 13:41:21

+0

其实,最后一点的工作 - 当我将ASP.NET身份验证从“身份验证用户”更改为我的帐户专门,它工作正常。我不明白为什么当它被设置为“Authenticated User”时它没有使用我的帐户?更重要的是,当使用“Authenticated User”时,我甚至在检查文件是否存在之前尝试调用'Thread.CurrentPrincipal.Identity.Name',并确保它返回正确的“domain \ username”,并且它! – lhan 2013-03-05 13:52:42

+0

它与Web服务器无法通过Kerberos将凭据传递到远程计算机有关,请参阅http://forums.iis.net/t/1114220.aspx/1以获取解释。有另一种方式我使用编程模拟当您需要检查该文件,请参阅http://msdn.microsoft.com/en-us/library/ff647404.aspx – john 2013-03-05 23:03:31

相关问题