“未知错误(0x80005000)”尝试使用DirectoryEntry和模拟(C#)读取远程IIS 6元数据库

时间:2011-04-12 20:56:15

标签: .net iis-6 impersonation directoryservices metabase

(编辑)情节变粗:相同的代码(不需要模拟!)从Windows 7客户端成功运行,但不是从Windows 2008 R2客户端运行!这是有问题的代码。 (原始信息如下代码所示。)

var entry = new DirectoryEntry("IIS://" + tbHost.Text + "/W3SVC", tbUsername.Text, tbPassword.Password);
foreach (DirectoryEntry site in entry.Children)
{
    Console.Write("Site {0}\n", site.Name);
    foreach (PropertyValueCollection prop in site.Properties)
        Console.Write("{0}={1}\n", prop.PropertyName, prop.Value);
}

我读了here,对于IIS提供程序,在创建DirectoryEntry对象时无法传递凭据。你必须做impersonation。所以我尝试了下面的代码,但是当我尝试读取属性时,我仍然得到一个带有“未知错误(0x80005000)”文本的COMException,就像我之前尝试传递{{1的用户名和密码时所做的那样构造函数。这是纲要:

  • LogonUser()成功,凭据可以。在我发现我必须使用DirectoryEntry而不是LOGON32_LOGON_NEW_CREDENTIALS之前,我已经被头撞了一下。
  • 远程计算机不在同一个域中。实际上,它根本不属于某个领域。实际上,我将其名称放在客户端的LOGON32_LOGON_INTERACTIVE文件中,以便我可以按名称查看。
  • 在目标计算机上运行Metabase Explorer向我显示我想要读取的密钥确实存在。 (见帖子末尾的图片。)

hosts

enter image description here

2 个答案:

答案 0 :(得分:3)

知道了。我所要做的就是转到服务器管理→角色→Web服务器(IIS)并启用服务管理工具→IIS 6管理兼容性→IIS 6元数据库兼容性。见下图。

它位于客户端计算机中,因此您无需安装IIS中的任何其他内容。

我想知道这对于非服务器Windows(XP,Vista,7)有何用处。

enter image description here

答案 1 :(得分:0)

您还可以以管理员身份打开Powershell,并使用以下命令启用IIS 6管理兼容性:

Import-Module Servermanager
Add-WindowsFeature Web-Mgmt-Compat -IncludeAllSubFeature
Get-WindowsFeature #Show list of all installed features