VB.NET将用户添加到通讯组列表中。发生操作错误

时间:2015-06-22 16:07:11

标签: vb.net directoryservices

所以这就是我所拥有的 -

Public Shared Function GetDirectoryEntry() As DirectoryEntry
    Try
        Dim entryRoot As New DirectoryEntry("LDAP://RootDSE")
        Dim Domain As String = DirectCast(entryRoot.Properties("defaultNamingContext")(0), String)

        Dim de As New DirectoryEntry()

        de.Path = "LDAP://" & Domain
        de.AuthenticationType = AuthenticationTypes.Secure

        Return de
    Catch
        Return Nothing
    End Try
End Function

Protected Sub rbAddUser_Click(sender As Object, e As EventArgs) Handles rbAddUser.Click
    AddMemberToGroup("LDAP://DOMAIN.local/CN=" & !DISTRIBUTIONNAME! & ",CN=Users,DC=DOMAIN,DC=local", "/CN=" & !SELECTEDUSER! & ",CN=Users,DC=DOMAIN,DC=local")
End Sub

Private Sub AddMemberToGroup(ByVal bindString As String, ByVal newMember As String)

    Dim ent As DirectoryEntry = GetDirectoryEntry()
    ent.Properties("member").Add(newMember)
    ent.CommitChanges()
End Sub

我希望这对人们来说很容易阅读,无论如何,用户在表格中选择组和用户,当他们点击添加按钮时,我希望所选用户添加到选定的分发列表。

当它到达CommitChanges()时,我收到此错误

  

类型' System.DirectoryServices.DirectoryServicesCOMException'的异常发生在System.DirectoryServices.dll但未在用户代码中处理附加信息:发生操作错误。错误-2147016672

2 个答案:

答案 0 :(得分:1)

这是来自official documentation

的流程模型应用程序池配置的常见问题
  

通过使用<processModel>元素,您可以在IIS 7及更高版本上配置应用程序池的许多安全性,性能,运行状况和可靠性功能。

此问题的存在是因为CommitChanges()需要提升权限,并且可以通过将您的网络应用程序设置为在NetworkManager下运行来修复;这可以通过两种方式完成:

  1. 直接在您的代码中,将问题代码放在此Using语句中:

    Using HostingEnvironment.Impersonate()
        'Problem code goes here.
    End Using
    
  2. 通过IIS管理器:

    1. 导航到您网站的应用程序池;
    2. 导航至高级设置;
    3. 向下滚动到Process Model组;
    4. Identity更改为NetworkService

答案 1 :(得分:0)

我通过传递用户凭据解决了错误

Private Sub AddMemberToGroup(ByVal bindString As String, ByVal newMember As String)

Dim ent As New GetDirectoryEntry(bindString)
ent.Properties("member").Add(newMember)
ent.Username = "DOMAIN\USERNAME"
ent.Password = "PASSWORD"
ent.CommitChanges()
End Sub

但是我的代码仍然无效,我只是没有错误。