在前面我们聊Outlook Anywhere的文章里头,我提到了MAPI over HTTP这个Exchange Server 2013 SP1中新增加的功能,这次这篇文章咱们就详细说说这个新的传输协议是什么,以及实战如何去配置它。
什么是MAPI/HTTP,有什么好处?
以前版本中(Exchange 2010),用的是RPC over HTTP(外部网络outlook anywhere)以及RPC Direct(内部网络)连接,Exchange 2013里,所有的连接都通过Outlook Anywhere,也就是RPC over HTTP来传输;到即将到来的Exchange 2016,至少我现在看到的风声是,将所有的RPC over HTTP替换成 MAPI over HTTP了。所以在Ex2013 SP1里,微软先推出了这个特性来试试水,看看收效如何。那么咱们也不要背道而驰,照着微软的战略也来学习配置看看。
咱们还是来看看这两张图,进行一个初步的分析。上面一张是旧的RPC/HTTP的传输过程,可以发现其实传输的流量封装层次是MAPI/RPC/HTTP这样一个三层封装,每次Outlook客户端进行连接都需要进行RPC_DATA_IN和RPC_DATA_OUT这么个来回2次的过程,再加上HTTPS与MAPI的连接。服务器和客户端之间会生成2个TCP长连接,4个活动连接。
下面一张图则是Mapi Over HTTP,可以看到将整个MAPI连接移到了标准的HTTP请求/响应模型上。这样就会减少客户端与服务器之间的连接,它们之间最大会存在2个活动连接,1个长连接和1个按需短连接(下文会提到这个按需)。
从上面两张图里还可以看到,一个是MAPI/RPC/HTTP,另一个是MAPI/HTTP,取消了整个RPC封装。取消了这一层封装也意味着取消了这一层的请求和回应。这就是为什么上面会提到连接数减少的原因。
减少连接数和降低封装的层数带来的直接好处就是降低客户端与服务器之间的交互时间,或者说,是更为贴近现代化场景(无线网络和远程办公网络)的设计。据微软自己吹牛逼说,当用户第一次配置好账号打开Outlook的时候停留在LOGO框的时间减少了70%……
另外一个特点就是,上面提到了的按需连接,它其实可以被理解为一个15分钟内有效的连接窗口,当客户端第一次与服务器建立连接完毕之后,MBX上会留出这么一个连接窗口进行按需连接,按什么需呢?重新连接的需求,也就是说客户端的网络短暂断开了之后,再进行重连,它就直接走这个窗口连进来,无需重复之前的验证过程。微软也吹牛逼说:同样休眠起来的笔记本电脑,用MAPI/HTTP的比用RPC/HTTP的重连时间短10秒……
这个时间窗口会在以后的版本中提的更大。
还有另外的一个特点,之前的RPC连接及其不具有可维护性(只能通过一些专门的微软的内部工具来进行debug),现在则是咱们的老朋友HTTP封装,不光提供了日志,甚至还有debug信息窗口。要知道RPC进程挂死这种故障只能通过重启来解决……
微软的路线就是慢慢去RPC化。然而这些特性都是从O365里学来的,在之前2016架构前瞻的文章里我也提到,微软很多新概念都被应用到O365上,然后觉得成熟了再做成功能特性给on-premises用户。
OK,咱们再说一下客户端是如何使用MAPI/HTTP与服务器进行连接的:
1、 Outlook客户端,发现自己是MAPI/HTTP兼容的客户端,就在autodiscover请求里带上一个参数X-MapiHTTPCapability=1
2、 服务器收到了这个autodiscover请求,发现有Mapi/HTTP参数,于是响应MAPI/HTTP的配置信息给客户端。配置信息里包括连接URL验证方法等等,当然前提是你的服务器已经打开了这个功能。
3、 Outlook收到这些信息之后发现它可以跟服务器建立Mapi/HTTP连接,于是告诉用户重启Outlook,如果用户不重启Outlook,则会继续使用RPC over HTTP
配置要求:
讲了这么多理论了,咱们开始实际配置一下这玩意儿,首先是MAPI over HTTP的一些前提条件。
对于服务器:Exchange Server 2013 SP1必需,再加个.Net Framework 4.5.2,你可能在有些文档里看到需要KB2908387/KB2908385/KB2908383这几个补丁,这几个hotfix现在只能联系MCS才能下载了…所以打个.Net Framework4.5.2吧
客户端要求:outlook 2013 SP1,outlook 2010 SP2 以及更新 KB2956191 和 KB2965295
配置步骤:
在所有的的CAS服务器上添加系统变量:变量名和值见下图:
接下来配置Mapi虚拟目录,本身在Exchange 2013 SP1安装的时候,就已经部署好了Mapi的虚拟目录。但是默认的,只配置好了internalURL,所以如果要对外访问,那么就得再配置一下ExternalUrl和外部访问时所用的验证方式。命令为