服务器不愿意处理请求 - Active Directory - 通过C#添加用户

13

我使用了这个页面中的示例,将用户添加到Active Directory组中,但在执行以下内容时出现异常,异常信息为“服务器不愿意处理请求”:

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


我还想添加一个链接的参考C# : The server is unwilling to process the request。这个链接对我很有帮助。 - Vikram Singh Saini
@Mauricio,我想请您回答自己的问题。因为这个问题正在被点击,以便有人可以回答它。但是当他发现它已经被回答时,就会感到困惑。所以如果您能自己回答它,那就太好了。 - Vikram Singh Saini
6个回答

8

我曾经遇到过类似的问题,我试图将一个成员添加到一个组中。特别是,我试图将一个组添加到另一个组中,并得到了同样有用的错误信息:“服务器不愿意处理该请求”。提供给我解决方案的答案并没有起作用。

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


是的,当更新请求中请求的数据类型被拒绝时,总是会抛出此错误。在你的情况下,是组类型,而在我的情况下,则是 DN 值的另一个错误。 - Tony Wall

3

这个问题让我花费了很多时间来解决。首先,错误信息看起来像是一个玩笑。其次,除了该消息外没有其他信息。

无论如何,我通过以下方法解决了它:

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

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

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


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

2
当我的路径与森林域名不匹配时,我收到了这个通用错误信息。例如,如果我的森林域名是ad.example.com,而我正在尝试使用路径CN=Users,DC=example,DC=net创建一个组,其中一个是.com,另一个是.net - 它们不匹配。我需要更正我的组以使其匹配。我的组路径应该是CN=Users,DC=example,DC=com

这解决了我的问题,当我尝试使用Ansible创建Active Directory用户时。我需要更正我尝试在其中创建用户的OU的可分辨名称。用Ansible术语来说,我需要更正community.windows.win_domain_user > path。 - Dave

1

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

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

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

同样适用于 countryCode 属性。 - Kiquenet

0

小心一点,因为.properties("distinguished Name")的开头可能与.properties("cn")不同。如果用户在.properties("cn")中使用了,;,那么.properties("distinguished Name")的开头将是带有\,\;的用户名。

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


-1

经过多日的搜索,我终于找到了问题所在。当您将用户添加到组中时,必须设置“可区分名称”,而不是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 对象


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接