0

我有一个页面可以使用 VB.NET 在我们的活动目录中创建新用户我正在使用以下代码

Dim rootEntry As New DirectoryEntry
With rootEntry
    .Path = "LDAP://" & strServer & "/" & strLDAP
    .AuthenticationType = AuthenticationTypes.Secure
    .Username = strServerUsername
    .Password = strServerPassword
End With



Dim newUser As DirectoryEntry = rootEntry.Children.Add("CN=" & strCN, "user")
With newUser
    .CommitChanges()
    .Properties("userPrincipalName").Value = TextPN.Text 
    .Properties("sAMAccountName").Value = TextAlias.Text
    .Properties("givenname").Value = TextGivenname.Text
    .Properties("sn").Value = TextSurname.Text
    ……
    .CommitChanges()

    .Invoke("setPassword", New Object() {strDefaultPassword})
    .CommitChanges()
    .Properties("userAccountControl").Value = &H0001
    .CommitChanges()        
End With

该代码过去运行良好。现在我们已经将我们的网络服务器迁移到 Windows Server 2008 R2 和 IIS 7.5,突然代码不再工作了。(.net framework 是 2.0,不能更改) 用户仍然在我们的活动目录中创建,但帐户被自动禁用,并且没有设置密码。

调查此问题表明在该行引发了异常

 .Invoke("setPassword", New Object() {strDefaultPassword})

例外

The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)

用于连接 AD 的用户帐户仍然相同,并且具有域管理员权限。由于代码没有任何变化,我认为这肯定有另一个原因不再起作用?防火墙设置,IIS 配置,..?

有任何想法吗??

我知道这里有类似的情况尝试创建一个新的 Active Directory 用户, Invoke("SetPassword",pwd) 抛出 "The RPC server is available" ,但这对我没有帮助。

4

2 回答 2

1

DirectoryEntry.Invoke() 需要 AuthenticationType.Secure。这意味着它需要能够通过 Kerberos 或 NTLM 对请求进行身份验证。

它首先尝试使用 LDAPS (TCP 636),然后在由于缺少或无效证书而超时或失败时回退到 CiFS (TCP445)。如果这些端口都没有打开,它将失败并出现“RPC 服务器不可用”异常。

于 2013-02-25T12:49:29.683 回答
1

检查防火墙上的 TCP/UDP 445 端口是否打开。要从域外连接到 AD 服务器,您需要打开以下端口: . TCP/UDP 389 (LDAP)。TCP 3268 (GC)。TCP/UDP 445(基于 IP 的 SMB)

于 2013-02-25T10:35:41.697 回答