.Invoke(“SetPassword”, …) results in “RPC server is unavailable” error
我有一个页面可以使用 VB.NET 在我们的活动目录中创建新用户
我正在使用以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 框架是 2.0,不能更改)
用户仍然在我们的活动目录中创建,但该帐户被自动禁用并且未设置密码。
调查此问题表明在该行抛出异常
1 | .Invoke("setPassword", New Object() {strDefaultPassword}) |
异常
1 | The RPC server is unavailable. (Exception from HRESULT: 0x800706BA) |
用于连接到 AD 的用户帐户仍然是相同的,并且具有域管理员权限。
由于代码没有任何变化,我认为这肯定有另一个原因不再起作用?防火墙设置、IIS 配置、..?
有什么想法吗??
我知道这里有类似的情况尝试创建一个新的 Active Directory 用户,Invoke("SetPassword",pwd) throws "The RPC server is available"
,但这对我没有帮助。
DirectoryEntry.Invoke() 需要 AuthenticationType.Secure。这意味着它需要能够通过 Kerberos 或 NTLM 对请求进行身份验证。
它首先尝试使用 LDAPS (TCP 636),然后在由于缺少或无效证书而超时或失败时回退到 CiFS (TCP445)。如果这两个端口都没有打开,它将失败并出现"RPC 服务器不可用"异常。
检查 TCP/UDP 445 端口是否在您的防火墙上打开。
要从域外连接到 AD 服务器,您需要打开以下端口:
. TCP/UDP 389 (LDAP)
. TCP 3268 (GC)
. TCP/UDP 445(基于 IP 的 SMB)