2013-03-04 123 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

相關問題