首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Active Directory通知

Active Directory通知
EN

Stack Overflow用户
提问于 2016-09-01 23:37:01
回答 1查看 71关注 0票数 0

我看过微软记录的这个例子,但是我不能让它在visual studio 2012的控制台项目下工作。https://msdn.microsoft.com/en-us/library/ms676877(v=vs.85).aspx

我是不是漏掉了什么,比如。控制台应用程序是否正确。

我得到的错误是:

代码语言:javascript
复制
Error   1   error LNK2019: unresolved external symbol __imp__ldap_openW referenced in function "int __cdecl GetChangeNotifications(wchar_t *)" (?GetChangeNotifications@@YAHPA_W@Z) C:\projects\AD_Notifications\AD_Change_Notifications\AD_Change_Notifications\AD_Change_Notifications.obj    AD_Change_Notifications

根据我所读到的,这是一个链接器错误,这是很明显的,但它都在一个文件中,所以我不明白我应该链接什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-14 17:13:06

我在java中找到的最好的答案引用自https://community.oracle.com/thread/1158217

代码语言:javascript
复制
/**
 * ldapnotify.java
 * December 2004
 * Sample JNDI application that uses AD LDAP Notification Control.
 * 
 **/

import java.util.Hashtable;
import java.util.Enumeration;
import javax.naming.*;
import javax.naming.ldap.*;
import com.sun.jndi.ldap.ctl.*;
import javax.naming.directory.*;

class NotifyControl implements Control {
     public byte[] getEncodedValue() {
             return new byte[] {};
     }
       public String getID() {
          return "1.2.840.113556.1.4.528";
     }
      public boolean isCritical() {
          return true;
     }
}

class ldapnotify {

     public static void main(String[] args) {

          Hashtable env = new Hashtable();
          String adminName = "CN=Administrator,CN=Users,DC=antipodes,DC=com";
          String adminPassword = "XXXXXXXX";
          String ldapURL = "ldap://mydc.antipodes.com:389";
          String searchBase = "DC=antipodes,DC=com";

          //For persistent search can only use objectClass=*
          String searchFilter = "(objectClass=*)";

               env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");

          //set security credentials, note using simple cleartext authentication
          env.put(Context.SECURITY_AUTHENTICATION,"simple");
          env.put(Context.SECURITY_PRINCIPAL,adminName);
          env.put(Context.SECURITY_CREDENTIALS,adminPassword);

          //connect to my domain controller
          env.put(Context.PROVIDER_URL,ldapURL);

          try {
               //bind to the domain controller
                  LdapContext ctx = new InitialLdapContext(env,null);

               // Create the search controls           
               SearchControls searchCtls = new SearchControls();

               //Specify the attributes to return
               String returnedAtts[] = null;
               searchCtls.setReturningAttributes(returnedAtts);

               //Specify the search scope
               searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

                     //Specifiy the search time limit, in this case unlimited
               searchCtls.setTimeLimit(0);

               //Request the LDAP Persistent Search control
                     Control[] rqstCtls = new Control[]{new NotifyControl()};
                     ctx.setRequestControls(rqstCtls);

               //Now perform the search
               NamingEnumeration answer = ctx.search(searchBase,searchFilter,searchCtls);
                SearchResult sr;
                     Attributes attrs;

               //Continue waiting for changes....forever
               while(true) {
                    System.out.println("Waiting for changes..., press Ctrl C to exit");

                     sr = (SearchResult)answer.next();
                          System.out.println(">>>" + sr.getName());

                    //Print out the modified attributes
                    //instanceType and objectGUID are always returned
                    attrs = sr.getAttributes();
                    if (attrs != null) {
                         try {

                              for (NamingEnumeration ae = attrs.getAll();ae.hasMore();) {
                                   Attribute attr = (Attribute)ae.next();
                                   System.out.println("Attribute: " + attr.getID());
                                   for (NamingEnumeration e = attr.getAll();e.hasMore();System.out.println("   " + e.next().toString()));
                              }
                         } 
                         catch (NullPointerException e)     {
                              System.err.println("Problem listing attributes: " + e);
                         }
                    }
               }
              } 

          catch (NamingException e) {
                      System.err.println("LDAP Notifications failure. " + e);
              } 
       } 
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39275734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档