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

VB.NET将用户添加到通讯组列表。发生操作错误,vb.net,directoryservices,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) Di

这就是我得到的-

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.dll中发生类型为“System.DirectoryServices.DirectoryServicesMeException”的异常,但未在用户代码中处理其他信息:发生操作错误。错误-2147016672


这是流程模型应用程序池配置的一个常见问题,来自:

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

此问题的存在是因为
CommitChanges()
需要提升权限,可以通过将web应用程序设置为在
NetworkManager
下运行来解决;这可以通过两种方式实现:

  • 直接在代码中,使用语句将问题代码放入此

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

  • 导航到您网站的应用程序池
  • 导航到高级设置
  • 向下滚动至流程模型组
  • Identity
    更改为
    NetworkService

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

    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
    

    然而,我的代码仍然不工作,我只是没有得到任何错误

    这是一个web应用程序吗?我提供了一个答案,请查看。使用HostingEnvironment.Impersonate()不起作用。@Superseven是否尝试了第二种方法?是的。。。我得说这件事已经解决了。尽管我现在对这段代码感到迷茫,但我不再得到原始错误。