【问题标题】:Server is unwilling to process the request - Active Directory - Add User via C#服务器不愿意处理请求 - Active Directory - 通过 C# 添加用户
【发布时间】:2012-12-06 17:17:22
【问题描述】:

我使用this page 中的示例将用户添加到 Active Directory 组,但执行时出现异常消息“服务器不愿意处理请求”

dirEntry.Properties["member"].Add(userDn);

【问题讨论】:

  • 我还想添加对链接 C# : The server is unwilling to process the request 的引用。该链接对我很有帮助。
  • @Mauricio 我会要求您回答自己的问题。因为这个问题很受欢迎,所以可以回答。但后来他发现它已经被回答了。所以如果你能自己回答就好了。

标签: active-directory active-directory-group


【解决方案1】:

我在尝试将成员添加到组时遇到了类似的问题。专门尝试将组添加到组并获得相同的有用错误“服务器不愿意处理请求” OP 提供的答案对我不起作用。

对我来说,我无法将组添加到我的组的原因是因为我尝试添加成员的组是一个“全局”范围的组,而它需要是一个“通用”范围的组。希望这对某人有所帮助。

【讨论】:

  • 是的,当更新中请求的数据类型被拒绝时,总是会抛出此错误。在您的情况下是组的类型,在我的情况下是另一个 DN 值错误。
【解决方案2】:

这个问题花了我很多时间来解决。首先,错误信息看起来像个笑话。其次,没有别的了,只有那条信息。

无论如何,我设法通过以下方式修复它:

  1. 确保userDn 包含整个路径(例如"LDAP://server-address/CN=" + userDn + ",OU=optional,DC=your-domain,DC=com"。这实际上非常重要,如果您不提供完整路径,它会抛出一个HRESULT 异常:0x80005000。

  2. dirEntry.Properties["member"].Add(userDn); 替换为entry.Invoke("Add", new object[] { userDn });

然后我想删除一个用户,我希望 entry.Invoke("Remove", new object[] { userDn }); 能够工作。然而,这个恶魔般的广告只有在你使用小写的“删除”时才会起作用,所以entry.Invoke("remove", new object[] { userDn });对我有用。

【讨论】:

  • 您的搜索器类型可能有误。除非您不使用 LDAP 类而不是更高级别的 DirectorySearcher 和 DirectoryEntry,否则不需要使用完整的 LDAP 路径。当值的格式不可接受时,总是会抛出此异常。我同意该消息很愚蠢,应该将其更改为验证异常,并明确指示哪个验证检查失败。
  • 也许您间接找到了解决方法,但我认为您的问题更多是由搜索器/根条目的类型引起的(例如,有时您需要创建从全局目录生成条目的搜索器,有时DC,有时是域)。
【解决方案3】:

当我的路径与林域名不匹配时,我收到此一般错误消息。例如,如果我的森林域名是 ad.example.com,并且我正在尝试创建一个路径为 CN=Users,DC=example,DC=net 的组,其中一个有 .com,另一个有 .net - 他们不排队。我需要更正我的组以匹配。我的组路径应该是CN=Users,DC=example,DC=com

【讨论】:

    【解决方案4】:

    ldapwiki.com 描述了“服务器不愿意处理请求”的潜在原因。检查您的异常的 ExtendedErrorMessage 属性以确定适用的内容。在我的情况下“00002145:SvcErr:DSID-031A1254,问题5003(WILL_NOT_PERFORM)”。以下行解决了这个问题:

    ent.Properties["groupType"].Value = 8;
    

    我错过了设置 groupType,因此试图将通用组嵌套在全局组中。在ldapwiki.com中查找有关 groupType 属性的更多信息

    【讨论】:

      【解决方案5】:

      请注意,因为.properties("distinguished Name") 的开头可能与.properties("cn") 不同。如果在.properties("cn") 中使用,; 创建用户,则.properties("distinguished Name") 的开头将是带有\,\; 的用户名。

      如果您尝试将使用 .properties("cn") 找到的用户添加到组中,这可能会出错。

      【讨论】:

        【解决方案6】:

        经过几天的搜索,我发现了问题。当您在组中添加用户时,您必须设置“可分辨名称”而不是 LDAP 路径。

        你必须这样写:

        ent.Properties["member"].Add("CN=YourUserName,OU=optional,DC=yourdomain,DC=com");
        

        这是错误的代码:

        ent.Properties["member"].Add("LDAP://CN=YourUserName,OU=optional,DC=yourdomain,DC=com");
        

        当您移除桅杆以保存此规则时

        ent.Properties["member"].Remove("CN=YourUserName,OU=optional,DC=yourdomain,DC=com");
        

        附: ent 是组的 DirectoryEntry 对象

        【讨论】:

          猜你喜欢
          • 2019-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多