我制作了一个 Web 应用程序,它从 Active Directory 读取/写入数据。在我的 web.config 文件中有
<identity impersonate="true"/>
和
<authentication mode="Windows"/>
当我显示
System.Web.HttpContext.Current.User.Identity.Name
在某些标签中,它显示mydomain\myusername
,所以我认为模仿有效。
现在的问题。当我访问运行 IIS Web 服务器的服务器上的应用程序时,一切正常。但是当我从远程 PC 访问 Web 应用程序时,我得到一个异常(标签仍然显示“mydomain\myusername”)。
我已经追查到问题了。在我打电话时的代码中
Forest currentForest = Forest.GetCurrentForest();
变量currentForest
知道它的currentForest.Name
, currentForest.RootDomain
or currentForest.ForestMode
,但是任何对currentForest.Domains
, currentForest.Sites
or的调用都会currentForest.GlobalCatalogs
导致
System.DirectoryServices.ActiveDirectory.ActiveDirectoryOperationException。
现在我迷路了,不知道要进一步调试什么。我使用的帐户是 Enterprise Admins(多域林)的成员。我已经在两个具有不同 IIS 版本(IIS 7.5 和 IIS 6.0)的不同服务器上尝试过,但没有成功。
抛出的异常并没有多大帮助:
异常详细信息:System.DirectoryServices.DirectoryServicesCOMException:发生操作错误。
源错误:在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。堆栈跟踪:
DirectoryServicesCOMException (0x80072020):发生操作错误。System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +557
System.DirectoryServices.DirectoryEntry.Bind() +44
System.DirectoryServices.DirectoryEntry.get_AdsObject() +42
System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne) +98
System. DirectoryServices.ActiveDirectory.ADSearcher.FindAll() +46
System.DirectoryServices.ActiveDirectory.Forest.GetDomains() +543[ActiveDirectoryOperationException:发生操作错误。]
System.DirectoryServices.ActiveDirectory.Forest.GetDomains() +512484
System.DirectoryServices.ActiveDirectory.Forest.get_Domains() +44
myWebApp.ASPpage.Button_Click(Object sender, EventArgs e) in C:\Documents and Settings\myUser\documents\ visual studio\Projects\MyWebApp\MyWebApp\ASPPage.aspx.cs:158
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +115
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +140
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,字符串 eventArgument)+29
System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)+2981
编辑:如果不明显,我想用currentForest.Domains
UPN 名称在整个林(所有域)中搜索用户。