背景:公司里有eHR系统,有网域,IBM Lotus Notes邮件系统,新人入职会在eHR系统里提前建好档案,网域帐号、邮箱帐号均会在入职前提前建好,因为邮箱帐号是晚于eHR建档的,因此在eHR建档时邮箱地址都是没有维护的,即使有维护,也可能维护是员工的个人邮箱,需要统一维护成公司的邮箱地址。

公司人资部虽然有要求员工自行维护个人信息,包括邮箱地址,但是收效甚微,因此才想到能否实现从LDAP中直接获取邮箱地址信息并与eHR同步?

我咨询了一下公司的邮件系统负责人,Notes有没有接口可以查到每个人的邮箱,他说应该是可以的,因为反垃圾邮件系统就设过,里面有设服务器和端口,既然反垃圾邮箱系统可以从Notes里获邮箱地址,其他系统应该也可以。

接下来就搜索C#访问LDAP,这方面的资料还算不少,网上找一找,很容易写,大致就是以下几行,查询的结果就在result变量里。

DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://ip:port", @"user", "password", AuthenticationTypes.Anonymous);

DirectorySearcher searcher = new DirectorySearcher(directoryEntry)
{
    Asynchronous = false,
    CacheResults = false,
    ClientTimeout = new TimeSpan(0, 0, 1),
    Filter = "((cn=" + empName + "))"
}; searcher.PropertiesToLoad.AddRange(new[] { "cn", "sn", "displayName", "mail", "department", "company" });
SearchResultCollection result = searcher.FindAll();

  

有几个地方需要注意

1、LDAP后面的地址错误,会提示”该服务器不可操作“

2、验证方式不对,会提示”出现了一个协议错误"或者“该服务器不可操作”,我选的是AuthenticationTypes.Anonymous匿名方式,这种方式用户名和密码是可以不用输的。

3、Filter就是要查找的条件了,怎么写这个条件,可以下载一款软件,LDAPSoft LDAP Browser,用这个就可以很清楚的看到公司 LDAP的层次架构,知道该如何下条件了。

以上代码在测试工程中调试,很快就成功了,接下来将此段代码封装成web service,然后就利用上一章节所讲的Sql Server里Call Web service的技术,写一个Job,循环获取公司里邮箱为空或者非公司邮箱地址的人员,调用该接口实现同步,这样就能实现eHR同LDAP的邮箱地址同步了。

因为公司里会有员工同名的问题,Notes里是可以将工号输入进去的,因为工号是唯一的,按工号找邮箱地址就会非常准确了。

在用.net写web service时,访问时报错,提示“因 URL 意外地以“/****”结束,请求格式无法识别。”,这个错误只要在web.config配置下就可以了

web.config文件中的 <system.web> 节点下加入:
<webServices>
    <protocols>
        <add name= "HttpPost"/>
        <add name= "HttpGet"/>
    </protocols>
</webServices>

不过这段落是有风险的,如果是查询的Web Service还好,但是如果是更新或删除类的web service,被人知道后可以随意操作乱改你的数据。

eHR自动同步获取LDAP中的邮箱地址的更多相关文章

  1. 如何使用JAVA语言抓取某个网页中的邮箱地址

    现实生活中咱们常常在浏览网页时看到自己需要的信息,但由于信息过于庞大而又不能逐个保存下来. 接下来,咱们就以获取邮箱地址为例,使用java语言抓取网页中的邮箱地址 实现思路如下: 1.使用Java.n ...

  2. 制作一个文档同步工具,自动同步到gitee中。。。

    之所以要做这个工具是为了让自己可以随时用电脑时能记录日常工作或生活.一般只需要简单记录下就行了.这样我在家里的和公司里的记录都能同步看到. 这样后期整理的时候看到几个关键词就能想起来具体的事情,有的也 ...

  3. php获取内容中第一张图片地址

    $note = '<img src="http://images.xxx.com/article/cover/201601/20/141539161273.png?imageView2 ...

  4. ARPSpoofing教程(二) - 获取网络设备中的详细地址信息

    WinPcap中文API  http://www.ferrisxu.com/WinPcap/html/index.html 1: #include"pcap.h" 2: #incl ...

  5. iOS webview 获取html中的图片地址

    //js代码,声明1个数组,对img 进行遍历,采用,分割多个url NSString * getAllImages = @"var str = new Array();" &qu ...

  6. asp.net mvc 注册中的邮箱激活功能实现(一)

    基本流程图 注册页面就不再写出,现在将发送邮件的代码粘贴出来 public ActionResult SendEmial() { ; string validataCode = System.Guid ...

  7. asp.net mvc 注册中的邮箱激活功能实现

    基本流程图 注册页面就不再写出,现在将发送邮件的代码粘贴出来   public ActionResult SendEmial() { ; string validataCode = System.Gu ...

  8. 如何在 Xamarin 中快速集成 Android 版认证服务 - 邮箱地址篇

    Xamarin 作为微软提供的移动服务多系统开发平台,成为很多开发者首选的应用开发平台.AppGallery Connect(以下简称 AGC)也在逐步的支持 Xamarin 的 SDK.认证服务也是 ...

  9. IOS 获取通讯录中信息

    获取通讯录中信息 一. 我们设置一个ABAddressBookRef类型的属性addressBook. 二. 要获得通讯录中的信息,我们需要获取访问通讯录的权限. 在运行下面的获取权限的方法的时候,系 ...

随机推荐

  1. 003-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-分布式服务框架的选择

    3.1.淘宝平台“服务化”历程 大约2007年,淘宝500人团队,维护一个war包,200多个功能模块. 1)项目团队协同成本高,业务响应越来越慢 2)应用复杂度超出人的认知负载. 3)错误难于隔离[ ...

  2. 回文字符串 NYOJ

    # include<iostream> # include<string> # include<string.h> # include<queue> # ...

  3. centos6下升级git版本的操作记录

    编译go_ethereum的时候出现了错误 然后发现是自己的git没有升级成功  因为编译需要高版本的git版本  所以会编译不成功  之后执行 root@uatjenkins01 ~]# git - ...

  4. [Java in NetBeans] Lesson 00. Getting Set-up for Learning Java

    这个课程的参考视频在youtube. 主要学到的知识点有: set up needs Java SE JDK, NetBeans IDE class name should be the same l ...

  5. trie字典树

    ---恢复内容开始--- 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 #include <bits/stdc++.h> usin ...

  6. flow ci的构建

    自动构建遇到的问题. 1. Analyzing dependencies Pre-downloading: `WeiboSDK` from `https://github.com/sinaweibos ...

  7. SEO--多领域

    1.社交媒体SEO优化,例如:视频,吸引流量 2.电商SEO,很多不是皇冠的商家也可以被搜索到 3.新媒体 微博 和 微信营销 手机端的SEO等.传统的SEO已经渐渐不具备竞争力 SEO盈利:网盟.广 ...

  8. Github Pages 搭建网站

    参考网站: https://pages.github.com/ http://gitbeijing.com/pages.html 搬进github:http://gitbeijing.com

  9. MySQL--8MySQL存储过程小结

    CURD: 就是对数据表进行插入更新删除查找的操作. 预编译:第一次会分析语法是否正确,编译成可识别的命令.然后存在内存中,以后再调用就省去了这两步,效率变高. 第一点:在存储过程内可以写控制语句,可 ...

  10. 无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。

    将项目部署到服务器后发现有如下问题,查了网上好多说是需要被序列化的类没有写上[Serializable]标志,所以把全部需要序列化的列都写上了标志发现还是不是,最后查到了发现网上说的并不太准确,而是需 ...