Lync API中ContactManager和ConversationManager为null问题求助
我之前也碰到过一模一样的情况,结合你提到的Skype for Business和Exchange连接异常的提示,这大概率是Lync客户端内部的初始化流程因为Exchange连接问题卡住了——毕竟ContactManager和ConversationManager的正常初始化依赖客户端和Exchange完成联系人、日历等数据的同步,同步失败直接导致这两个组件没法正常实例化,最终返回null。
下面是几个我亲测有效的排查和解决步骤:
彻底重启Skype for Business客户端:这是最快速的尝试方向。很多时候客户端的连接缓存会出问题,你需要完全退出(包括打开任务管理器杀掉所有Skype相关的进程),然后重新启动客户端,让它重新发起和Exchange的连接请求。重启后先确认客户端的Exchange连接提示是否消失,再测试你的代码。
手动触发Exchange数据同步:在Skype for Business客户端里,点击右上角的设置图标→选项→联系人→点击「立即同步联系人」按钮,强制客户端和Exchange同步数据。同步完成后,再调用
LyncClient.GetClient()获取实例,检查那两个管理器是否正常。检查客户端的登录状态再访问管理器:你的代码里直接调用了
GetClient(),但其实Lync客户端有个State属性,必须确保客户端处于ClientState.SignedIn状态后,再去访问ContactManager和ConversationManager。可以加一段状态判断的代码:var lync = Microsoft.Lync.Model.LyncClient.GetClient(); if (lync.State == ClientState.SignedIn) { // 确认登录完成后再访问内部管理器 var contactManager = lync.ContactManager; var conversationManager = lync.ConversationManager; } else { // 可以等待客户端完成登录流程,或者提示用户检查登录状态 }有时候客户端虽然能被
GetClient()获取到,但还没走完登录和初始化的全部流程,这时候内部管理器自然就是null。验证Exchange Web Services(EWS)的可用性:虽然你说Exchange配置没问题,但可以手动测试EWS是否能正常访问。打开浏览器,访问
https://<你的Exchange服务器域名>/EWS/Exchange.asmx,如果能正常打开这个页面,说明EWS服务是正常的;如果打不开,可能是网络或者Exchange的EWS配置有隐性问题(比如证书信任、端口限制之类的)。清理Skype for Business的本地缓存:缓存文件损坏也可能导致连接异常。找到Skype的缓存目录(默认路径是
%userprofile%\AppData\Local\Microsoft\Office\16.0\Lync,版本号会根据你的Office版本有所不同),关闭Skype后删除这个目录下的所有文件,然后重新启动客户端,让它重新生成干净的缓存。
如果以上步骤都试过还是无法解决,可能需要检查AD中用户属性是否正确关联了Exchange邮箱,或者联系IT部门确认Skype for Business和Exchange的服务器端集成配置是否有过变更。
内容的提问来源于stack exchange,提问作者Alex

