2

我正在 IIS8(Windows 服务器 2012)上建立一个新的 asp.net 站点。我正在尝试采用适用于 Windows Server 2008、IIS6 的旧代码。两者都是虚拟服务器。

Windows 身份验证已启用。

匿名身份验证已禁用。(尝试根据我阅读的一些帖子启用,但没有改变)

通过以下方式获取用户:

string user = System.Web.HttpContext.Current.User.Identity.Name;

int separatorIndex = user.LastIndexOf(@"\");
if (separatorIndex != -1 && separatorIndex < user.Length - 1)
  {
    user = user.Substring(separatorIndex + 1);
  }

DirectoryEntry rootEntry = new DirectoryEntry("LDAP://na.xxxxxx.biz");

DirectorySearcher directorySearcher = new DirectorySearcher(rootEntry);
directorySearcher.Filter = string.Format("(&(objectClass=user)(objectCategory=user) (sAMAccountName={0}))", user);
directorySearcher.PropertiesToLoad.Add("displayName");

var result = directorySearcher.FindOne();

这在 localhost 上效果很好,在服务器上返回错误:

System.DirectoryServices.DirectoryServicesCOMException (0x80072020):发生操作错误。在 System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) 在 System.DirectoryServices.DirectoryEntry.Bind() 在 System.DirectoryServices.DirectoryEntry.get_AdsObject() 在 System.DirectoryServices.DirectorySearcher.FindAll(Boolean findMoreThanOne) 在 System.DirectoryServices.DirectorySearcher .FindOne() 在 EngApps.App_Code.UserFullName.LookUpDirectory() 在 e:\inetpub\wwwroot\App_Code\UserFullName.cs:line 45

第 45 行是我在上面使用 'FindOne()' 提出的最后一行

如果我硬编码我的用户名和密码,一切都在服务器上运行:

rootEntry.Username = user;
rootEntry.Password = "xxxxxx";

但我在旧代码库中不需要这个,所以我猜在 IIS8 中有一个设置。我玩了一下匿名身份验证并阅读了几篇文章,但还没有弄清楚。

谢谢你的帮助。

4

1 回答 1

3

问题很可能是您的应用程序在其中运行的 IIS 应用程序池的标识是无权查询域的东西,例如 LocalService。

您应该检查上一个实例上的 App Pool,并确保身份相同或至少具有相似的访问能力。

于 2013-07-02T21:26:05.840 回答