聊聊Lync二次开发
很长时间没有碰过Lync了,因为近一年多都是在使用Java开发,Lync也已经改名(或升级?)为Skype for business,最近翻了翻MSDN上的开发资料,发现Skype多了个Web SDK,我感觉挺有意思的,有时间我会尝试一下。想想这款产品这么多年,从Communicate到Lync,再到现在的Skype,不知道二次开发的方式是否会有所创新,说实话,我对于Lync的二次开发方式很失望,因为要想将其改造的符合国情,耗费的时间、成本和精力都是巨大的。
Communicate的时候,在Client的主界面下部提供嵌入接口,可以嵌入自定义的Web应用,从而实现组织结构树、企业门户的嵌入等功能。从Lync开始,主界面的嵌入接口被关闭,微软鼓吹的一系列二次开发要不就是在通讯界面左侧嵌入Silverlight,要不就是通过菜单挂接外部可执行程序,要不就是使用UI抑制模式做一款新的Client,友好度降低很多,以至于国内的大部分企业走了另外一条路,通过破解把客户端黑掉,重绘整个界面。
最开始接触Lync二次开发的时候,是通过自定义的应用程序使用Windows API将原始的Client主界面隐藏掉,但是这样带来的问题就是不稳定,登录时的过度非常不平滑,有时候Client的主界面会跳出来,有时候会死掉,后来通过Hook的方式来解决,但是还是达不到理想的效果,杀毒软件也频繁报警,结果就是勉强应用,客户十分不满。
痛定思痛之后,决定重新挑选一条路线来完成二次开发工作。在查阅了大量资料后,由于技术储备的限制,如果走重新绘制界面的道路,觉的风险太大,所以最后选择的是使用UI抑制模式将原始UI关闭,再使用WPF技术重新开发一款客户端,结合Lync的SDK来达到最终的目的。谁知道,这个坑挖的越来越大,直到我离开上家公司,这个坑也没有被完全填补。
最开始期望实现单人聊天、多人聊天、群组聊天、文件传输、富文本传输这些主要功能,后来发现除了单人聊天能够通过Lync提供的SDK相对方便的完成,其它的功能全都是焦油坑。
由于国人用惯了QQ,所以临时讨论组和群组是不可或缺的功能,但是Lync的多人会话简直是扯淡,由一人发起然后将人员拽入,如果中途退出就无法再接收到信息,想解决这个问题就要监控上下线状态,使用SDK将人员载入,这就是很大的一个坑。
文件传输就更别说了,选择UI抑制模式就等于选择关闭文件传输功能,必须自行开发这个功能。为此,我还专门研究了一把Socket,最后服务器选择的是开源的SuperSocket,客户端参考它附带的源码改变了一下,为此还了解了封包、粘包等相关知识,费了九牛二虎之力,终于完成,但是缺陷就是非点对点,而是通过服务器中转,经常性的产生不稳定异常。面对客户方的复杂网络环境,简直就是焦头烂额。
富文本也是一大块难点,要实现图片异步加载、表情显示,最开始的时候还想仿Lync显示文件传输进度条,结果还是作罢。因为图片异步加载就已经贯穿了开发过程,不停的调整,不停的遇到BUG再解决BUG,没有开源的组件可以参考,完全就是凭借支离破碎的信息在拼凑。
整整做了1年后,才勉强出了一个可用版本,结果在整个公司试用后,不是SDK在有的机器上有问题,就是各种莫名其妙的崩溃和掉线,整个项目组只能见招拆招,疲于招架。说实话,使用UI抑制模式去开发,还不如自己重新做个企业沟通工具,都比基于Lync SDK去开发简单,我用血和泪的亲身体验总结出,这条路根本走不通,更不要说还有视频和语音会话,再加上电话会议,想想就感到后怕。
在离职之后,我又了解了一下破解,泡了一段日子看雪论坛,唯一想到的是通过DLL劫持技术,将自己的DLL打入到Lync的进程中去,这样的话杀毒软件不会报警,而且可以通过Windows API控制Lync主界面,也可以集成自己的EXE程序,可是没有机会去尝试,最后也懒的尝试。
因为我觉的Lync二次开发简直就是个性价比极差的差事,如果不是为了其它目的,只是单纯的满足客户的需要,这种项目完全可以不做,投入巨大,产出很小,除非你有一堆好手,能破解、懂网络,从C到C++到C#全部精通的好手。不过既然都有这样的人才了,干点其它的什么不行呢,非得跟这上吊死,岂不是吃饱了撑的。
如果Skype的Web SDK有所改善,可以做一些轻量级的集成,我觉的倒是一条可选的道路,毕竟HTML和Javascript相结合起来,做界面要比Client容易的多,而且在普通的OA或者门户中集成一些轻量级的应用,比如在线的情况、简易聊天、呼出客户端等等的定制,也要容易的多。从性价比上来讲,有一定的可能性。
在互联网大潮席卷的当下,在开源大势所趋的时候,在Java大行其道的情况下,微软这些年的日子确实不太好过,基因决定了它转身很难,虽然总是在尝试,但是总是在失败。不过还是希望.NET不要太式微,毕竟多一份选择,这个市场就多一份活力,封闭的市场还是很难长久的,所以也希望Skype for business比起它的前辈,能够有所突破。
其它相关文章请参见:Lync开发
写的太好了,多年前也是经历过这个过程,没楼主走这么远,中途及时刹车退出,总结下来,Lync不像微软其他产品有较多的扩展接口,Lync二次开发的路不要碰。
网上资料找了老半天,也没找到相关的API ,真是糟心
搞Lync真的很糟心,往事不堪回首