2011-10-25 50 views
2

我們正在部署一個新的ASP.NET Web應用程序,該應用程序使用我們也構建的單獨的DLL,該DLL單獨調用Active Directory以查詢簡單的用戶和組成員信息。服務器是Windows Server 2003.Web應用程序在本地主機上工作但在遠程連接上失敗

應用程序正常工作,如果我將RDP發送到服務器並在本地主機下瀏覽它。

應用程序當我從單獨的PC瀏覽到它時會引發以下錯誤。如果我從服務器上的RDP會話瀏覽它,也會引發相同的錯誤,但在服務器名稱下瀏覽它。

這是代碼訪問安全問題嗎?其他想法?

異常詳細信息: System.Runtime.InteropServices.COMException:發生操作錯誤。

源錯誤: 執行當前Web請求期間生成未處理的異常。關於異常的來源和位置的信息可以使用下面的異常堆棧跟蹤來標識。

堆棧跟蹤: [COMException(0x80072020):發生操作錯誤。 ]

System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +420085 
    System.DirectoryServices.DirectoryEntry.Bind() +36 
    System.DirectoryServices.DirectoryEntry.get_Name() +32 
    USM.UsmAD.get_DomainName() in C:\DevWork\Repo_CP\UnifiedSecurity\BRANCHES\LoginVsGUID\Applications\Active Directory Search\USMAD\USMAD\UsmAD.cs:60 
    USM.UsmAD.Get_UserGroupNames(String username) in C:\DevWork\Repo_CP\UnifiedSecurity\BRANCHES\LoginVsGUID\Applications\Active Directory Search\USMAD\USMAD\UsmAD.cs:190 
    AdminWeb.CheckAccessDAL.GetGroupNames() in C:\DevWork\Repo_CP\UnifiedSecurity\BRANCHES\LoginVsGUID\Applications\AdminWeb\USMDAL\CheckAccessDAL.cs:28 
    AdminWeb.CheckAccessDAL.SetMenuAccess(Menu mnuUSMAdmin) in C:\DevWork\Repo_CP\UnifiedSecurity\BRANCHES\LoginVsGUID\Applications\AdminWeb\USMDAL\CheckAccessDAL.cs:89 
    AdminWeb.SiteMaster.TrimMainMenus() in C:\DevWork\Repo_CP\UnifiedSecurity\BRANCHES\LoginVsGUID\Applications\AdminWeb\AdminWeb\Site.Master.cs:50 
    AdminWeb.SiteMaster.Page_Load(Object sender, EventArgs e) in C:\DevWork\Repo_CP\UnifiedSecurity\BRANCHES\LoginVsGUID\Applications\AdminWeb\AdminWeb\Site.Master.cs:17 
    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35 
    System.Web.UI.Control.OnLoad(EventArgs e) +91 
    System.Web.UI.Control.LoadRecursive() +74 
    System.Web.UI.Control.LoadRecursive() +146 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207 
+0

什麼安全上下文是Web應用程序運行的?當向Active Directory發出請求時 - 正在傳遞什麼憑證?的 – kd7

+0

可能重複[Acitve指南COM異常 - 一個操作發生錯誤(0x80072020)](http://stackoverflow.com/questions/7285503/acitve-directory-com-exception-an-operations-error-occured-0x80072020) – NotMe

+0

@ kd7沒有特定的憑據正在傳遞。 Get_UserGroupNames中的PrincipalContext被實例化爲: 使用(PrincipalContext ctx = new PrincipalContext(ContextType.Domain,DomainName +「.com」))' – AjarnMark

回答

0

你可能需要在有權限訪問它需要跟Active Directory資源的域級別身份運行你的應用程序池。

Specify an Identity for an Application Pool (IIS 7)

Configuring Application Pool Identity with IIS 6.0 (IIS 6.0)

這裏有一個文章,如果您需要在運行時做到這一點:

How To: Use Impersonation and Delegation in ASP.NET 2.0

我也鼓勵您實現一個UnhandledException處理程序來記錄這些運行 - 時間錯誤。

+0

當我這樣做時,該網站現在提示我登錄,並且它永遠不會接受我的域憑據。三次失敗後,我收到401.1未經授權的錯誤。我是服務器上的管理員,所以應該沒有問題。該站點繼續在localhost下運行。 – AjarnMark

0

聽起來像在DLL

嘗試允許該文件IUSR訪問的燙髮問題....

+0

我以前錯了。我們實際上並沒有將DLL部署到GAC中。 IURS可以訪問DLL,就像IIS_WPG組一樣。 – AjarnMark

+0

告訴我DLL的工作原理,是使用當前的用戶憑證來訪問AD還是使用某種硬編碼的服務帳戶...... – Matthewhall58

+0

沒有傳遞特定憑證。代碼的引用是這樣的:'' using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain,DomainName +「.com」)){using(UserPrincipal up = UserPrincipal.FindByIdentity(ctx,IdentityType.SamAccountName,username))if(up!= null){using(PrincipalSearchResult Groups = up.GetAuthorizationGroups()){foreach(GroupPrincipal g in Groups)'' – AjarnMark

相關問題